From 067d99aaa50322c59ca59bdfcdbb68a03ce4d958 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:39:12 +0200 Subject: [PATCH 001/309] Added HtmlUnit dependency --- spring-mvc-java/pom.xml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 33d6306c5a..4faea93caa 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -117,6 +117,12 @@ ${org.springframework.version} test + + net.sourceforge.htmlunit + htmlunit + ${net.sourceforge.htmlunit} + test + org.thymeleaf @@ -234,6 +240,7 @@ 4.4.1 4.5 2.9.0 + 2.23 3.5.1 2.6 @@ -245,4 +252,4 @@ 1.8.7 - \ No newline at end of file + From 17166a539467d0e2ce51497cae1f2a9823244d2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:42:00 +0200 Subject: [PATCH 002/309] Create MessageController.java --- .../web/controller/MessageController.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java new file mode 100644 index 0000000000..cfc73aeabe --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java @@ -0,0 +1,24 @@ +package com.baeldung.web.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; + +@Controller +@RequestMapping("/message") +public class MessageController { + + @RequestMapping(value = "/showForm", method = RequestMethod.GET) + public String showForm() { + return "message"; + } + + @RequestMapping(value = "/processForm", method = RequestMethod.POST) + public String processForm(@RequestParam("message") final String message, final Model model) { + model.addAttribute("message", message); + return "message"; + } + +} From 70ed3059549646774f68fcb1d7e36a0268f5be1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:43:53 +0200 Subject: [PATCH 003/309] Create TestConfig.java --- .../com/baeldung/htmlunit/TestConfig.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java new file mode 100644 index 0000000000..1357310b1f --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java @@ -0,0 +1,42 @@ +package com.baeldung.htmlunit; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.ViewResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; +import org.thymeleaf.spring4.SpringTemplateEngine; +import org.thymeleaf.spring4.view.ThymeleafViewResolver; +import org.thymeleaf.templateresolver.ServletContextTemplateResolver; + +@Configuration +@EnableWebMvc +@ComponentScan(basePackages = { "com.baeldung.web.controller" }) +public class TestConfig extends WebMvcConfigurerAdapter { + + @Bean + public ViewResolver thymeleafViewResolver() { + final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); + viewResolver.setTemplateEngine(templateEngine()); + viewResolver.setOrder(1); + return viewResolver; + } + + @Bean + public ServletContextTemplateResolver templateResolver() { + final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); + templateResolver.setPrefix("/WEB-INF/templates/"); + templateResolver.setSuffix(".html"); + templateResolver.setTemplateMode("HTML5"); + return templateResolver; + } + + @Bean + public SpringTemplateEngine templateEngine() { + final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); + templateEngine.setTemplateResolver(templateResolver()); + return templateEngine; + } + +} From b882a23ab60be998a673e16b074a85c9922973e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:44:21 +0200 Subject: [PATCH 004/309] Create HtmlUnitAndSpringTest.java --- .../htmlunit/HtmlUnitAndSpringTest.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java new file mode 100644 index 0000000000..dcc7555ae2 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java @@ -0,0 +1,79 @@ +package com.baeldung.htmlunit; + +import java.io.IOException; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder; +import org.springframework.web.context.WebApplicationContext; + +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlForm; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; +import com.gargoylesoftware.htmlunit.html.HtmlTextInput; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(classes = { TestConfig.class }) +public class HtmlUnitAndSpringTest { + + @Autowired + private WebApplicationContext wac; + + private WebClient webClient; + + @Before + public void setup() { + webClient = MockMvcWebClientBuilder.webAppContextSetup(wac).build(); + } + + @Test + @Ignore + public void givenAMessage_whenSent_thenItShows() { + final String text = "Hello world!"; + HtmlPage page; + + try { + + page = webClient.getPage("http://localhost/message/showForm"); + System.out.println(page.asXml()); + + final HtmlTextInput messageText = page.getHtmlElementById("message"); + messageText.setValueAttribute(text); + + final HtmlForm form = page.getForms().get(0); + final HtmlSubmitInput submit = form.getOneHtmlElementByAttribute("input", "type", "submit"); + final HtmlPage newPage = submit.click(); + + final String receivedText = newPage.getHtmlElementById("received").getTextContent(); + + Assert.assertEquals(receivedText, text); + System.out.println(newPage.asXml()); + + } catch (FailingHttpStatusCodeException | IOException e) { + e.printStackTrace(); + } + + } + + @Test + public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { + try (final WebClient client = new WebClient()) { + + webClient.getOptions().setThrowExceptionOnScriptError(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); + Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); + } + } + +} From 12faa318ae4c5c5f645ef4f5559ac9fda954e287 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:44:45 +0200 Subject: [PATCH 005/309] Create HtmlUnitAndJUnitTest.java --- .../htmlunit/HtmlUnitAndJUnitTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java new file mode 100644 index 0000000000..58e5f9829b --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java @@ -0,0 +1,22 @@ +package com.baeldung.htmlunit; + +import org.junit.Assert; +import org.junit.Test; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; + +public class HtmlUnitAndJUnitTest { + + @Test + public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { + try (final WebClient webClient = new WebClient()) { + + webClient.getOptions().setThrowExceptionOnScriptError(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); + Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); + } + } + +} From 76617960be056f8364f6482b2bb204be44c2cd55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Mon, 1 Aug 2016 10:45:10 +0200 Subject: [PATCH 006/309] Create HtmlUnitWebScraping.java --- .../htmlunit/HtmlUnitWebScraping.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java new file mode 100644 index 0000000000..16d18717e6 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java @@ -0,0 +1,40 @@ +package com.baeldung.htmlunit; + +import java.util.List; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlAnchor; +import com.gargoylesoftware.htmlunit.html.HtmlHeading1; +import com.gargoylesoftware.htmlunit.html.HtmlHeading2; +import com.gargoylesoftware.htmlunit.html.HtmlPage; + +public class HtmlUnitWebScraping { + + public static void main(final String[] args) throws Exception { + try (final WebClient webClient = new WebClient()) { + + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/full_archive"); + final HtmlAnchor latestPostLink = (HtmlAnchor) page.getByXPath("(//ul[@class='car-monthlisting']/li)[1]/a").get(0); + + System.out.println("Entering: " + latestPostLink.getHrefAttribute()); + + final HtmlPage postPage = latestPostLink.click(); + + final HtmlHeading1 heading1 = (HtmlHeading1) postPage.getByXPath("//h1").get(0); + System.out.println("Title: " + heading1.getTextContent()); + + final List headings2 = (List) postPage.getByXPath("//h2"); + + final StringBuilder sb = new StringBuilder(heading1.getTextContent()); + for (final HtmlHeading2 h2 : headings2) { + sb.append("\n").append(h2.getTextContent()); + } + + System.out.println(sb.toString()); + } + } + +} From 897e24552410ce51683c081c2c8640e43c115f42 Mon Sep 17 00:00:00 2001 From: "nguyenminhtuanfit@gmail.com" Date: Sat, 3 Sep 2016 11:32:42 +0700 Subject: [PATCH 007/309] BAEL-221 - Guide to Hazelcast --- hazelcast/pom.xml | 72 +++++++++++++++++++ .../hazelcast/cluster/NativeClient.java | 26 +++++++ .../hazelcast/cluster/ServerNode.java | 23 ++++++ .../listener/CountryEntryListener.java | 41 +++++++++++ hazelcast/src/main/resources/hazelcast.xml | 16 +++++ hazelcast/src/main/resources/logback.xml | 18 +++++ 6 files changed, 196 insertions(+) create mode 100644 hazelcast/pom.xml create mode 100644 hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java create mode 100644 hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java create mode 100644 hazelcast/src/main/java/com/baeldung/hazelcast/listener/CountryEntryListener.java create mode 100644 hazelcast/src/main/resources/hazelcast.xml create mode 100644 hazelcast/src/main/resources/logback.xml diff --git a/hazelcast/pom.xml b/hazelcast/pom.xml new file mode 100644 index 0000000000..62cfa89c0f --- /dev/null +++ b/hazelcast/pom.xml @@ -0,0 +1,72 @@ + + 4.0.0 + com.baeldung + hazelcast + 0.0.1-SNAPSHOT + hazelcast + + + + + com.hazelcast + hazelcast-all + ${hazelcast.version} + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + + ch.qos.logback + logback-classic + ${logback.version} + + + + ch.qos.logback + logback-core + ${logback.version} + + + + + + hazelcast + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + + + + 3.7 + + + 1.7.21 + 1.1.7 + + + 3.5.1 + + + \ No newline at end of file diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java new file mode 100644 index 0000000000..bda4b94733 --- /dev/null +++ b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java @@ -0,0 +1,26 @@ +package com.baeldung.hazelcast.cluster; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.baeldung.hazelcast.listener.CountryEntryListener; +import com.hazelcast.client.HazelcastClient; +import com.hazelcast.client.config.ClientConfig; +import com.hazelcast.config.GroupConfig; +import com.hazelcast.core.HazelcastInstance; +import com.hazelcast.core.IMap; + +public class NativeClient { + private static final Logger logger = LoggerFactory.getLogger(NativeClient.class); + + public static void main(String[] args) throws InterruptedException { + ClientConfig config = new ClientConfig(); + GroupConfig groupConfig = config.getGroupConfig(); + groupConfig.setName("dev"); + groupConfig.setPassword("dev-pass"); + HazelcastInstance hazelcastInstanceClient = HazelcastClient.newHazelcastClient(config); + IMap countryMap = hazelcastInstanceClient.getMap("country"); + countryMap.addEntryListener(new CountryEntryListener(), true); + logger.info("Country map size: " + countryMap.size()); + } +} diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java new file mode 100644 index 0000000000..8680180399 --- /dev/null +++ b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java @@ -0,0 +1,23 @@ +package com.baeldung.hazelcast.cluster; + +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.hazelcast.core.Hazelcast; +import com.hazelcast.core.HazelcastInstance; +import com.hazelcast.core.IdGenerator; + +public class ServerNode { + private static final Logger logger = LoggerFactory.getLogger(ServerNode.class); + + public static void main(String[] args) { + HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); + Map countryMap = hazelcastInstance.getMap("country"); + IdGenerator idGenerator = hazelcastInstance.getIdGenerator("newid"); + Long countryIdGenerator = idGenerator.newId() == 0L ? 1L : idGenerator.newId(); + countryMap.put(countryIdGenerator, "Country1"); + logger.info("Country map size: " + countryMap.size()); + } +} diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/listener/CountryEntryListener.java b/hazelcast/src/main/java/com/baeldung/hazelcast/listener/CountryEntryListener.java new file mode 100644 index 0000000000..1f95dcd9f3 --- /dev/null +++ b/hazelcast/src/main/java/com/baeldung/hazelcast/listener/CountryEntryListener.java @@ -0,0 +1,41 @@ +package com.baeldung.hazelcast.listener; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.hazelcast.core.EntryEvent; +import com.hazelcast.core.MapEvent; +import com.hazelcast.map.listener.EntryAddedListener; +import com.hazelcast.map.listener.EntryEvictedListener; +import com.hazelcast.map.listener.EntryRemovedListener; +import com.hazelcast.map.listener.EntryUpdatedListener; +import com.hazelcast.map.listener.MapClearedListener; +import com.hazelcast.map.listener.MapEvictedListener; + +public class CountryEntryListener implements EntryAddedListener, EntryRemovedListener, EntryUpdatedListener, EntryEvictedListener, MapEvictedListener, MapClearedListener { + private static final Logger logger = LoggerFactory.getLogger(CountryEntryListener.class); + + public void entryAdded(EntryEvent event) { + logger.info("entryAdded:" + event); + } + + public void entryUpdated(EntryEvent event) { + logger.info("entryUpdated:" + event); + } + + public void entryRemoved(EntryEvent event) { + logger.info("entryRemoved:" + event); + } + + public void entryEvicted(EntryEvent event) { + logger.info("entryEvicted:" + event); + } + + public void mapCleared(MapEvent event) { + logger.info("mapCleared:" + event); + } + + public void mapEvicted(MapEvent event) { + logger.info("mapEvicted:" + event); + } +} diff --git a/hazelcast/src/main/resources/hazelcast.xml b/hazelcast/src/main/resources/hazelcast.xml new file mode 100644 index 0000000000..f29dc532b8 --- /dev/null +++ b/hazelcast/src/main/resources/hazelcast.xml @@ -0,0 +1,16 @@ + + + + 5701 + + + + + machine1 + localhost + + + + \ No newline at end of file diff --git a/hazelcast/src/main/resources/logback.xml b/hazelcast/src/main/resources/logback.xml new file mode 100644 index 0000000000..8b566286b8 --- /dev/null +++ b/hazelcast/src/main/resources/logback.xml @@ -0,0 +1,18 @@ + + + + + + %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg %n + + + + + + + + + + + + \ No newline at end of file From b02d83df2242da8b85d2451d81f1c75dffe0672a Mon Sep 17 00:00:00 2001 From: "chris.anatalio" Date: Sat, 17 Sep 2016 22:51:06 -0700 Subject: [PATCH 008/309] BAEL-223 - Integrate DynamoDB into a Spring Boot Application using Spring Data --- spring-boot-data-dynamodb/.gitignore | 4 + spring-boot-data-dynamodb/README.MD | 2 + spring-boot-data-dynamodb/pom.xml | 189 ++++++++++++++++++ .../spring/data/es/config/DynamoDBConfig.java | 41 ++++ .../spring/data/es/model/ProductInfo.java | 47 +++++ .../es/repository/ProductInfoRepository.java | 14 ++ .../main/java/org/baeldung/Application.java | 13 ++ .../src/main/resources/application.properties | 31 +++ .../src/main/resources/demo.properties | 6 + .../src/main/resources/logback.xml | 14 ++ .../src/main/resources/templates/index.html | 19 ++ .../ProductInfoRepositoryIntegrationTest.java | 85 ++++++++ .../src/test/resources/application.properties | 7 + .../resources/exception-hibernate.properties | 2 + .../src/test/resources/exception.properties | 6 + 15 files changed, 480 insertions(+) create mode 100644 spring-boot-data-dynamodb/.gitignore create mode 100644 spring-boot-data-dynamodb/README.MD create mode 100644 spring-boot-data-dynamodb/pom.xml create mode 100644 spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java create mode 100644 spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/model/ProductInfo.java create mode 100644 spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repository/ProductInfoRepository.java create mode 100644 spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java create mode 100644 spring-boot-data-dynamodb/src/main/resources/application.properties create mode 100644 spring-boot-data-dynamodb/src/main/resources/demo.properties create mode 100644 spring-boot-data-dynamodb/src/main/resources/logback.xml create mode 100644 spring-boot-data-dynamodb/src/main/resources/templates/index.html create mode 100644 spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java create mode 100644 spring-boot-data-dynamodb/src/test/resources/application.properties create mode 100644 spring-boot-data-dynamodb/src/test/resources/exception-hibernate.properties create mode 100644 spring-boot-data-dynamodb/src/test/resources/exception.properties diff --git a/spring-boot-data-dynamodb/.gitignore b/spring-boot-data-dynamodb/.gitignore new file mode 100644 index 0000000000..e26d6af438 --- /dev/null +++ b/spring-boot-data-dynamodb/.gitignore @@ -0,0 +1,4 @@ +/target/ +.settings/ +.classpath +.project diff --git a/spring-boot-data-dynamodb/README.MD b/spring-boot-data-dynamodb/README.MD new file mode 100644 index 0000000000..2a87b46021 --- /dev/null +++ b/spring-boot-data-dynamodb/README.MD @@ -0,0 +1,2 @@ +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring diff --git a/spring-boot-data-dynamodb/pom.xml b/spring-boot-data-dynamodb/pom.xml new file mode 100644 index 0000000000..023d249c56 --- /dev/null +++ b/spring-boot-data-dynamodb/pom.xml @@ -0,0 +1,189 @@ + + 4.0.0 + com.baeldung + spring-boot + 0.0.1-SNAPSHOT + jar + Spring Boot Actuator + This is simple boot application for Spring boot actuator test + + + spring-boot-starter-parent + org.springframework.boot + 1.2.3.RELEASE + + + + + + org.baeldung.boot.DemoApplication + UTF-8 + 1.8 + 4.3.1.RELEASE + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-starter-security + + + + io.dropwizard.metrics + metrics-core + + + + com.h2database + h2 + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.springframework.boot + spring-boot-starter + + + com.jayway.jsonpath + json-path + test + + + org.springframework.boot + spring-boot-starter-mail + + + org.subethamail + subethasmtp + 3.1.7 + test + + + + org.webjars + bootstrap + 3.3.4 + + + org.webjars + jquery + 2.1.4 + + + org.springframework.data + spring-data-jpa + 1.10.2.RELEASE + + + com.amazonaws + aws-java-sdk-dynamodb + 1.11.34 + + + org.socialsignin + spring-data-dynamodb + 4.2.1 + + + + + spring-boot + + + src/main/resources + true + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-war-plugin + + + + + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + opensourceagility-release + http://repo.opensourceagility.com/release/ + + + + + spring-snapshots + Spring Snapshots + https://repo.spring.io/snapshot + + true + + + + spring-milestones + Spring Milestones + https://repo.spring.io/milestone + + false + + + + + diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java new file mode 100644 index 0000000000..554a6c9c12 --- /dev/null +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java @@ -0,0 +1,41 @@ +package com.baeldung.spring.data.es.config; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +import com.amazonaws.auth.AWSCredentials; +import com.amazonaws.auth.BasicAWSCredentials; +import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; +import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; + +@Configuration +@ComponentScan(basePackages = { "com.baeldung.spring.data.es.service" }) +public class DynamoDBConfig { + + @Value("${amazon.dynamodb.endpoint}") + private String amazonDynamoDBEndpoint; + + @Value("${amazon.aws.accesskey}") + private String amazonAWSAccessKey; + + @Value("${amazon.aws.secretkey}") + private String amazonAWSSecretKey; + + @Bean + public AmazonDynamoDB amazonDynamoDB() { + AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient(amazonAWSCredentials()); + if (StringUtils.isNotEmpty(amazonDynamoDBEndpoint)) { + amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint); + } + return amazonDynamoDB; + } + + @Bean + public AWSCredentials amazonAWSCredentials() { + return new BasicAWSCredentials(amazonAWSAccessKey, amazonAWSSecretKey); + } + +} diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/model/ProductInfo.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/model/ProductInfo.java new file mode 100644 index 0000000000..4c97d14045 --- /dev/null +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/model/ProductInfo.java @@ -0,0 +1,47 @@ +package com.baeldung.spring.data.es.model; + +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; + +public class ProductInfo { + private String id; + private String msrp; + private String cost; + + public ProductInfo() { + } + + public ProductInfo(String cost, String msrp) { + this.msrp = msrp; + this.cost = cost; + } + + @DynamoDBHashKey + @DynamoDBAutoGeneratedKey + public String getId() { + return id; + } + + @DynamoDBAttribute + public String getMsrp() { + return msrp; + } + + @DynamoDBAttribute + public String getCost() { + return cost; + } + + public void setId(String id) { + this.id = id; + } + + public void setMsrp(String msrp) { + this.msrp = msrp; + } + + public void setCost(String cost) { + this.cost = cost; + } +} diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repository/ProductInfoRepository.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repository/ProductInfoRepository.java new file mode 100644 index 0000000000..a30ff1c4aa --- /dev/null +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repository/ProductInfoRepository.java @@ -0,0 +1,14 @@ +package com.baeldung.spring.data.es.repository; + +import java.util.List; + +import org.socialsignin.spring.data.dynamodb.repository.EnableScan; +import org.springframework.data.repository.CrudRepository; + +import com.baeldung.spring.data.es.model.ProductInfo; + +@EnableScan +public interface ProductInfoRepository extends CrudRepository { + + List findById(String id); +} diff --git a/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java b/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java new file mode 100644 index 0000000000..aae0c427a9 --- /dev/null +++ b/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java @@ -0,0 +1,13 @@ +package org.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.context.ApplicationContext; + +@org.springframework.boot.autoconfigure.SpringBootApplication +public class Application { + private static ApplicationContext applicationContext; + + public static void main(String[] args) { + applicationContext = SpringApplication.run(Application.class, args); + } +} diff --git a/spring-boot-data-dynamodb/src/main/resources/application.properties b/spring-boot-data-dynamodb/src/main/resources/application.properties new file mode 100644 index 0000000000..d30045d1dc --- /dev/null +++ b/spring-boot-data-dynamodb/src/main/resources/application.properties @@ -0,0 +1,31 @@ +server.port=8080 +server.contextPath=/springbootapp +management.port=8081 +management.address=127.0.0.1 + +endpoints.shutdown.enabled=true + +endpoints.jmx.domain=Spring Sample Application +endpoints.jmx.uniqueNames=true + +##jolokia.config.debug=true +##endpoints.jolokia.enabled=true +##endpoints.jolokia.path=jolokia + +spring.jmx.enabled=true +endpoints.jmx.enabled=true + +## for pretty printing of json when endpoints accessed over HTTP +http.mappers.jsonPrettyPrint=true + +## Configuring info endpoint +info.app.name=Spring Sample Application +info.app.description=This is my first spring boot application G1 +info.app.version=1.0.0 + +## Spring Security Configurations +security.user.name=admin1 +security.user.password=secret1 +management.security.role=SUPERUSER + +logging.level.org.springframework=INFO \ No newline at end of file diff --git a/spring-boot-data-dynamodb/src/main/resources/demo.properties b/spring-boot-data-dynamodb/src/main/resources/demo.properties new file mode 100644 index 0000000000..649b64f59b --- /dev/null +++ b/spring-boot-data-dynamodb/src/main/resources/demo.properties @@ -0,0 +1,6 @@ +spring.output.ansi.enabled=never +server.port=7070 + +# Security +security.user.name=admin +security.user.password=password \ No newline at end of file diff --git a/spring-boot-data-dynamodb/src/main/resources/logback.xml b/spring-boot-data-dynamodb/src/main/resources/logback.xml new file mode 100644 index 0000000000..78913ee76f --- /dev/null +++ b/spring-boot-data-dynamodb/src/main/resources/logback.xml @@ -0,0 +1,14 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + \ No newline at end of file diff --git a/spring-boot-data-dynamodb/src/main/resources/templates/index.html b/spring-boot-data-dynamodb/src/main/resources/templates/index.html new file mode 100644 index 0000000000..046d21600a --- /dev/null +++ b/spring-boot-data-dynamodb/src/main/resources/templates/index.html @@ -0,0 +1,19 @@ + + + WebJars Demo + + + + +

+
+ × + Success! It is working as we expected. +
+
+ + + + + + \ No newline at end of file diff --git a/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java new file mode 100644 index 0000000000..438499bae8 --- /dev/null +++ b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java @@ -0,0 +1,85 @@ +package com.baeldung.spring.data.es.repository; + +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.baeldung.Application; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.IntegrationTest; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.TestPropertySource; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; +import com.amazonaws.services.dynamodbv2.document.DynamoDB; +import com.amazonaws.services.dynamodbv2.document.Table; +import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; +import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; +import com.amazonaws.services.dynamodbv2.model.ResourceInUseException; +import com.baeldung.spring.data.es.model.ProductInfo; +import com.baeldung.spring.data.es.repository.ProductInfoRepository; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = Application.class) +@WebAppConfiguration +@IntegrationTest +@ActiveProfiles("local") +@TestPropertySource(properties = { "amazon.dynamodb.endpoint=http://localhost:8000/", "amazon.aws.accesskey=test1", "amazon.aws.secretkey=test231" }) +public class ProductInfoRepositoryIntegrationTest { + + private DynamoDBMapper dynamoDBMapper; + + @Autowired + private DynamoDB dynamoDB; + + @Autowired + private AmazonDynamoDB amazonDynamoDB; + + @Autowired + ProductInfoRepository ProductInfoRepository; + + private static final String EXPECTED_COST = "20"; + private static final String EXPECTED_PRICE = "50"; + + @Before + @Ignore + public void setUp() throws Exception { + + try { + dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB); + + CreateTableRequest tableRequest = dynamoDBMapper.generateCreateTableRequest(ProductInfo.class); // 1 + + tableRequest.setProvisionedThroughput(new ProvisionedThroughput(1L, 1L)); // 2 + + Table table = dynamoDB.createTable(tableRequest); // 3 + + table.waitForActive(); // 4 + } catch (ResourceInUseException e) { + // Do nothing, table already created + } + + // TODO How to handle different environments. i.e. AVOID deleting all entries in ProductInfoion table + dynamoDBMapper.batchDelete((List) ProductInfoRepository.findAll()); + } + + @Ignore + @Test + public void sampleTestCase() { + + ProductInfo dave = new ProductInfo(EXPECTED_COST, EXPECTED_PRICE); + ProductInfoRepository.save(dave); + + List result = (List) ProductInfoRepository.findAll(); + assertTrue("Not empty", result.size() > 0); + assertTrue("Contains item with expected cost", result.get(0).getCost().equals(EXPECTED_COST)); + } +} diff --git a/spring-boot-data-dynamodb/src/test/resources/application.properties b/spring-boot-data-dynamodb/src/test/resources/application.properties new file mode 100644 index 0000000000..01e8a2e52e --- /dev/null +++ b/spring-boot-data-dynamodb/src/test/resources/application.properties @@ -0,0 +1,7 @@ +spring.mail.host=localhost +spring.mail.port=8025 +spring.mail.properties.mail.smtp.auth=false + +amazon.dynamodb.endpoint=http://localhost:8000/ +amazon.aws.accesskey=key +amazon.aws.secretkey=key2 \ No newline at end of file diff --git a/spring-boot-data-dynamodb/src/test/resources/exception-hibernate.properties b/spring-boot-data-dynamodb/src/test/resources/exception-hibernate.properties new file mode 100644 index 0000000000..cde746acb9 --- /dev/null +++ b/spring-boot-data-dynamodb/src/test/resources/exception-hibernate.properties @@ -0,0 +1,2 @@ +spring.profiles.active=exception +spring.jpa.properties.hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext diff --git a/spring-boot-data-dynamodb/src/test/resources/exception.properties b/spring-boot-data-dynamodb/src/test/resources/exception.properties new file mode 100644 index 0000000000..c55e415a3a --- /dev/null +++ b/spring-boot-data-dynamodb/src/test/resources/exception.properties @@ -0,0 +1,6 @@ +# Security +security.user.name=admin +security.user.password=password + +spring.dao.exceptiontranslation.enabled=false +spring.profiles.active=exception \ No newline at end of file From d48bf9d2b6e122e21caf1e965a5bfb374757b50f Mon Sep 17 00:00:00 2001 From: "chris.anatalio" Date: Sat, 17 Sep 2016 23:15:17 -0700 Subject: [PATCH 009/309] BAEL-223 - Update Unit test name --- .../repository/ProductInfoRepositoryIntegrationTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java index 438499bae8..43369d3254 100644 --- a/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java +++ b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java @@ -25,7 +25,6 @@ import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; import com.amazonaws.services.dynamodbv2.model.ResourceInUseException; import com.baeldung.spring.data.es.model.ProductInfo; -import com.baeldung.spring.data.es.repository.ProductInfoRepository; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @@ -73,10 +72,10 @@ public class ProductInfoRepositoryIntegrationTest { @Ignore @Test - public void sampleTestCase() { + public void givenItemWithExpectedCost_whenRunFindAll_thenItemIsFound() { - ProductInfo dave = new ProductInfo(EXPECTED_COST, EXPECTED_PRICE); - ProductInfoRepository.save(dave); + ProductInfo productInfo = new ProductInfo(EXPECTED_COST, EXPECTED_PRICE); + ProductInfoRepository.save(productInfo); List result = (List) ProductInfoRepository.findAll(); assertTrue("Not empty", result.size() > 0); From 754679425313db7d7f4a524c5f83f40af10f1fdf Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Wed, 21 Sep 2016 16:52:26 +0200 Subject: [PATCH 010/309] Add endpoint for testing --- .../web/controller/ItemController.java | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java b/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java index cfde4b23b1..f3e3738bfe 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java @@ -14,20 +14,26 @@ import com.fasterxml.jackson.annotation.JsonView; @RestController public class ItemController { - @JsonView(Views.Public.class) - @RequestMapping("/items/{id}") - public Item getItemPublic(@PathVariable final int id) { - return ItemManager.getById(id); - } + @JsonView(Views.Public.class) + @RequestMapping("/items/{id}") + public Item getItemPublic(@PathVariable final int id) { + return ItemManager.getById(id); + } - @JsonView(Views.Internal.class) - @RequestMapping("/items/internal/{id}") - public Item getItemInternal(@PathVariable final int id) { - return ItemManager.getById(id); - } + @JsonView(Views.Internal.class) + @RequestMapping("/items/internal/{id}") + public Item getItemInternal(@PathVariable final int id) { + return ItemManager.getById(id); + } - @RequestMapping("/date") - public Date getCurrentDate() { - return new Date(); - } + @RequestMapping("/date") + public Date getCurrentDate() throws Exception { + return new Date(); + } + + @RequestMapping("/delay/{seconds}") + public void getCurrentTime(@PathVariable final int seconds) throws Exception { + + Thread.sleep(seconds * 1000); + } } \ No newline at end of file From 4cb5b8ad4a7379dd07e61c39b453d2918f312b10 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Mon, 26 Sep 2016 10:57:23 +0200 Subject: [PATCH 011/309] Add some OkHttp sample test --- okhttp/pom.xml | 44 +++++ .../okhttp/DefaultContentTypeInterceptor.java | 26 +++ .../okhttp/ProgressRequestWrapper.java | 74 ++++++++ .../org/baeldung/okhttp/OkHttpGetTest.java | 78 ++++++++ .../org/baeldung/okhttp/OkHttpHeaderTest.java | 48 +++++ .../org/baeldung/okhttp/OkHttpMiscTest.java | 104 +++++++++++ .../baeldung/okhttp/OkHttpPostingTest.java | 168 ++++++++++++++++++ .../baeldung/okhttp/OkHttpRedirectTest.java | 33 ++++ okhttp/src/test/resources/test.in | 1 + 9 files changed, 576 insertions(+) create mode 100644 okhttp/pom.xml create mode 100644 okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java create mode 100644 okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java create mode 100644 okhttp/src/test/resources/test.in diff --git a/okhttp/pom.xml b/okhttp/pom.xml new file mode 100644 index 0000000000..ba5bcf9725 --- /dev/null +++ b/okhttp/pom.xml @@ -0,0 +1,44 @@ + + 4.0.0 + org.baeldung.okhttp + okhttp + 0.0.1-SNAPSHOT + + + + + + com.squareup.okhttp3 + okhttp + ${com.squareup.okhttp3.version} + + + + + junit + junit + ${junit.version} + test + + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + + + + + 3.4.1 + + + 1.3 + 4.12 + + + + diff --git a/okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java b/okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java new file mode 100644 index 0000000000..2a33a1febd --- /dev/null +++ b/okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java @@ -0,0 +1,26 @@ +package org.baeldung.okhttp; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +public class DefaultContentTypeInterceptor implements Interceptor { + + private final String contentType; + + public DefaultContentTypeInterceptor(String contentType) { + this.contentType = contentType; + } + + public Response intercept(Interceptor.Chain chain) throws IOException { + + Request originalRequest = chain.request(); + Request requestWithUserAgent = originalRequest.newBuilder() + .header("Content-Type", contentType) + .build(); + + return chain.proceed(requestWithUserAgent); + } +} diff --git a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java new file mode 100644 index 0000000000..42df4ac1ee --- /dev/null +++ b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java @@ -0,0 +1,74 @@ +package org.baeldung.okhttp; + +import okhttp3.RequestBody; +import okhttp3.MediaType; + +import java.io.IOException; + +import okio.Buffer; +import okio.BufferedSink; +import okio.ForwardingSink; +import okio.Okio; +import okio.Sink; + +public class ProgressRequestWrapper extends RequestBody { + + protected RequestBody delegate; + protected ProgressListener listener; + + protected CountingSink countingSink; + + public ProgressRequestWrapper(RequestBody delegate, ProgressListener listener) { + this.delegate = delegate; + this.listener = listener; + } + + @Override + public MediaType contentType() { + return delegate.contentType(); + } + + @Override + public long contentLength() throws IOException { + return delegate.contentLength(); + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + + BufferedSink bufferedSink; + + countingSink = new CountingSink(sink); + bufferedSink = Okio.buffer(countingSink); + + delegate.writeTo(bufferedSink); + + bufferedSink.flush(); + } + + protected final class CountingSink extends ForwardingSink { + + private long bytesWritten = 0; + + public CountingSink(Sink delegate) { + super(delegate); + } + + @Override + public void write(Buffer source, long byteCount) throws IOException { + + super.write(source, byteCount); + + bytesWritten += byteCount; + listener.onRequestProgress(bytesWritten, contentLength()); + } + + } + + public static interface ProgressListener { + + public void onRequestProgress(long bytesWritten, long contentLength); + + } +} + diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java new file mode 100644 index 0000000000..e8edff92df --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java @@ -0,0 +1,78 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpGetTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + + @Test + public void whenGetRequestUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(BASE_URL + "/date") + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenGetRequestWithQueryParameterUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + HttpUrl.Builder urlBuilder = HttpUrl.parse(BASE_URL + "/ex/bars").newBuilder(); + urlBuilder.addQueryParameter("id", "1"); + + String url = urlBuilder.build().toString(); + + Request request = new Request.Builder() + .url(url) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenAsynchronousGetRequestUsingOkHttp_thenCorrect() { + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(BASE_URL + "/date") + .build(); + + Call call = client.newCall(request); + + call.enqueue(new Callback() { + + public void onResponse(Call call, Response response) throws IOException { + assertThat(response.code(), equalTo(200)); + } + + public void onFailure(Call call, IOException e) { + + } + }); + } +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java new file mode 100644 index 0000000000..5b2e89eca8 --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java @@ -0,0 +1,48 @@ +package org.baeldung.okhttp; + +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpHeaderTest { + + private static final String SAMPLE_URL = "http://www.github.com"; + + @Test + public void whenSetHeaderUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(SAMPLE_URL) + .addHeader("Content-Type", "application/json") + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + response.close(); + } + + @Test + public void whenSetDefaultHeaderUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient.Builder() + .addInterceptor(new DefaultContentTypeInterceptor("application/json")) + .build(); + + Request request = new Request.Builder() + .url(SAMPLE_URL) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + response.close(); + } + + +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java new file mode 100644 index 0000000000..246857cb71 --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java @@ -0,0 +1,104 @@ +package org.baeldung.okhttp; + +import java.io.File; +import java.io.IOException; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import org.junit.Test; + +import okhttp3.Cache; +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpMiscTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + + //@Test + public void whenSetRequestTimeoutUsingOkHttp_thenFail() throws IOException { + + OkHttpClient client = new OkHttpClient.Builder() + //.connectTimeout(10, TimeUnit.SECONDS) + //.writeTimeout(10, TimeUnit.SECONDS) + .readTimeout(1, TimeUnit.SECONDS) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay. + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + response.close(); + } + + //@Test + public void whenCancelRequestUsingOkHttp_thenCorrect() throws IOException { + + ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay. + .build(); + + final int seconds = 1; + //final int seconds = 3; + + final long startNanos = System.nanoTime(); + final Call call = client.newCall(request); + + // Schedule a job to cancel the call in 1 second. + executor.schedule(new Runnable() { + public void run() { + + System.out.printf("%.2f Canceling call.%n", (System.nanoTime() - startNanos) / 1e9f); + call.cancel(); + System.out.printf("%.2f Canceled call.%n", (System.nanoTime() - startNanos) / 1e9f); + } + }, seconds, TimeUnit.SECONDS); + + try { + + System.out.printf("%.2f Executing call.%n", (System.nanoTime() - startNanos) / 1e9f); + Response response = call.execute(); + System.out.printf("%.2f Call was expected to fail, but completed: %s%n", (System.nanoTime() - startNanos) / 1e9f, response); + + } catch (IOException e) { + + System.out.printf("%.2f Call failed as expected: %s%n", (System.nanoTime() - startNanos) / 1e9f, e); + } + } + + @Test + public void whenSetResponseCacheUsingOkHttp_thenCorrect() throws IOException { + + int cacheSize = 10 * 1024 * 1024; // 10 MiB + File cacheDirectory = new File("src/test/resources/cache"); + Cache cache = new Cache(cacheDirectory, cacheSize); + + OkHttpClient client = new OkHttpClient.Builder() + .cache(cache) + .build(); + + Request request = new Request.Builder() + .url("http://publicobject.com/helloworld.txt") + //.cacheControl(CacheControl.FORCE_NETWORK) + //.cacheControl(CacheControl.FORCE_CACHE) + .build(); + + Response response = client.newCall(request).execute(); + + String responseBody = response.body().string(); + + System.out.println("Response response: " + response); + System.out.println("Response cache response: " + response.cacheResponse()); + System.out.println("Response network response: " + response.networkResponse()); + System.out.println("Response responseBody: " + responseBody); + } +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java new file mode 100644 index 0000000000..e71db94c36 --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java @@ -0,0 +1,168 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; + +import java.io.File; +import java.io.IOException; + +import org.baeldung.okhttp.ProgressRequestWrapper; +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.Credentials; +import okhttp3.FormBody; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class OkHttpPostingTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + private static final String URL_SECURED_BY_BASIC_AUTHENTICATION = "http://browserspy.dk/password-ok.php"; + + @Test + public void whenSendPostRequestUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody formBody = new FormBody.Builder() + .add("username", "test") + .add("password", "test") + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users") + .post(formBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenSendPostRequestWithAuthorizationUsingOkHttp_thenCorrect() throws IOException { + + String postBody = "test post"; + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(URL_SECURED_BY_BASIC_AUTHENTICATION) + .addHeader("Authorization", Credentials.basic("test", "test")) + .post(RequestBody.create(MediaType.parse("text/x-markdown; charset=utf-8"), postBody)) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenPostJsonUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + String json = "{\"id\":1,\"name\":\"John\"}"; + + RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/detail") + .post(body) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenSendMultipartRequestUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("username", "test") + .addFormDataPart("password", "test") + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/multipart") + .post(requestBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenUploadFileUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(requestBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenGetUploadFileProgressUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + + ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() { + + public void onRequestProgress(long bytesWritten, long contentLength) { + + float percentage = 100f * bytesWritten / contentLength; + assertFalse(Float.compare(percentage, 100) > 0); + } + }; + + ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(countingBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + + } +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java new file mode 100644 index 0000000000..1582a5ff7f --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java @@ -0,0 +1,33 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpRedirectTest { + + @Test + public void whenSetFollowRedirectsUsingOkHttp_thenNotRedirected() throws IOException { + + OkHttpClient client = new OkHttpClient().newBuilder() + .followRedirects(false) + .build(); + + Request request = new Request.Builder() + .url("http://t.co/I5YYd9tddw") + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(301)); + } +} diff --git a/okhttp/src/test/resources/test.in b/okhttp/src/test/resources/test.in new file mode 100644 index 0000000000..95d09f2b10 --- /dev/null +++ b/okhttp/src/test/resources/test.in @@ -0,0 +1 @@ +hello world \ No newline at end of file From de699f18321b579655e79a850c686687c42454ed Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Thu, 29 Sep 2016 14:22:10 +0200 Subject: [PATCH 012/309] OkHttp test refactoring --- .../okhttp/OkHttpFileUploadingTest.java | 81 +++++++++++++++++++ .../org/baeldung/okhttp/OkHttpMiscTest.java | 21 +++-- .../baeldung/okhttp/OkHttpPostingTest.java | 59 -------------- 3 files changed, 96 insertions(+), 65 deletions(-) create mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java new file mode 100644 index 0000000000..6c43af6778 --- /dev/null +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java @@ -0,0 +1,81 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; + +import java.io.File; +import java.io.IOException; + +import org.baeldung.okhttp.ProgressRequestWrapper; +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class OkHttpFileUploadingTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + + @Test + public void whenUploadFileUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(requestBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenGetUploadFileProgressUsingOkHttp_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.ext", + RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .build(); + + + ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() { + + public void onRequestProgress(long bytesWritten, long contentLength) { + + float percentage = 100f * bytesWritten / contentLength; + assertFalse(Float.compare(percentage, 100) > 0); + } + }; + + ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(countingBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + + } +} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java index 246857cb71..829bafe8ef 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java @@ -92,13 +92,22 @@ public class OkHttpMiscTest { //.cacheControl(CacheControl.FORCE_CACHE) .build(); - Response response = client.newCall(request).execute(); + Response response1 = client.newCall(request).execute(); - String responseBody = response.body().string(); + String responseBody1 = response1.body().string(); - System.out.println("Response response: " + response); - System.out.println("Response cache response: " + response.cacheResponse()); - System.out.println("Response network response: " + response.networkResponse()); - System.out.println("Response responseBody: " + responseBody); + System.out.println("Response 1 response: " + response1); + System.out.println("Response 1 cache response: " + response1.cacheResponse()); + System.out.println("Response 1 network response: " + response1.networkResponse()); + System.out.println("Response 1 responseBody: " + responseBody1); + + Response response2 = client.newCall(request).execute(); + + String responseBody2 = response2.body().string(); + + System.out.println("Response 2 response: " + response2); + System.out.println("Response 2 cache response: " + response2.cacheResponse()); + System.out.println("Response 2 network response: " + response2.networkResponse()); + System.out.println("Response 2 responseBody: " + responseBody2); } } diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java index e71db94c36..cdb7f2ac8d 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java @@ -1,13 +1,11 @@ package org.baeldung.okhttp; import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import java.io.File; import java.io.IOException; -import org.baeldung.okhttp.ProgressRequestWrapper; import org.junit.Test; import okhttp3.Call; @@ -108,61 +106,4 @@ public class OkHttpPostingTest { assertThat(response.code(), equalTo(200)); } - - @Test - public void whenUploadFileUsingOkHttp_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - RequestBody requestBody = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) - .build(); - - Request request = new Request.Builder() - .url(BASE_URL + "/users/upload") - .post(requestBody) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - } - - @Test - public void whenGetUploadFileProgressUsingOkHttp_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - RequestBody requestBody = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) - .build(); - - - ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() { - - public void onRequestProgress(long bytesWritten, long contentLength) { - - float percentage = 100f * bytesWritten / contentLength; - assertFalse(Float.compare(percentage, 100) > 0); - } - }; - - ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener); - - Request request = new Request.Builder() - .url(BASE_URL + "/users/upload") - .post(countingBody) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - - } } From 78998f1d2034b494d7b539a229f6b14c06d09523 Mon Sep 17 00:00:00 2001 From: Kevin Gilmore Date: Sat, 1 Oct 2016 21:25:26 -0500 Subject: [PATCH 013/309] BAEL-202: Consolidated Couchbase SDK and Spring Data Couchbase from five modules down to two --- .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - couchbase-sdk-async/.springBeans | 15 -- .../couchbase/IntegrationTestConfig.java | 9 - .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - couchbase-sdk-intro/mvnw | 233 ------------------ couchbase-sdk-intro/mvnw.cmd | 145 ----------- couchbase-sdk-intro/pom.xml | 40 --- .../.mvn/wrapper/maven-wrapper.jar | Bin 49502 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 - couchbase-sdk-spring-service/mvnw | 233 ------------------ couchbase-sdk-spring-service/mvnw.cmd | 145 ----------- couchbase-sdk-spring-service/pom.xml | 102 -------- .../person/FluentPersonDocumentConverter.java | 31 --- .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 17 -- couchbase-sdk/README.md | 50 ++++ {couchbase-sdk-async => couchbase-sdk}/mvnw | 0 .../mvnw.cmd | 0 .../pom.xml | 6 +- .../couchbase/async}/CouchbaseEntity.java | 2 +- .../couchbase/async}/person/Person.java | 4 +- .../async}/person/PersonCrudService.java | 6 +- .../person/PersonDocumentConverter.java | 4 +- .../async}/person/RegistrationService.java | 2 +- .../async}/service/AbstractBucketService.java | 2 +- .../async}/service/AbstractCrudService.java | 3 +- .../async}/service/BucketService.java | 2 +- .../async}/service/ClusterService.java | 2 +- .../async}/service/ClusterServiceImpl.java | 2 +- .../couchbase/async}/service/CrudService.java | 2 +- .../async}/service/JsonDocumentConverter.java | 2 +- .../async}/service/TutorialBucketService.java | 2 +- .../couchbase/intro}/CodeSnippets.java | 2 +- .../couchbase/spring}/person/Person.java | 2 +- .../spring}/person/PersonCrudService.java | 7 +- .../person/PersonDocumentConverter.java | 4 +- .../spring}/person/RegistrationService.java | 2 +- .../spring}/service/BucketService.java | 2 +- .../spring}/service/ClusterService.java | 2 +- .../spring}/service/ClusterServiceImpl.java | 2 +- .../spring}/service/CrudService.java | 2 +- .../service/JsonDocumentConverter.java | 2 +- .../service/TutorialBucketService.java | 2 +- .../src/main/resources/application.properties | 0 .../src/main/resources/logback.xml | 0 .../couchbase/async/AsyncIntegrationTest.java | 6 +- .../async/AsyncIntegrationTestConfig.java | 9 + .../async}/person/PersonCrudServiceTest.java | 11 +- .../async}/service/ClusterServiceTest.java | 11 +- .../couchbase/spring}/IntegrationTest.java | 2 +- .../spring}/IntegrationTestConfig.java | 4 +- .../spring}/person/PersonCrudServiceTest.java | 4 +- .../spring}/service/ClusterServiceTest.java | 6 +- pom.xml | 4 +- spring-data-couchbase-2/README.md | 18 +- .../spring/data/couchbase/model/Campus.java | 0 .../couchbase2b}/repos/CampusRepository.java | 2 +- .../couchbase2b}/repos/PersonRepository.java | 2 +- .../couchbase2b}/repos/StudentRepository.java | 2 +- .../couchbase2b}/service/CampusService.java | 2 +- .../service/CampusServiceImpl.java | 8 +- .../couchbase2b}/service/PersonService.java | 2 +- .../service/PersonServiceImpl.java | 10 +- .../couchbase2b}/service/StudentService.java | 2 +- .../service/StudentServiceImpl.java | 10 +- ...java => CustomTypeKeyCouchbaseConfig.java} | 8 +- .../data/couchbase/MyCouchbaseConfig.java | 0 .../ReadYourOwnWritesCouchbaseConfig.java | 11 + .../couchbase/service/PersonServiceTest.java | 7 - .../MultiBucketCouchbaseConfig.java | 16 +- .../MultiBucketIntegationTest.java | 7 +- .../MultiBucketIntegrationTestConfig.java | 10 + .../service/CampusServiceImplTest.java | 17 +- .../service/PersonServiceImplTest.java | 76 +++--- .../service/StudentServiceImplTest.java | 50 ++-- spring-data-couchbase-2b/README.md | 36 --- spring-data-couchbase-2b/pom.xml | 105 -------- .../spring/data/couchbase/model/Person.java | 87 ------- .../spring/data/couchbase/model/Student.java | 113 --------- .../src/main/resources/logback.xml | 17 -- spring-data-couchbase-2b/src/site/site.xml | 25 -- .../data/couchbase/IntegrationTestConfig.java | 9 - .../data/couchbase/TestCouchbaseConfig.java | 17 -- .../src/test/resources/logback.xml | 17 -- 86 files changed, 254 insertions(+), 1582 deletions(-) delete mode 100644 couchbase-sdk-async/.mvn/wrapper/maven-wrapper.jar delete mode 100644 couchbase-sdk-async/.mvn/wrapper/maven-wrapper.properties delete mode 100644 couchbase-sdk-async/.springBeans delete mode 100644 couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java delete mode 100644 couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.jar delete mode 100644 couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.properties delete mode 100755 couchbase-sdk-intro/mvnw delete mode 100644 couchbase-sdk-intro/mvnw.cmd delete mode 100644 couchbase-sdk-intro/pom.xml delete mode 100644 couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.jar delete mode 100644 couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.properties delete mode 100755 couchbase-sdk-spring-service/mvnw delete mode 100644 couchbase-sdk-spring-service/mvnw.cmd delete mode 100644 couchbase-sdk-spring-service/pom.xml delete mode 100644 couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/FluentPersonDocumentConverter.java delete mode 100644 couchbase-sdk-spring-service/src/main/resources/application.properties delete mode 100644 couchbase-sdk-spring-service/src/main/resources/logback.xml create mode 100644 couchbase-sdk/README.md rename {couchbase-sdk-async => couchbase-sdk}/mvnw (100%) rename {couchbase-sdk-async => couchbase-sdk}/mvnw.cmd (100%) rename {couchbase-sdk-async => couchbase-sdk}/pom.xml (95%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/CouchbaseEntity.java (70%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/person/Person.java (94%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/person/PersonCrudService.java (77%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/person/PersonDocumentConverter.java (88%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/person/RegistrationService.java (93%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/AbstractBucketService.java (93%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/AbstractCrudService.java (98%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/BucketService.java (69%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/ClusterService.java (74%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/ClusterServiceImpl.java (95%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/CrudService.java (89%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/JsonDocumentConverter.java (79%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/async}/service/TutorialBucketService.java (93%) rename {couchbase-sdk-intro/src/main/java/com/baeldung/couchbase/examples => couchbase-sdk/src/main/java/com/baeldung/couchbase/intro}/CodeSnippets.java (98%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/person/Person.java (97%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/person/PersonCrudService.java (88%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/person/PersonDocumentConverter.java (88%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/person/RegistrationService.java (93%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/BucketService.java (69%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/ClusterService.java (90%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/ClusterServiceImpl.java (98%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/CrudService.java (82%) rename {couchbase-sdk-async/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/JsonDocumentConverter.java (79%) rename {couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase => couchbase-sdk/src/main/java/com/baeldung/couchbase/spring}/service/TutorialBucketService.java (93%) rename {couchbase-sdk-async => couchbase-sdk}/src/main/resources/application.properties (100%) rename {couchbase-sdk-async => couchbase-sdk}/src/main/resources/logback.xml (100%) rename couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTest.java => couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java (74%) create mode 100644 couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java rename {couchbase-sdk-async/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/async}/person/PersonCrudServiceTest.java (93%) rename {couchbase-sdk-async/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/async}/service/ClusterServiceTest.java (73%) rename {couchbase-sdk-async/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/spring}/IntegrationTest.java (93%) rename {couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/spring}/IntegrationTestConfig.java (63%) rename {couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/spring}/person/PersonCrudServiceTest.java (96%) rename {couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase => couchbase-sdk/src/test/java/com/baeldung/couchbase/spring}/service/ClusterServiceTest.java (87%) rename {spring-data-couchbase-2b => spring-data-couchbase-2}/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java (100%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/repos/CampusRepository.java (92%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/repos/PersonRepository.java (86%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/repos/StudentRepository.java (86%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/service/CampusService.java (88%) rename spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java (80%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/service/PersonService.java (87%) rename spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java (81%) rename {spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b}/service/StudentService.java (87%) rename spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java => spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java (81%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/{TestCouchbaseConfig.java => CustomTypeKeyCouchbaseConfig.java} (50%) rename spring-data-couchbase-2/src/{main => test}/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java (100%) create mode 100644 spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java rename spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java (86%) rename spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegationTest.java (68%) create mode 100644 spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java rename spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java (90%) rename spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java (54%) rename spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java => spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java (77%) delete mode 100644 spring-data-couchbase-2b/README.md delete mode 100644 spring-data-couchbase-2b/pom.xml delete mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java delete mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java delete mode 100644 spring-data-couchbase-2b/src/main/resources/logback.xml delete mode 100644 spring-data-couchbase-2b/src/site/site.xml delete mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java delete mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java delete mode 100644 spring-data-couchbase-2b/src/test/resources/logback.xml diff --git a/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.jar b/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.properties b/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index eb91947648..0000000000 --- a/couchbase-sdk-async/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.3/apache-maven-3.3.3-bin.zip \ No newline at end of file diff --git a/couchbase-sdk-async/.springBeans b/couchbase-sdk-async/.springBeans deleted file mode 100644 index ff32b84d3b..0000000000 --- a/couchbase-sdk-async/.springBeans +++ /dev/null @@ -1,15 +0,0 @@ - - - 1 - - - - - - - - - - - - diff --git a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java b/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java deleted file mode 100644 index d593aac52d..0000000000 --- a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.baeldung.couchbase; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages={"com.baeldung.couchbase"}) -public class IntegrationTestConfig { -} diff --git a/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.jar b/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.properties b/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index eb91947648..0000000000 --- a/couchbase-sdk-intro/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.3/apache-maven-3.3.3-bin.zip \ No newline at end of file diff --git a/couchbase-sdk-intro/mvnw b/couchbase-sdk-intro/mvnw deleted file mode 100755 index a1ba1bf554..0000000000 --- a/couchbase-sdk-intro/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/couchbase-sdk-intro/mvnw.cmd b/couchbase-sdk-intro/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/couchbase-sdk-intro/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/couchbase-sdk-intro/pom.xml b/couchbase-sdk-intro/pom.xml deleted file mode 100644 index 1c2ca5ee05..0000000000 --- a/couchbase-sdk-intro/pom.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - 4.0.0 - com.baeldung - couchbase-sdk-intro - 0.1-SNAPSHOT - jar - couchbase-sdk-intro - Intro to the Couchbase SDK - - - - - com.couchbase.client - java-client - ${couchbase.client.version} - - - - - - - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - - - - 1.7 - UTF-8 - 2.2.6 - - - diff --git a/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.jar b/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 5fd4d5023f1463b5ba3970e33c460c1eb26d748d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49502 zcmb@tV|1n6wzeBvGe*U>ZQHh;%-Bg)Y}={WHY%yuwkkF%MnzxVwRUS~wY|@J_gP;% z^VfXZ{5793?z><89(^dufT2xlYVOQnYG>@?lA@vQF|UF0&X7tk8BUf?wq2J& zZe&>>paKUg4@;fwk0yeUPvM$yk)=f>TSFFB^a8f|_@mbE#MaBnd5qf6;hXq}c%IeK zn7gB0Kldbedq-vl@2wxJi{$%lufroKUjQLSFmt|<;M8~<5otM5ur#Dgc@ivmwRiYZW(Oco7kb8DWmo|a{coqYMU2raB9r6e9viK6MI3c&%jp05-Tf*O#6@8Ra=egYy01 z-V!G;_omANEvU-8!*>*)lWka9M<+IkNsrsenbXOfLc6qrYe`;lpst;vfs*70$z9UM zq%L>pFCOr$X*|9&3L2h;?VA9-IU*iR6FiGlJ=b~DzE5s^thxXUs4%~*zD#K&k>wZAU8 zpaa!M+Z-zjkfGK15N!&o<3=cgbZV7%ex@j^)Q9V`q^i;Fsbkbe6eHJ;dx{QbdCCs1 zdxq^WxoPsr`eiK3D0Ep}k$ank-0G&+lY!ZHDZBYEx%% z2FyE?Lb0cflLB)kDIj;G=m`^UO<4h(RWdF-DT>p{1J5J90!K!AgC0)?jxPbm$KUjg zJED+#7xQmAmr`(S%BQTV-c97As~r3zD$E;3S)@}p5udA@m6pLgRL5h-;m>LvCq?&Q zokC7Vnk-zBEaa;=Y;6(LJHS>mOJV&%0YfRdUOqbKZy~b z(905jIW0Pg;y`Yv2t+RnDvL4yGEUX*tK)JT6TWn4ik~L)fX#tAV!d8)+A)qWtSjcr z7s|f%f;*%XW!jiRvv9ayj@f&dc|1tKDc{O3BWcLGsn-OYyXRLXEOEwP4k?c`nIut0 z?4S;eO@EoynmkxHq>QpDL1q^wOQxrl))2qya?dk05^5hK? z{P6;WKHUaHw9B0dd&|xw&CYN2fVrn};Gq<=Z^QZk3e~HzzY~JrnPCs0XwMp#B<9Gm zw0?7h#4EY%O-ub6mi&O2vcpIkuM?st;RtEpKSz^Xr#3WHhpsZd!gh|_jGQ`KA30T- zKlz9vgB;pY^}Uh??nQKSzk>2&J+Qi*r3DeX4^$%2ag9^x_YckA-f9p_;8ulh(8j9~ zes{O#{v!m%n^el(VryTF-C%xfJJ$rZj)|Y|8o&))q9CEwg2;Wz&xzyHD=@T_B%b}C z=8G^*4*J4#jUJn{7-3^U(_uUp6E8+GDt#le)nya-Q4kL5ZGiFxT4bF+mX`whcif*? z>CL&Ryn3HHT^^QmWYr<}Q1_Jj7fOh}cS8r+^R#at-CnNl3!1_$96&7nR}gh}))7a0J&z-_eI))+{RCt)r8|7|sV9o01^9nv?aePxMqwPP!x|sNmnn&6{K$K*mVX9lxSAmcqAV1(hKA-=coeTb*otxTOGYXsh zW$31^q7L@<#y~SUYoNKP1JK?4|FQNQb$i8mCG@WhX9i_^;@M2f#!nq7_K*M!4lGz1 z5tfADkO7BZDLgVQ?k7C)f;$eqjHI&zgxhf}x$8^ZEwFfm-qY=+M+fbS)9r8fFE5H9 zv{WPU35cR8%z;(W%5<>y+E&v84J4^Y##N!$B++RI`CZ1i3IW9Nau=*pSxW&^Ov-F> zex=&9XYLVcm1Y?am>2VC`%gMev9$#~; zYwxYvMfeKFsd!OBB@eOb2QNHFcsfKm;&z{OVEUiYmQ}~L@>$Ms@|Ptf3jQO-=Q;1+ zFCw+p+Z3lK_FmIAYnk2V;o915cDM}%Ht5RH%w}P>Yg9{h1mZ}~R6tUII4X7i4-2i% z2Uiw3_uHR!d~5(s;p6btI@-xhAkRg9K|n#}PNT9Dw9P>z$3>30lP1(=mcQ|tpyv3@ ze1qU!69OAx4s7$8r7Y-#5I`m!BXq`f!6C(BtUlG-oq+liqMCS_D@0nSFc%y+N6_Zh zi%L3LhF3zZP{d1)L&SXxPD(fp@T@J;jZeNaf$zl>vAh7=tI z2;wS^QyRdZm~)Ur&!af;8eB8*7(F96K^=WbC$)#TWvB~Awo5AtPf8Il4snD}Xsqd< z>cH+gcg72nTg5tl>oFbwdT{BDyy1=f=4~h~L$)UX;FXa;NdSlyF{(YLrx&VDp`pQI zh3pQtC=d8i1V6yUmFon*LQsNYWen?eO-gSZ4cvYcdEd0klSxcBYw+|5AyCv6TT96h z{7Yh9`h}biU?3oBFn=d8>Hn`1Q*w6rgeX^QbC-WFwjY}Int0;qUny4WMjIee@#0%l z>YAWLVCNo1lp$>9L$Tx`t!dp?>5Pfbhc*!*wzfWkj_x`Q?`3Jc@9r8uq~dgb+lgeh zlA`eUal3e2ZnWQSSYB>qy#85^>j7!=uO-hG5*erp22NaC81#Ytioc>r?D9$b_JiC+ zSp)8KR$%}FjFNRkeE#c5vKbXNJDBoO< z)73Jt7Y|3v45efud1xkg2GO3OwYfsuBV`f6S_D>Aoh2%=`1Y$bHP>0kBvTSowX57H z&1nbbx=IT>X^ScKYL&&{LNq~^UNgR|at`D;SxTYpLvnj_F*bGgNV2tEl1k$ccA&NW zmX(LV*>Op)BOgoric(98mIU)$eUa&jM5bKlnOrHm$p^v@u;W0J)!@XWg+#X=9En(-tiw!l?65rD=zzl(+%<)bI{ZN;SRco{jO;>7 zlSY|TIxuN|d#YHx^^~>iYj2V>cC>wQwWzGVI!6#epjJ6tl_`7tDY17WMKMB@s*Jr& zXOs*@>EwQ6s>M13eZEBJ#q0|;8jao{wK4keesH9?$OSk~_3#*x`8fAzQa7fprQ6(Z zi$}B%m81y*S)RxaX;wW!5{{EDw8)IE3XDRO1Y^%TMr}c|Y>WBAKT=b*K&uMT(?JSl zO>gVtl_bKQ$??TeWr7wYO+Vbl?CTQj?JrW&td`|#@;R2Gca9jq^p`{@)KY97o3}Af zfTh{pUUWD;P7sq=I!lA6;*hq0Nq`F56T)x$K?BMOk}tptYw(%$?*otp2N6IF3#GgqM46Cda!qzvGZcMgcGV`bY5ZIfOB6^;US#WgRai zq#vS8ZqPY953|eFw<-p2Cakx|z#_{4pG}mk{EANI{PnK*CUslvS8whko=OTe13|It z>{O2p=mmanR2-n>LQHaMo}noWCmjFO@7^z~`Y{V>O`@rT{yBS=VXsb}*Pi_zDqM3? zjCZqWR}fEzAkms+Hiq8~qRAFvo}dVW{1gcZ?v&PdX?UG*yS}zT9g7nZ!F1WRH}sHA zJ4~B2Br~8?uhbaX!3g+7=3fVM)q^wEzv**rk5e34==NRCV z3G$G5B!DICFslm)c){oesa_0muLxGoq`xYVNURl*NhE#v2>y9vDz&vJwrB`Q>DhN# zY2GnY!Y^8E%PU0}haXL$8a5QN1-&7NWuC~{62j| z2ozmFyx8GpOzj?&KK1JF28;E8H_p4N^LMm9K0y}!lCxcK79eFGTtGm?7jy?t94Q@X zli|our1#|>f*68fyA0bSn=YisYSl8HB(dFN4Y$qb7p4DR0YQt=^eEMnJkgiM48$>QV6x5*^a|D|t zMPDk}u<^YEYrt|H&hy)DRk%rDIb{LTo;h7=fp^J9Lr&`{9`8_pS*tQ_$KXB$2#5{h z-&yPbN-zInq{7aYZuaItS8-2Mb4OQe2jD*&)0~898E|HlAq`o!M&It@vvnj z_y@))>~_oR%S8OfmFTGYIat^#8_YKMqWLac<^}RZFDcJqvSJa>&6HaLS7p-$)QyL= zHrO|t75`d41Bp37RZtKR%g^%o@9C5Ce=CjuvVQ-KI#Uw2WWa>cho;jztUt~Le*_pT zkfA2iif9QFp;vhd)|A?tdAQ?9o~?EqgL;=)eKFQ{E^u?OIP}fl^5A;$^ZVutCIqj5 z&*i+G?!Px|5~~6zTYf>~uw*kM`5p&Hju&#w!7^An3*mQwTK22wC7p^OsvMjWf`$MY zLX|ZFV#+>Uq2!QyRD9cgbI9nswteMAMWtK(_=d%r?TLrx?_rkjbjI(rbK#T9Gn}J| z5ajow3ZErpw+%}YfVL-q^{r~##xJ^_ux2yO1!LJZXg)>F70STV=&Ruwp&XP^_?$h0 zn>$a?!>N+Kt$UXzg`e+szB}*uw)Z$uL6?>*!0IrE)SgV~#a?Qgg7HuTsu3ncrcs|l z=sQSMtr}S!sQ4SriKg=M`1Y|bC`XJ+J(YT)op!Q);kj0_e)YNVNw8SI|1f%9%X?i5>$lLE(Wfc$wY?(O985d5e*)UPtF!7gG3(Kd z-^=-%-wWCEK`r4oFh^{|;Ci%W^P>K%9dBNDqi%c$Q{iY#(zbwN7~pQI=SHd%WuV7Z zO?0P;Zc6yeN;)IbJIP0=>W)EgE!76jM^?IyQ*D(T})1NGmP z~YAb6T^#R6;)Ls;cV~LWk z33lcLpbSjxStw9Z>Nv&+rPOXxCGB=?ttZs?{OF7;GYlV&w7-82POb$XrogqFpLA2`j&MLZXr=IG>PAFSb2np~x;E_kV{ zsDwbK$?iYRn7$;mHYZhQn6P2#_hXAHd?;q~!Zy}%;@%wT3u|Sa-!WxxOE_fwyFv*Db@>X;Rl+fK1oP?55*dN0#2%SuikZ)y7Kx>`8*9d?}5 zKvXF7J5&Ey6{A8qUFxrFOh<$xdSWV^dw7z|`7RVZJhAwO72V zRrM_3*wI`^ycl7~>6KaCYBr#WGR>}B)Q(V%&$MhVrU>u~ql zjGeZF&>=_ld$oY!V}5}Gb> z*iP38KOav9RHY)0uITwgz99w- zJX-0BGCdY*$c7pi@>@-`2>#>}c(DHaI62ntpKz z`c01Z#u7WuMZ71!jl7hv5|o61+uv5nG?*dffEL~328P5HlKh2&RQ;9X@f>c1x<>v= zZWNSz3Ii~oyAsKCmbd}|$2%ZN&3gc9>(NV=Z4Fnz2F@)PPbx1wwVMsUn=-G=cqE3# zjY{G4OI~2o$|*iuswTg1=hcZK$C=0^rOt-aOwXuxU=*uT?yF00)6sE}ZAZyy*$ZTH zk!P*xILX#5RygHy{k?2((&pRQv9_Ew+wZ>KPho_o1-{~I*s1h8 zBse@ONdkk-8EG?r5qof}lwTxdmmEN|%qw(STW|PFsw1LD!h_Vjo;C4?@h|da4Y;*; zvApQ=T&=jWU39Uz=_yN@Bn0{{)yn8RZ2&X!<*KBv-7tcWdkF1Ij8D0mU zwbcs}0vDaLGd@xx%S_QZ1H)GTt`~>+#z}HXJTl9S!sd9seVJc|_wUMSdD$>k`K_RG zlq(fsnR@KM^;C}}&vG2t+}_nGPuI5ovg$6TYeMPIREGxP@2r~RKd@>gV`mq0XENsh z%IRZ-ZNP+4#J`o-yRpP;w@;CrSr3wiix3e9Qc|s(WapRq950P->g|JYC$A)$YrGeH zz5dKlAHAPJ>%?llqqB&#+#VU3sp=9>Xms1J;tSYN>LMwNtU68yr!})K4X>%^IrIDp z>SHy&6fJHybwS^BW>okFeaQp6wxaVP`hy;ZX#e+=w3c?PGD&_LmeqL8oZ*YaM1+#S z5WNAKo4+99JW(+qcMjh;+c%R#R?t;(aQ`2`C=bo((ERzgAwKKazXy*0wHN;v;P|f> zBW&?`h#_I^?Bc5GX7XP@|MOiw%&-#?EQ|w+FdCl_&qPN&s$|Z17UCF9oXS#N z)px6>zm&}0osTnCGI;AXsj`q=LpIsW4x}q~70uey5N_NpdJ*Gv^@$g@f2{EB>LP7Y zE5P`jZh1vHNgk7LfMT({jLCjRZa4ubW;UA#%<@Zj?efrPdm{W3J5UEFgm`YkVqz;AMFetZuM5uQpvORb1GDX`WZGwTrF z46+&sAri5QXCfGYpdgonWR5`>ZEa;?jrKvfNvXF<&l)1uU-3q#4X16R2~?P0yg3H` zfw82QWZo^cac+%(g^_6`+2>~Fvy{pOCGnj86+=-!N`GPWAjus1ejhn6f4|mDkU6EE z&u~;xfdRMkj=h;4d~~+4(>L8weT3cz9e@E11EH!tX<IC!@kS+dsIQA`HQ2vdoS zzSD0U?mb1M0@qXu{yhZk2Y6}2B-AvvYg|tRr6z*_*2l*VLiR6G;M{O^Znq~LI%=I_ zCEU{htx&Bo+69G`p|A@R>KlY1*;;!{aWq?Pc0Cu!mT-0S`!>3<@s%Ri;utYNQ+CXDj+LC5<*$4*$-mogGg^S~3JRv{ry zPJzKJg!XKb>P}yJVc^1V@T&MV{z;@DLhvV{dG?RogCcPkROivliSr58>5Zw&&A2?n z9`JOLU;eQGaOr6GB(u{t3!+$NaLge$x#M&*sg!J;m~rRc)Ij5|?KX_4WiM-eE%t8e zqUM7eZ~ZonavR;K4g2t$4Fj=UVyEHM7LPb%8#0?Ks{~?!qhx9)2^>rg8{0npLtFKR zJB)19TFiD^T7IUXA8wt!@n5gj&@OK~EO}MR6^qd?^-?%-0~b2K9RWh+_mSEQQWsLCFOt#JlAQMgNxvv-m z;sF*r;WZ*Wi@I|6pMN+|_rLYKlWwvpKZY9rA;fo8l8hFQGI?4#kt1-r4UL;nPF@{~ z2T~a@2>yD|GuU55boxoIIe_BFo2Vq&rs&2itv|B>OC*bIeOqMBRw~y5KRMwiVHc)` zIBdliiY?Ai7*+k#NZf3MW5!hya~RZ6r7k)b?HF0e(n`ZX=iCpT7St`FDwL@SGgKlq zNnnU*3IcnYDzJg{7V$cb`xeb4(s(({&%f69XMTw-JQErS%?X_}?&y&tvHw@>1v{#R z4J@(=el^kRI+jGa;4)l#v%-jM^$~0ulxh6-{w*4Lsa>Tuc z>ElR3uM~GUChI)c{TW${73A3$vs<&iH;e?4HjW2MvSz9tp9@69+`_@x{Qte^eFo5IlAi&zw$=t6u8K%8JtjRI88PFNM7R>DaCO3rgngmk zI-RMOyt@kr-gVra=tl^@J#tI7M$dird(?aU!`&1xcm~2;dHN(RCxh4H((f|orQ!BS zu;(3Vn+^doXaqlhnjBJj-)w?5{;EEZTMx+?G>Rp4U^g<_yw_blAkdbj=5YrNhZB9@ zNmW=-!yFx5?5aF^+6*1XI|s3lIn_eyh`uv%?liNzSC#z&z^R(mqEYL@TdWzgkf>g1 zedzs*={eJavn{8vF%4nf@et<@wkOPR>NiVuYtESbFXQ;sDz_;|ITVeoW|me5>jN5P z5--{13JT{3ktkAf9M;Jty)yectg#{+9sK{C;2CvPU81tB3{8S5>hK{EXdVe?fR?sd8m`V zPM*$)g$HKp0~9Xf6#z!YJ&g!%VkCMxkt>ofE!62?#-&%|95^)JJ9 zk;GlJdoH0HwtDF(_aTv}mt$?EyRyE6@pm5DG~Gj-2%3HcZT13e)$)z99bdK_WCx|Q zQNza(R)Z>ZKTn8oIdcw%c^pFaMpFZ4HOds!BODgSBWJJYW3I_WJvoEm4xsfs%#LZ6 zdPCk{5XJ>2f7Hj-i*9lTW6BKCIuy)3L!b3(uPoSgW1WA+OEYYBRgSsJq7wjHh%c8ymMs3FU%~cprqL*084p*^T3{J%Gwq`jB30n(&y6- zII8-_r-s5&CVtsoNZ9%On?7yn;oZG03-$wx^uRk9>b*ufh15|HHk|%=MA^ioyb9CYU$7y$4R|M5HvpiCTxKSU`LUg$+ zB3IBl&{qO}agqF~BFM6&11wMeR-#Rkuh_(^j+P4{;X_w|siva$5P`dykyhfAUD%e8 z+{G0|7(Q`_U91sMKFO^rHoCWfXi0$^ev)-187G}klYv@+Rf%uZ&T4-Uhh=)pcU6O1 znXc^c5)!$X+39|4`yNHuCj0wkm+K1VN0G3_EL?-ZH$p5Y*v6ec4MV zS~1~}ZUhl&i^4`Fa|zyH4I%rXp;D6{&@*^TPEX2;4aI$}H@*ROEyFfe^RZI%;T>X> z>WVSUmx@2gGBxkV&nfyPK=JI$HxRKUv(-*xA_C;lDxT|PgX*&YYdkrd5-*3E1OSXBs>35DLsHHp%zm+n0N(Yu{lMo>_t&d1Xy zfCxl=(CNNx>ze+7w)60mp>(M``Qn$aUrVb$cJAb6=Do7VgW`Qn2;v5{9tB)jP$_mB zn{Hb_sMs4yxK|!`PI7+zO68}{Iv)dpu!+ZZl)xuoVU(oFsm<3gT{j2c*ORl|Lt+?dR^M?0 znW6rNA)cR*ci;z?BaG(f(XynY_y+kTjj~T$9{N{>ITQ4-DmZ6{cOkoea9*LpYL{Apo0hSpLqJu z9`tjP&ei;%pn9QY>-$9=<73M#X;qGb+%Bt0x>=u`eDtthI+LWB9CdAO=ulZo9&Ohs2X8GW>b7#&U|py28KTvPBl#Nqv^{AgkVXrOyS z@%3)}$I&mJOYWoG$BBb)Kb~0ptDmBxHNH^i6B8FA7NR2HfTnjP?eDnoY4NS_aYg4P zGGPw11sAf^^fTkY#j@T#6Ll*^GVaPo-1;aS6_a}{r{tWZilzse2m zc?LS=B|EWxCD|!O%|%t3C@Rd7=rKJRsteAWRoDu|*Kx-QwYZQeYpGrZ_1J%mFM;*S*u=0 z%1OC9>kmCGqBBu#-1jVPRVW*BTv%3uPI8fO?JOZD#P_W^V+K7&KVB>hzZ@PdY*%Ezo;}|5Mk`Mo2m*_K%no*jDJGp(s9j;&U`Z>z zO#SEe)k!p$VE-j2xDoX$!;Up5%8x$c`GH$l+gTA*YQaE0jwCOA<*__2NkV){z_u2=4NQ zSk$(oj$%ygio?3V8T3IyGMYvPs`t{im2IoHs7or+>>MYvG%Q?PwOLqe%73uGh6Wn; zo>e7qI$9?%cVVkvQLOLKcU5n*`~qn8pzkdu=Z4#2VnhUy>S*;kT=NqA!dQtnE?wVg zOKobxJ|QCjk`!(2*~5NQx{{=Lr=)ndyn{V|&PxUa=xQXVU?#M24F8H%C*uvs(#Va0 zSkp}0EFYq0#9xp&$O?gIInc#^^_6Ol88W%)S5A@HeE0(SR&!Yl>u=*5JEoUViDR@2 zJBjTsp=Y44W`Nb2+*CcZCkwP(QChX1s)b09DEIZCKt1$q2~;&DJ9!{bQ1Y6&T_9u1 zZM8^im8Wf#FUO6tZqc7#`z0cN_JA>#U_b7he%?cCnlV2&47y5Fc)Z7bp5xGe1zNq9 zl1VaV-tsm3fY=oIX^SPl!P;9$o?**0brq#ShM~3CXhh^SK0oOKB9O>;q3G@ z&4&h$mLSgohc^5IC|H>IGfZvVQFUT>T$|U7{znY`56<5d)07oiv*2R0+-BGPPkWJ! zIOzKF+<5o2YLWP|SGCx8w@<>u6K1o`++xJ+6kaJrt<&0Haq zyUccgxI$sR07Vo9-pF);heBva;?&NcAzC*gSSG9B3c?A;IH9J zl$j%F4*8;F0;H2Cjo*kWz4{kSh?nX}23&&KL+U(#nOAuR`wn@uwUNkWEgb*ZShKPy z`aXTJT4f*Um4`iv2KOfzf-~`#pOfH8>is*xnLBDTyx2Xuc8Y2Od6z((P2AZK@b_96 z#0V6jdw>sEDJ#uNGV|EshD1g&bYZCzCZTZ)286HLHc8Eyy_HPi;d#%;Wx}d6tUUxq z_VB$+898z_{9-A<*v6VI7?(dC04o!8$>DQ$OdbrA_@<6auiBNp{Dw$Hs@@gcybIQT zAU7Pc5YEX&&9IZ~iDo&V`&8K$-4o$)g?wF8xdv1I8-n}1bc7tviIBqt z#iIl1Hn;W?>2&#bU#VZ1wxq(7z=Q15#0yoz)#|r`KSPKI-{aN%l61^?B4RMDt?Vk` z)G#K6vUN?C!t{Q<@O4$0(qI>$U@@TI2FVF;AhSSb5}LtXx&=k&8%MWM3wv;Xq0p~W z#ZX;QFv5G9-i6=+d;R7Dwi)ciIZ1_V!aw;K^etau+g0fOA2HXpV#LQZGzf?h#@}(o z|3w!sZ|&mp$;tmDiO=zef5C|Alz+@@4u5#yZ7yNpP=&`432%a{K#{;nsS!jwk-$Qs zZRty}+N`Y~)c8|$&ra{bOQWM2K7qa}4Y{ndK%dKp&{ zFCvX{PAy_C{xzS_-`0>JlPP7&5!5 zBQ$NQz^z#2y-VeIxnfY|RzU`w+1t6vwQ|wM)LlpuaUzYehGII;>2DYyR|~wC@l97s zgX=f*1qtfDyco%BHmN+o<2qoi`D67R+RM$$NN5-moE4kx3MCFfuip*45nComOZKQf z3!(8tkSdhY5+A%@Y=eVEZkXU3S6B2V-R$ZuRIXWhsrJg3g)p4vXY@RV60bKuG zT6T!enE<;(A{*HPQhae*(@_!maV~AWD4EOwq10tkCXq+HPoe_Pu?d4Kg=2ypcs?&f zLa>mEmPF4ucJ%i~fEsNIa{QmQU27%Abh|w(`q)s~He5$5WYQ_wNJX6Qop<=7;I1jd zNZak`}0lVm+^O!i;|Lwo}ofXuJ)*UtH4xaPm*R7?YS*<&D__=@Kki>{f_Z-XqM;Tj195+~@d;rx zh5pj8oMuupWa#E(%85**I~1Zat-Sa^_R11-CiKdd`8m(DGuzOm9lX$Dd!DX!_Al}d zS!-|}dWG80S;`jSKDH%Uv;-OJNeBI0Bp$z->{_>1KU%h&Af7nns(L=xRN1 zLvOP=*UWIr)_5G2+fCsUV7mV|D>-~_VnvZ3_>=9 z_bL6`eK%W*9eJ34&Puz^@^ZIyoF@%DTun#OOEdUEn8>N9q(}?5*?`o?!_<(i%yc`k zf!xXD6SQscHgPgiHt>x6{n{+}%azrfV4VHi#umyi0;11c816`E??2`$;Rc`)qA2H( z5L|{o=ut7Te=^~@cR0_#cah0?w0Me$&>}ga8xxy=?DDl#}S~Y z4o2n`%IyGjQEP%8qS|v(kFK&RCJbF1gsRVJ>ceSjU`LuYJu%C>SRV#l`)ShD&KKzv ztD<9l0lcW0UQ8xjv|1NXRrCZhZh3JFX_BNT@V|u9$o~8M=cjOX|5iBS|9PAGPvQLc z6sA~BTM(~!c&V=5<}ZIx}O7A;|&bd7vR_y)t+ z?Vm7kb^gJ88g;!fRfMTSvKaPozQz4WcYD8l#0WxQ${P%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ diff --git a/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.properties b/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index eb91947648..0000000000 --- a/couchbase-sdk-spring-service/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1 +0,0 @@ -distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.3/apache-maven-3.3.3-bin.zip \ No newline at end of file diff --git a/couchbase-sdk-spring-service/mvnw b/couchbase-sdk-spring-service/mvnw deleted file mode 100755 index a1ba1bf554..0000000000 --- a/couchbase-sdk-spring-service/mvnw +++ /dev/null @@ -1,233 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven2 Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # - # Look for the Apple JDKs first to preserve the existing behaviour, and then look - # for the new JDKs provided by Oracle. - # - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then - # - # Apple JDKs - # - export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then - # - # Oracle JDKs - # - export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home - fi - - if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then - # - # Apple JDKs - # - export JAVA_HOME=`/usr/libexec/java_home` - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Migwn, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" - # TODO classpath? -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` -fi - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - local basedir=$(pwd) - local wdir=$(pwd) - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - wdir=$(cd "$wdir/.."; pwd) - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} "$@" diff --git a/couchbase-sdk-spring-service/mvnw.cmd b/couchbase-sdk-spring-service/mvnw.cmd deleted file mode 100644 index 2b934e89dd..0000000000 --- a/couchbase-sdk-spring-service/mvnw.cmd +++ /dev/null @@ -1,145 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven2 Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -set MAVEN_CMD_LINE_ARGS=%* - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" - -set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% \ No newline at end of file diff --git a/couchbase-sdk-spring-service/pom.xml b/couchbase-sdk-spring-service/pom.xml deleted file mode 100644 index d344f8c756..0000000000 --- a/couchbase-sdk-spring-service/pom.xml +++ /dev/null @@ -1,102 +0,0 @@ - - - 4.0.0 - com.baeldung - couchbase-sdk-spring-service - 0.1-SNAPSHOT - jar - couchbase-sdk-spring-service - Intro to the Couchbase SDK - - - - - com.couchbase.client - java-client - ${couchbase.client.version} - - - - - org.springframework - spring-context - ${spring-framework.version} - - - org.springframework - spring-context-support - ${spring-framework.version} - - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - compile - - - ch.qos.logback - logback-classic - ${logback.version} - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - - - org.springframework - spring-test - ${spring-framework.version} - test - - - junit - junit - ${junit.version} - test - - - - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - test - - - - - - - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - - - - 1.7 - UTF-8 - 2.2.6 - 4.2.4.RELEASE - 1.1.3 - 1.7.12 - 4.11 - 3.4 - - - diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/FluentPersonDocumentConverter.java b/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/FluentPersonDocumentConverter.java deleted file mode 100644 index 8210c10b3a..0000000000 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/FluentPersonDocumentConverter.java +++ /dev/null @@ -1,31 +0,0 @@ -package com.baeldung.couchbase.person; - -import org.springframework.stereotype.Service; - -import com.baeldung.couchbase.service.JsonDocumentConverter; -import com.couchbase.client.java.document.JsonDocument; -import com.couchbase.client.java.document.json.JsonObject; - -@Service -public class FluentPersonDocumentConverter implements JsonDocumentConverter { - - @Override - public JsonDocument toDocument(Person p) { - JsonObject content = JsonObject.empty() - .put("type", "Person") - .put("name", p.getName()) - .put("homeTown", p.getHomeTown()); - return JsonDocument.create(p.getId(), content); - } - - @Override - public Person fromDocument(JsonDocument doc) { - JsonObject content = doc.content(); - return Person.Builder.newInstance() - .id(doc.id()) - .type("Person") - .name(content.getString("name")) - .homeTown(content.getString("homeTown")) - .build(); - } -} diff --git a/couchbase-sdk-spring-service/src/main/resources/application.properties b/couchbase-sdk-spring-service/src/main/resources/application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/couchbase-sdk-spring-service/src/main/resources/logback.xml b/couchbase-sdk-spring-service/src/main/resources/logback.xml deleted file mode 100644 index efcc6fb4c7..0000000000 --- a/couchbase-sdk-spring-service/src/main/resources/logback.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - \ No newline at end of file diff --git a/couchbase-sdk/README.md b/couchbase-sdk/README.md new file mode 100644 index 0000000000..9cdcdea012 --- /dev/null +++ b/couchbase-sdk/README.md @@ -0,0 +1,50 @@ +## Couchbase SDK Tutorial Project + +### Relevant Articles: +- [Introduction to Couchbase SDK for Java](http://www.baeldung.com/java-couchbase-sdk) +- [Using Couchbase in a Spring Application](http://www.baeldung.com/couchbase-sdk-spring) +- [Asynchronous Batch Opereations in Couchbase](http://www.baeldung.com/async-batch-operations-in-couchbase) + +### Overview +This Maven project contains the Java code for the Couchbase entities and Spring services +as described in the tutorials, as well as a unit/integration test +for each service implementation. + +### Working with the Code +The project was developed and tested using Java 7 and 8 in the Eclipse-based +Spring Source Toolkit (STS) and therefore should run fine in any +recent version of Eclipse or another IDE of your choice +that supports Java 7 or later. + +### Building the Project +You can also build the project using Maven outside of any IDE: +``` +mvn clean install +``` + +### Package Organization +Java classes for the intro tutorial are in the +org.baeldung.couchbase.intro package. + +Java classes for the Spring service tutorial are in the +org.baeldung.couchbase.spring package hierarchy. + +Java classes for the Asynchronous Couchbase tutorial are in the +org.baeldung.couchbase.async package hierarchy. + + +### Running the tests +The test classes for the Spring service tutorial are: +- org.baeldung.couchbase.spring.service.ClusterServiceTest +- org.baeldung.couchbase.spring.person.PersonCrudServiceTest + +The test classes for the Asynchronous Couchbase tutorial are in the +org.baeldung.couchbase.async package hierarchy: +- org.baeldung.couchbase.async.service.ClusterServiceTest +- org.baeldung.couchbase.async.person.PersonCrudServiceTest + +The test classes may be run as JUnit tests from your IDE +or using the Maven command line: +``` +mvn test +``` diff --git a/couchbase-sdk-async/mvnw b/couchbase-sdk/mvnw similarity index 100% rename from couchbase-sdk-async/mvnw rename to couchbase-sdk/mvnw diff --git a/couchbase-sdk-async/mvnw.cmd b/couchbase-sdk/mvnw.cmd similarity index 100% rename from couchbase-sdk-async/mvnw.cmd rename to couchbase-sdk/mvnw.cmd diff --git a/couchbase-sdk-async/pom.xml b/couchbase-sdk/pom.xml similarity index 95% rename from couchbase-sdk-async/pom.xml rename to couchbase-sdk/pom.xml index 9062ef8e15..4c277f4c85 100644 --- a/couchbase-sdk-async/pom.xml +++ b/couchbase-sdk/pom.xml @@ -3,11 +3,11 @@ 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 - couchbase-sdk-async + couchbase-sdk 0.1-SNAPSHOT jar - couchbase-sdk-async - Couchbase SDK Asynchronous Operations + couchbase-sdk + Couchbase SDK Tutorials diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CouchbaseEntity.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java similarity index 70% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CouchbaseEntity.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java index 4d2500197b..16e1876719 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CouchbaseEntity.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/CouchbaseEntity.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async; public interface CouchbaseEntity { diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/Person.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java similarity index 94% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/Person.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java index bf248c3999..32ed2ebbe4 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/Person.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/Person.java @@ -1,6 +1,6 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; -import com.baeldung.couchbase.service.CouchbaseEntity; +import com.baeldung.couchbase.async.CouchbaseEntity; public class Person implements CouchbaseEntity { diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java similarity index 77% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java index d5302bd6db..b2ef985725 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonCrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; import javax.annotation.PostConstruct; @@ -6,8 +6,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; -import com.baeldung.couchbase.service.AbstractCrudService; -import com.baeldung.couchbase.service.BucketService; +import com.baeldung.couchbase.async.service.AbstractCrudService; +import com.baeldung.couchbase.async.service.BucketService; @Service public class PersonCrudService extends AbstractCrudService { diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java similarity index 88% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java index cfb20a2bfb..8646cf247a 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/PersonDocumentConverter.java @@ -1,8 +1,8 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; import org.springframework.stereotype.Service; -import com.baeldung.couchbase.service.JsonDocumentConverter; +import com.baeldung.couchbase.async.service.JsonDocumentConverter; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/RegistrationService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java similarity index 93% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/RegistrationService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java index 53af1c4041..926cd7f4e8 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/RegistrationService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/person/RegistrationService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractBucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java similarity index 93% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractBucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java index 08acf5deed..cbc03cbcda 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractBucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractBucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import com.couchbase.client.java.Bucket; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractCrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java similarity index 98% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractCrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java index ce95074015..861e2404e5 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/AbstractCrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/AbstractCrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import java.util.ArrayList; import java.util.List; @@ -8,6 +8,7 @@ import java.util.concurrent.TimeUnit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.baeldung.couchbase.async.CouchbaseEntity; import com.couchbase.client.core.BackpressureException; import com.couchbase.client.core.time.Delay; import com.couchbase.client.java.AsyncBucket; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/BucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java similarity index 69% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/BucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java index df9156d87d..28470be99f 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/BucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/BucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import com.couchbase.client.java.Bucket; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java similarity index 74% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java index 437ec00ff4..ee67405b12 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import com.couchbase.client.java.Bucket; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java similarity index 95% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java index c8ff56269d..7ce75d21f5 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/ClusterServiceImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java similarity index 89% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java index e0f0831abb..5bd0e52214 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/CrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/CrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import java.util.List; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java similarity index 79% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java index 87331d2a17..85e14a87ce 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/JsonDocumentConverter.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import com.couchbase.client.java.document.JsonDocument; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java similarity index 93% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java index 2e40321272..459585d995 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/async/service/TutorialBucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import javax.annotation.PostConstruct; diff --git a/couchbase-sdk-intro/src/main/java/com/baeldung/couchbase/examples/CodeSnippets.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java similarity index 98% rename from couchbase-sdk-intro/src/main/java/com/baeldung/couchbase/examples/CodeSnippets.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java index 088f7af7b1..2cb9e1f4f7 100644 --- a/couchbase-sdk-intro/src/main/java/com/baeldung/couchbase/examples/CodeSnippets.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/intro/CodeSnippets.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.examples; +package com.baeldung.couchbase.intro; import java.util.List; import java.util.UUID; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/Person.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java similarity index 97% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/Person.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java index 48b7a38780..0348ba1e5f 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/Person.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/Person.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; public class Person { diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java similarity index 88% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java index 0203bf30bb..de035f1d2c 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/PersonCrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonCrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; import java.util.List; import java.util.UUID; @@ -8,8 +8,9 @@ import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import com.baeldung.couchbase.service.CrudService; -import com.baeldung.couchbase.service.TutorialBucketService;import com.couchbase.client.java.Bucket; +import com.baeldung.couchbase.spring.service.CrudService; +import com.baeldung.couchbase.spring.service.TutorialBucketService; +import com.couchbase.client.java.Bucket; import com.couchbase.client.java.ReplicaMode; import com.couchbase.client.java.document.JsonDocument; diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java similarity index 88% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java index cfb20a2bfb..030c9fde27 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/person/PersonDocumentConverter.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/PersonDocumentConverter.java @@ -1,8 +1,8 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; import org.springframework.stereotype.Service; -import com.baeldung.couchbase.service.JsonDocumentConverter; +import com.baeldung.couchbase.spring.service.JsonDocumentConverter; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/RegistrationService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java similarity index 93% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/RegistrationService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java index 53af1c4041..5ffe7acf24 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/person/RegistrationService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/person/RegistrationService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/BucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java similarity index 69% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/BucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java index c2562dd38e..97ff1e4fd5 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/BucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/BucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import com.couchbase.client.java.Bucket; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java similarity index 90% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java index 4713893899..a8543fbd91 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import java.util.List; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java similarity index 98% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java index 3c355d2a27..3499fa956e 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/ClusterServiceImpl.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/ClusterServiceImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import java.util.ArrayList; import java.util.List; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/CrudService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java similarity index 82% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/CrudService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java index 20ee851b39..f683b9f562 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/CrudService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/CrudService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; public interface CrudService { diff --git a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java similarity index 79% rename from couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java index 87331d2a17..cf4861fbeb 100644 --- a/couchbase-sdk-async/src/main/java/com/baeldung/couchbase/service/JsonDocumentConverter.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/JsonDocumentConverter.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import com.couchbase.client.java.document.JsonDocument; diff --git a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java similarity index 93% rename from couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java rename to couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java index 903a568399..8a28deb1d6 100644 --- a/couchbase-sdk-spring-service/src/main/java/com/baeldung/couchbase/service/TutorialBucketService.java +++ b/couchbase-sdk/src/main/java/com/baeldung/couchbase/spring/service/TutorialBucketService.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import javax.annotation.PostConstruct; diff --git a/couchbase-sdk-async/src/main/resources/application.properties b/couchbase-sdk/src/main/resources/application.properties similarity index 100% rename from couchbase-sdk-async/src/main/resources/application.properties rename to couchbase-sdk/src/main/resources/application.properties diff --git a/couchbase-sdk-async/src/main/resources/logback.xml b/couchbase-sdk/src/main/resources/logback.xml similarity index 100% rename from couchbase-sdk-async/src/main/resources/logback.xml rename to couchbase-sdk/src/main/resources/logback.xml diff --git a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java similarity index 74% rename from couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java index d1cc807f7a..3079fc928a 100644 --- a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase; +package com.baeldung.couchbase.async; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { IntegrationTestConfig.class }) +@ContextConfiguration(classes = { AsyncIntegrationTestConfig.class }) @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public abstract class IntegrationTest { +public abstract class AsyncIntegrationTest { } diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java new file mode 100644 index 0000000000..6afdfe04bd --- /dev/null +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/AsyncIntegrationTestConfig.java @@ -0,0 +1,9 @@ +package com.baeldung.couchbase.async; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages={"com.baeldung.couchbase.async"}) +public class AsyncIntegrationTestConfig { +} diff --git a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceTest.java similarity index 93% rename from couchbase-sdk-async/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceTest.java index 3da282492c..afc5bbd53b 100644 --- a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.async.person; import static org.junit.Assert.*; @@ -13,12 +13,15 @@ import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import com.baeldung.couchbase.IntegrationTest; -import com.baeldung.couchbase.service.BucketService; +import com.baeldung.couchbase.async.AsyncIntegrationTest; +import com.baeldung.couchbase.async.person.Person; +import com.baeldung.couchbase.async.person.PersonCrudService; +import com.baeldung.couchbase.async.person.PersonDocumentConverter; +import com.baeldung.couchbase.async.service.BucketService; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.document.JsonDocument; -public class PersonCrudServiceTest extends IntegrationTest { +public class PersonCrudServiceTest extends AsyncIntegrationTest { @Autowired private PersonCrudService personService; diff --git a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceTest.java similarity index 73% rename from couchbase-sdk-async/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceTest.java index 7795f41c93..8ecb51a4b9 100644 --- a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.async.service; import static org.junit.Assert.*; @@ -10,14 +10,15 @@ import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; -import com.baeldung.couchbase.IntegrationTest; -import com.baeldung.couchbase.IntegrationTestConfig; +import com.baeldung.couchbase.async.AsyncIntegrationTest; +import com.baeldung.couchbase.async.AsyncIntegrationTestConfig; +import com.baeldung.couchbase.async.service.ClusterService; import com.couchbase.client.java.Bucket; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { IntegrationTestConfig.class }) +@ContextConfiguration(classes = { AsyncIntegrationTestConfig.class }) @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public class ClusterServiceTest extends IntegrationTest { +public class ClusterServiceTest extends AsyncIntegrationTest { @Autowired private ClusterService couchbaseService; diff --git a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java similarity index 93% rename from couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java index d1cc807f7a..9c0b0a50c1 100644 --- a/couchbase-sdk-async/src/test/java/com/baeldung/couchbase/IntegrationTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase; +package com.baeldung.couchbase.spring; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; diff --git a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java similarity index 63% rename from couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java index d593aac52d..ac71911b9b 100644 --- a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/IntegrationTestConfig.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/IntegrationTestConfig.java @@ -1,9 +1,9 @@ -package com.baeldung.couchbase; +package com.baeldung.couchbase.spring; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration -@ComponentScan(basePackages={"com.baeldung.couchbase"}) +@ComponentScan(basePackages={"com.baeldung.couchbase.spring"}) public class IntegrationTestConfig { } diff --git a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceTest.java similarity index 96% rename from couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceTest.java index e19e90769c..601b261f6e 100644 --- a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/person/PersonCrudServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.person; +package com.baeldung.couchbase.spring.person; import static org.junit.Assert.*; @@ -8,7 +8,7 @@ import org.apache.commons.lang3.RandomStringUtils; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import com.baeldung.couchbase.IntegrationTest; +import com.baeldung.couchbase.spring.IntegrationTest; public class PersonCrudServiceTest extends IntegrationTest { diff --git a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceTest.java similarity index 87% rename from couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceTest.java index 7795f41c93..d1968e1c04 100644 --- a/couchbase-sdk-spring-service/src/test/java/com/baeldung/couchbase/service/ClusterServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceTest.java @@ -1,4 +1,4 @@ -package com.baeldung.couchbase.service; +package com.baeldung.couchbase.spring.service; import static org.junit.Assert.*; @@ -10,8 +10,8 @@ import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; -import com.baeldung.couchbase.IntegrationTest; -import com.baeldung.couchbase.IntegrationTestConfig; +import com.baeldung.couchbase.spring.IntegrationTest; +import com.baeldung.couchbase.spring.IntegrationTestConfig; import com.couchbase.client.java.Bucket; @RunWith(SpringJUnit4ClassRunner.class) diff --git a/pom.xml b/pom.xml index e82b964900..7b4711361c 100644 --- a/pom.xml +++ b/pom.xml @@ -19,8 +19,7 @@ autovalue-tutorial core-java core-java-8 - couchbase-sdk-intro - couchbase-sdk-spring-service + couchbase-sdk dependency-injection gatling @@ -61,7 +60,6 @@ spring-cucumber spring-data-cassandra spring-data-couchbase-2 - spring-data-couchbase-2b spring-data-elasticsearch spring-data-neo4j spring-data-mongodb diff --git a/spring-data-couchbase-2/README.md b/spring-data-couchbase-2/README.md index 3ed226fb33..2e56b25fef 100644 --- a/spring-data-couchbase-2/README.md +++ b/spring-data-couchbase-2/README.md @@ -3,6 +3,7 @@ ### Relevant Articles: - [Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase) - [Entity Validation, Query Consistency, and Optimistic Locking in Spring Data Couchbase](http://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase) +- [Multiple Buckets and Spatial View Queries in Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase-buckets-and-spatial-view-queries) ### Overview This Maven project contains the Java code for Spring Data Couchbase @@ -11,7 +12,7 @@ as described in the tutorials, as well as a unit/integration test for each service implementation. ### Working with the Code -The project was developed and tested using Java 7 nad 8 in the Eclipse-based +The project was developed and tested using Java 7 and 8 in the Eclipse-based Spring Source Toolkit (STS) and therefore should run fine in any recent version of Eclipse or another IDE of your choice that supports Java 7 or later. @@ -22,8 +23,15 @@ You can also build the project using Maven outside of any IDE: mvn clean install ``` +### Package Organization +Java classes for the first two tutorials listed above are in src/main/java in the package hierarchy +org.baeldung.spring.data.couchbase + +Java classes for the multiple-bucket tutorials are in src/main/java in the package hierarchy +org.baeldung.spring.data.couchbase2b + ### Running the tests -The following test classes are in src/test/java in the package +The test classes for the single-bucket tutorials are in src/test/java in the package org.baeldung.spring.data.couchbase.service: - PersonServiceTest (abstract) - PersonRepositoryTest (concrete) @@ -32,6 +40,12 @@ org.baeldung.spring.data.couchbase.service: - StudentRepositoryTest (concrete) - StudentTemplateServiceTest (concrete) +The concrete test classes for the multiple-bucket tutorial are in src/test/java in the package +org.baeldung.spring.data.couchbase2b.service: +- CampusRepositoryServiceImplTest +- PersonRepositoryServiceImplTest +- StudentRepositoryServiceImplTest + The concrete test classes may be run as JUnit tests from your IDE or using the Maven command line: ``` diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java similarity index 100% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java similarity index 92% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java index 22b2fb2735..2cf388f518 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.repos; +package org.baeldung.spring.data.couchbase2b.repos; import java.util.Set; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java similarity index 86% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java index 14b77759e3..e441bec6e4 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.repos; +package org.baeldung.spring.data.couchbase2b.repos; import java.util.List; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java similarity index 86% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java index 433964c872..2a960d37de 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.repos; +package org.baeldung.spring.data.couchbase2b.repos; import java.util.List; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java similarity index 88% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java index e82c14cb87..d098c39011 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.Set; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java similarity index 80% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java index d12e59ba1f..612774fec9 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java @@ -1,20 +1,18 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import org.baeldung.spring.data.couchbase.model.Campus; -import org.baeldung.spring.data.couchbase.repos.CampusRepository; +import org.baeldung.spring.data.couchbase2b.repos.CampusRepository; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Point; import org.springframework.stereotype.Service; @Service -@Qualifier("CampusRepositoryService") -public class CampusRepositoryService implements CampusService { +public class CampusServiceImpl implements CampusService { private CampusRepository repo; @Autowired diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java similarity index 87% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java index a823908b01..c2c96ffb9c 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonService.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.List; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java similarity index 81% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java index 90cc36780a..f1ff513bff 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java @@ -1,20 +1,18 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.baeldung.spring.data.couchbase.model.Person; -import org.baeldung.spring.data.couchbase.repos.PersonRepository; +import org.baeldung.spring.data.couchbase2b.repos.PersonRepository; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service -@Qualifier("PersonRepositoryService") -public class PersonRepositoryService implements PersonService { - +public class PersonServiceImpl implements PersonService { + private PersonRepository repo; @Autowired public void setPersonRepository(PersonRepository repo) { diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java similarity index 87% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java index f483ef0fb6..5b83b403bb 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentService.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.List; diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java similarity index 81% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java rename to spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java index 58304afc1c..65400636cf 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java @@ -1,20 +1,18 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.baeldung.spring.data.couchbase.model.Student; -import org.baeldung.spring.data.couchbase.repos.StudentRepository; +import org.baeldung.spring.data.couchbase2b.repos.StudentRepository; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @Service -@Qualifier("StudentRepositoryService") -public class StudentRepositoryService implements StudentService { - +public class StudentServiceImpl implements StudentService { + private StudentRepository repo; @Autowired public void setStudentRepository(StudentRepository repo) { diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java similarity index 50% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java index c298ef0a61..0e2e8d5dd3 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/CustomTypeKeyCouchbaseConfig.java @@ -1,17 +1,11 @@ package org.baeldung.spring.data.couchbase; import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; -import org.springframework.data.couchbase.core.query.Consistency; -public class TestCouchbaseConfig extends MyCouchbaseConfig { +public class CustomTypeKeyCouchbaseConfig extends MyCouchbaseConfig { @Override public String typeKey() { return MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE; } - - @Override - public Consistency getDefaultConsistency() { - return Consistency.READ_YOUR_OWN_WRITES; - } } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java similarity index 100% rename from spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java new file mode 100644 index 0000000000..b4a372487e --- /dev/null +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/ReadYourOwnWritesCouchbaseConfig.java @@ -0,0 +1,11 @@ +package org.baeldung.spring.data.couchbase; + +import org.springframework.data.couchbase.core.query.Consistency; + +public class ReadYourOwnWritesCouchbaseConfig extends MyCouchbaseConfig { + + @Override + public Consistency getDefaultConsistency() { + return Consistency.READ_YOUR_OWN_WRITES; + } +} diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java index 3fabf7a11e..c3bf9f2138 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java @@ -83,13 +83,6 @@ public abstract class PersonServiceTest extends IntegrationTest { assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - @Test - public void whenFindingByFirstNameJohn_thenReturnsOnePersonNamedJohn() { - final String expectedFirstName = john; - final List resultList = personService.findByFirstName(expectedFirstName); - assertTrue(resultList.size() == 1); - } - private boolean resultContains(List resultList, Person person) { boolean found = false; for (final Person p : resultList) { diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java similarity index 86% rename from spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java index 8eeda08455..f419ba3499 100644 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase; +package org.baeldung.spring.data.couchbase2b; import java.util.Arrays; import java.util.List; @@ -17,9 +17,9 @@ import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; import com.couchbase.client.java.Bucket; @Configuration -@EnableCouchbaseRepositories(basePackages={"org.baeldung.spring.data.couchbase"}) -public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration { - +@EnableCouchbaseRepositories(basePackages = { "org.baeldung.spring.data.couchbase2b" }) +public class MultiBucketCouchbaseConfig extends AbstractCouchbaseConfiguration { + public static final List NODE_LIST = Arrays.asList("localhost"); public static final String DEFAULT_BUCKET_NAME = "baeldung"; public static final String DEFAULT_BUCKET_PASSWORD = ""; @@ -44,11 +44,13 @@ public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration { return couchbaseCluster().openBucket("baeldung2", ""); } - @Bean + @Bean(name = "campusTemplate") public CouchbaseTemplate campusTemplate() throws Exception { CouchbaseTemplate template = new CouchbaseTemplate( - couchbaseClusterInfo(), campusBucket(), - mappingCouchbaseConverter(), translationService()); + couchbaseClusterInfo(), + campusBucket(), + mappingCouchbaseConverter(), + translationService()); template.setDefaultConsistency(getDefaultConsistency()); return template; } diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegationTest.java similarity index 68% rename from spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegationTest.java index ce2daa92cd..cb671dc469 100644 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegationTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase; +package org.baeldung.spring.data.couchbase2b; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; @@ -7,7 +7,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { MyCouchbaseConfig.class, IntegrationTestConfig.class }) +@ContextConfiguration(classes = { MultiBucketCouchbaseConfig.class, MultiBucketIntegrationTestConfig.class }) @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public abstract class IntegrationTest { +public abstract class MultiBucketIntegationTest { + } diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java new file mode 100644 index 0000000000..94a95b06bb --- /dev/null +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketIntegrationTestConfig.java @@ -0,0 +1,10 @@ +package org.baeldung.spring.data.couchbase2b; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = { "org.baeldung.spring.data.couchbase2b" }) +public class MultiBucketIntegrationTestConfig { + +} diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java similarity index 90% rename from spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java index 5a718f0807..7e24952e32 100644 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java @@ -1,26 +1,27 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; import java.util.Set; import javax.annotation.PostConstruct; -import org.baeldung.spring.data.couchbase.IntegrationTest; import org.baeldung.spring.data.couchbase.model.Campus; -import org.baeldung.spring.data.couchbase.repos.CampusRepository; +import org.baeldung.spring.data.couchbase2b.MultiBucketIntegationTest; +import org.baeldung.spring.data.couchbase2b.repos.CampusRepository; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.data.geo.Distance; import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; -public class CampusRepositoryServiceTest extends IntegrationTest { +public class CampusServiceImplTest extends MultiBucketIntegationTest { @Autowired - @Qualifier("CampusRepositoryService") - private CampusRepositoryService campusService; + private CampusServiceImpl campusService; @Autowired private CampusRepository campusRepo; diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java similarity index 54% rename from spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java index 84b6f75d56..e1a880d9da 100644 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -7,14 +7,13 @@ import static org.junit.Assert.assertTrue; import java.util.List; -import org.baeldung.spring.data.couchbase.IntegrationTest; -import org.baeldung.spring.data.couchbase.MyCouchbaseConfig; import org.baeldung.spring.data.couchbase.model.Person; +import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; +import org.baeldung.spring.data.couchbase2b.MultiBucketIntegationTest; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.Cluster; @@ -22,37 +21,28 @@ import com.couchbase.client.java.CouchbaseCluster; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; -public class PersonRepositoryServiceTest extends IntegrationTest { +public class PersonServiceImplTest extends MultiBucketIntegationTest { - private static final String typeField = "_class"; - private static final String john = "John"; - private static final String smith = "Smith"; - private static final String johnSmithId = "person:" + john + ":" + smith; - private static final Person johnSmith = new Person(johnSmithId, john, smith); - private static final JsonObject jsonJohnSmith = JsonObject.empty() - .put(typeField, Person.class.getName()) - .put("firstName", john) - .put("lastName", smith) - .put("created", DateTime.now().getMillis()); + static final String typeField = "_class"; + static final String john = "John"; + static final String smith = "Smith"; + static final String johnSmithId = "person:" + john + ":" + smith; + static final Person johnSmith = new Person(johnSmithId, john, smith); + static final JsonObject jsonJohnSmith = JsonObject.empty().put(typeField, Person.class.getName()).put("firstName", john).put("lastName", smith).put("created", DateTime.now().getMillis()); + + static final String foo = "Foo"; + static final String bar = "Bar"; + static final String foobarId = "person:" + foo + ":" + bar; + static final Person foobar = new Person(foobarId, foo, bar); + static final JsonObject jsonFooBar = JsonObject.empty().put(typeField, Person.class.getName()).put("firstName", foo).put("lastName", bar).put("created", DateTime.now().getMillis()); - private static final String foo = "Foo"; - private static final String bar = "Bar"; - private static final String foobarId = "person:" + foo + ":" + bar; - private static final Person foobar = new Person(foobarId, foo, bar); - private static final JsonObject jsonFooBar = JsonObject.empty() - .put(typeField, Person.class.getName()) - .put("firstName", foo) - .put("lastName", bar) - .put("created", DateTime.now().getMillis()); - @Autowired - @Qualifier("PersonRepositoryService") - private PersonService personService; - + private PersonServiceImpl personService; + @BeforeClass public static void setupBeforeClass() { - Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); - Bucket bucket = cluster.openBucket(MyCouchbaseConfig.DEFAULT_BUCKET_NAME, MyCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); + final Cluster cluster = CouchbaseCluster.create(MultiBucketCouchbaseConfig.NODE_LIST); + final Bucket bucket = cluster.openBucket(MultiBucketCouchbaseConfig.DEFAULT_BUCKET_NAME, MultiBucketCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); bucket.upsert(JsonDocument.create(johnSmithId, jsonJohnSmith)); bucket.upsert(JsonDocument.create(foobarId, jsonFooBar)); bucket.close(); @@ -61,7 +51,7 @@ public class PersonRepositoryServiceTest extends IntegrationTest { @Test public void whenFindingPersonByJohnSmithId_thenReturnsJohnSmith() { - Person actualPerson = personService.findOne(johnSmithId); + final Person actualPerson = personService.findOne(johnSmithId); assertNotNull(actualPerson); assertNotNull(actualPerson.getCreated()); assertEquals(johnSmith, actualPerson); @@ -69,7 +59,7 @@ public class PersonRepositoryServiceTest extends IntegrationTest { @Test public void whenFindingAllPersons_thenReturnsTwoOrMorePersonsIncludingJohnSmithAndFooBar() { - List resultList = personService.findAll(); + final List resultList = personService.findAll(); assertNotNull(resultList); assertFalse(resultList.isEmpty()); assertTrue(resultContains(resultList, johnSmith)); @@ -79,8 +69,8 @@ public class PersonRepositoryServiceTest extends IntegrationTest { @Test public void whenFindingByFirstNameJohn_thenReturnsOnlyPersonsNamedJohn() { - String expectedFirstName = john; - List resultList = personService.findByFirstName(expectedFirstName); + final String expectedFirstName = john; + final List resultList = personService.findByFirstName(expectedFirstName); assertNotNull(resultList); assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedFirstName(resultList, expectedFirstName)); @@ -88,17 +78,17 @@ public class PersonRepositoryServiceTest extends IntegrationTest { @Test public void whenFindingByLastNameSmith_thenReturnsOnlyPersonsNamedSmith() { - String expectedLastName = smith; - List resultList = personService.findByLastName(expectedLastName); + final String expectedLastName = smith; + final List resultList = personService.findByLastName(expectedLastName); assertNotNull(resultList); assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - + private boolean resultContains(List resultList, Person person) { boolean found = false; - for(Person p : resultList) { - if(p.equals(person)) { + for (final Person p : resultList) { + if (p.equals(person)) { found = true; break; } @@ -108,8 +98,8 @@ public class PersonRepositoryServiceTest extends IntegrationTest { private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { boolean found = false; - for(Person p : resultList) { - if(p.getFirstName().equals(firstName)) { + for (final Person p : resultList) { + if (p.getFirstName().equals(firstName)) { found = true; break; } @@ -119,8 +109,8 @@ public class PersonRepositoryServiceTest extends IntegrationTest { private boolean allResultsContainExpectedLastName(List resultList, String lastName) { boolean found = false; - for(Person p : resultList) { - if(p.getLastName().equals(lastName)) { + for (final Person p : resultList) { + if (p.getLastName().equals(lastName)) { found = true; break; } diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java similarity index 77% rename from spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java index 166f01d754..220c2c3b00 100644 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java @@ -1,4 +1,4 @@ -package org.baeldung.spring.data.couchbase.service; +package org.baeldung.spring.data.couchbase2b.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -9,14 +9,13 @@ import java.util.List; import javax.validation.ConstraintViolationException; -import org.baeldung.spring.data.couchbase.IntegrationTest; -import org.baeldung.spring.data.couchbase.MyCouchbaseConfig; import org.baeldung.spring.data.couchbase.model.Student; +import org.baeldung.spring.data.couchbase2b.MultiBucketCouchbaseConfig; +import org.baeldung.spring.data.couchbase2b.MultiBucketIntegationTest; import org.joda.time.DateTime; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.Cluster; @@ -24,47 +23,46 @@ import com.couchbase.client.java.CouchbaseCluster; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; -public class StudentRepositoryServiceTest extends IntegrationTest { +public class StudentServiceImplTest extends MultiBucketIntegationTest { - private static final String typeField = "_class"; - private static final String joe = "Joe"; - private static final String college = "College"; - private static final String joeCollegeId = "student:" + joe + ":" + college; - private static final DateTime joeCollegeDob = DateTime.now().minusYears(21); - private static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); - private static final JsonObject jsonJoeCollege = JsonObject.empty() + static final String typeField = "_class"; + static final String joe = "Joe"; + static final String college = "College"; + static final String joeCollegeId = "student:" + joe + ":" + college; + static final DateTime joeCollegeDob = DateTime.now().minusYears(21); + static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); + static final JsonObject jsonJoeCollege = JsonObject.empty() .put(typeField, Student.class.getName()) .put("firstName", joe) .put("lastName", college) .put("created", DateTime.now().getMillis()) .put("version", 1); - private static final String judy = "Judy"; - private static final String jetson = "Jetson"; - private static final String judyJetsonId = "student:" + judy + ":" + jetson; - private static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); - private static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); - private static final JsonObject jsonJudyJetson = JsonObject.empty() + static final String judy = "Judy"; + static final String jetson = "Jetson"; + static final String judyJetsonId = "student:" + judy + ":" + jetson; + static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); + static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); + static final JsonObject jsonJudyJetson = JsonObject.empty() .put(typeField, Student.class.getName()) .put("firstName", judy) .put("lastName", jetson) .put("created", DateTime.now().getMillis()) .put("version", 1); - + @Autowired - @Qualifier("StudentRepositoryService") - private StudentService studentService; - + StudentServiceImpl studentService; + @BeforeClass public static void setupBeforeClass() { - Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); - Bucket bucket = cluster.openBucket(MyCouchbaseConfig.DEFAULT_BUCKET_NAME, MyCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); + Cluster cluster = CouchbaseCluster.create(MultiBucketCouchbaseConfig.NODE_LIST); + Bucket bucket = cluster.openBucket(MultiBucketCouchbaseConfig.DEFAULT_BUCKET_NAME, MultiBucketCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); bucket.upsert(JsonDocument.create(joeCollegeId, jsonJoeCollege)); bucket.upsert(JsonDocument.create(judyJetsonId, jsonJudyJetson)); bucket.close(); cluster.disconnect(); } - + @Test public void whenCreatingStudent_thenDocumentIsPersisted() { String firstName = "Eric"; @@ -134,7 +132,7 @@ public class StudentRepositoryServiceTest extends IntegrationTest { assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - + private boolean resultContains(List resultList, Student student) { boolean found = false; for(Student p : resultList) { diff --git a/spring-data-couchbase-2b/README.md b/spring-data-couchbase-2b/README.md deleted file mode 100644 index 262962f58a..0000000000 --- a/spring-data-couchbase-2b/README.md +++ /dev/null @@ -1,36 +0,0 @@ -## Spring Data Couchbase Tutorial Project - -### Relevant Articles: -- [Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase) -- [Entity Validation, Query Consistency, and Optimistic Locking in Spring Data Couchbase](http://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase) - -### Overview -This Maven project contains the Java code for Spring Data Couchbase -entities, repositories, and repository-based services -as described in the tutorials, as well as a unit/integration test -for each service implementation. - -### Working with the Code -The project was developed and tested using Java 7 and 8 in the Eclipse-based -Spring Source Toolkit (STS) and therefore should run fine in any -recent version of Eclipse or another IDE of your choice -that supports Java 7 or later. - -### Building the Project -You can also build the project using Maven outside of any IDE: -``` -mvn clean install -``` - -### Running the tests -The following test classes are in src/test/java in the package -org.baeldung.spring.data.couchbase.service: -- CampusRepositoryServiceTest -- PersonRepositoryServiceTest -- StudentRepositoryServiceTest - -These may be run as JUnit tests from your IDE -or using the Maven command line: -``` -mvn test -``` diff --git a/spring-data-couchbase-2b/pom.xml b/spring-data-couchbase-2b/pom.xml deleted file mode 100644 index 7d58f78ce5..0000000000 --- a/spring-data-couchbase-2b/pom.xml +++ /dev/null @@ -1,105 +0,0 @@ - - 4.0.0 - org.baeldung - spring-data-couchbase-2b - 0.1-SNAPSHOT - spring-data-couchbase-2b - jar - - - - - - org.springframework - spring-context - ${spring-framework.version} - - - org.springframework - spring-context-support - ${spring-framework.version} - - - org.springframework.data - spring-data-couchbase - ${spring-data-couchbase.version} - - - - - org.hibernate - hibernate-validator - ${hibernate-validator.version} - - - - joda-time - joda-time - ${joda-time.version} - - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - compile - - - ch.qos.logback - logback-classic - ${logback.version} - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - - - - - org.springframework - spring-test - ${spring-framework.version} - test - - - junit - junit - ${junit.version} - test - - - - - - - maven-compiler-plugin - 2.3.2 - - 1.7 - 1.7 - - - - - - - 1.7 - UTF-8 - 4.2.4.RELEASE - 2.1.1.RELEASE - 5.2.4.Final - 2.9.2 - 1.1.3 - 1.7.12 - 4.11 - - - - diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java deleted file mode 100644 index 9220e157ed..0000000000 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java +++ /dev/null @@ -1,87 +0,0 @@ -package org.baeldung.spring.data.couchbase.model; - -import javax.validation.constraints.NotNull; - -import org.joda.time.DateTime; -import org.springframework.data.annotation.Id; -import org.springframework.data.couchbase.core.mapping.Document; - -import com.couchbase.client.java.repository.annotation.Field; - -@Document -public class Person { - - @Id - private String id; - @Field - @NotNull - private String firstName; - @Field - @NotNull - private String lastName; - @Field - @NotNull - private DateTime created; - @Field - private DateTime updated; - - public Person(String id, String firstName, String lastName) { - this.id = id; - this.firstName = firstName; - this.lastName = lastName; - } - - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getFirstName() { - return firstName; - } - public void setFirstName(String firstName) { - this.firstName = firstName; - } - public String getLastName() { - return lastName; - } - public void setLastName(String lastName) { - this.lastName = lastName; - } - public DateTime getCreated() { - return created; - } - public void setCreated(DateTime created) { - this.created = created; - } - public DateTime getUpdated() { - return updated; - } - public void setUpdated(DateTime updated) { - this.updated = updated; - } - - @Override - public int hashCode() { - int hash = 1; - if(id != null) { - hash = hash * 31 + id.hashCode(); - } - if(firstName != null) { - hash = hash * 31 + firstName.hashCode(); - } - if(lastName != null) { - hash = hash * 31 + lastName.hashCode(); - } - return hash; - } - - @Override - public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; - Person other = (Person) obj; - return this.hashCode() == other.hashCode(); - } -} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java deleted file mode 100644 index 9c266c2c62..0000000000 --- a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.baeldung.spring.data.couchbase.model; - -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Past; -import javax.validation.constraints.Pattern; -import javax.validation.constraints.Size; - -import org.joda.time.DateTime; -import org.springframework.data.annotation.Id; -import org.springframework.data.annotation.Version; -import org.springframework.data.couchbase.core.mapping.Document; - -import com.couchbase.client.java.repository.annotation.Field; - -@Document -public class Student { - private static final String NAME_REGEX = "^[a-zA-Z .'-]+$"; - - @Id - private String id; - @Field - @NotNull - @Size(min=1, max=20) - @Pattern(regexp=NAME_REGEX) - private String firstName; - @Field - @NotNull - @Size(min=1, max=20) - @Pattern(regexp=NAME_REGEX) - private String lastName; - @Field - @Past - private DateTime dateOfBirth; - @Field - @NotNull - private DateTime created; - @Field - private DateTime updated; - @Version - private long version; - - public Student() {} - - public Student(String id, String firstName, String lastName, DateTime dateOfBirth) { - this.id = id; - this.firstName = firstName; - this.lastName = lastName; - this.dateOfBirth = dateOfBirth; - } - - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getFirstName() { - return firstName; - } - public void setFirstName(String firstName) { - this.firstName = firstName; - } - public String getLastName() { - return lastName; - } - public void setLastName(String lastName) { - this.lastName = lastName; - } - public DateTime getDateOfBirth() { - return dateOfBirth; - } - public void setDateOfBirth(DateTime dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - public DateTime getCreated() { - return created; - } - public void setCreated(DateTime created) { - this.created = created; - } - public DateTime getUpdated() { - return updated; - } - public void setUpdated(DateTime updated) { - this.updated = updated; - } - - @Override - public int hashCode() { - int hash = 1; - if(id != null) { - hash = hash * 31 + id.hashCode(); - } - if(firstName != null) { - hash = hash * 31 + firstName.hashCode(); - } - if(lastName != null) { - hash = hash * 31 + lastName.hashCode(); - } - if(dateOfBirth != null) { - hash = hash * 31 + dateOfBirth.hashCode(); - } - return hash; - } - - @Override - public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; - Student other = (Student) obj; - return this.hashCode() == other.hashCode(); - } -} \ No newline at end of file diff --git a/spring-data-couchbase-2b/src/main/resources/logback.xml b/spring-data-couchbase-2b/src/main/resources/logback.xml deleted file mode 100644 index d9067fd1da..0000000000 --- a/spring-data-couchbase-2b/src/main/resources/logback.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - \ No newline at end of file diff --git a/spring-data-couchbase-2b/src/site/site.xml b/spring-data-couchbase-2b/src/site/site.xml deleted file mode 100644 index dda96feecd..0000000000 --- a/spring-data-couchbase-2b/src/site/site.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - Spring Sample: ${project.name} - index.html - - - - org.springframework.maven.skins - maven-spring-skin - 1.0.5 - - - - - - - - - - - - - diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java deleted file mode 100644 index 6f040c34db..0000000000 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.baeldung.spring.data.couchbase; - -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; - -@Configuration -@ComponentScan(basePackages = "org.baeldung.spring.data.couchbase") -public class IntegrationTestConfig { -} diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java deleted file mode 100644 index c298ef0a61..0000000000 --- a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.baeldung.spring.data.couchbase; - -import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; -import org.springframework.data.couchbase.core.query.Consistency; - -public class TestCouchbaseConfig extends MyCouchbaseConfig { - - @Override - public String typeKey() { - return MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE; - } - - @Override - public Consistency getDefaultConsistency() { - return Consistency.READ_YOUR_OWN_WRITES; - } -} diff --git a/spring-data-couchbase-2b/src/test/resources/logback.xml b/spring-data-couchbase-2b/src/test/resources/logback.xml deleted file mode 100644 index d9067fd1da..0000000000 --- a/spring-data-couchbase-2b/src/test/resources/logback.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - - \ No newline at end of file From c3a340e0ec51776759874cb032ff1c468c92354f Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Sun, 2 Oct 2016 18:01:49 +0530 Subject: [PATCH 014/309] Modifying methods in test files --- .../baeldung/selenium/SeleniumExample.java | 11 ++---- .../selenium/junit/TestSeleniumWithJUnit.java | 5 +-- .../testng/TestSeleniumWithTestNG.java | 5 +-- .../testng/TestSeleniumWithTestNG.java | 34 ------------------- .../selenium/junit/TestSeleniumWithJUnit.java | 34 ------------------- 5 files changed, 9 insertions(+), 80 deletions(-) delete mode 100644 selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java delete mode 100644 selenium-junit-testng/test/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java 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 index 6020b6bd2c..d8b248df81 100644 --- a/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java @@ -6,9 +6,8 @@ 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"; - + private String url = "http://www.baeldung.com/"; + public SeleniumExample() { webDriver = new FirefoxDriver(); webDriver.get(url); @@ -18,12 +17,8 @@ public class SeleniumExample { webDriver.close(); } - public String getActualTitle() { + public String getTitle() { 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 index 371f730eb9..dabb1e1988 100644 --- 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 @@ -10,6 +10,7 @@ import org.junit.Test; public class TestSeleniumWithJUnit { private SeleniumExample seleniumExample; + private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; @Before public void setUp() { @@ -23,8 +24,8 @@ public class TestSeleniumWithJUnit { @Test public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { - String expectedTitle = seleniumExample.getExpectedTitle(); - String actualTitle = seleniumExample.getActualTitle(); + String actualTitle = seleniumExample.getTitle(); + assertNotNull(actualTitle); 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 index ec10f9ca82..78ef8b8dfb 100644 --- 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 @@ -10,6 +10,7 @@ import org.testng.annotations.Test; public class TestSeleniumWithTestNG { private SeleniumExample seleniumExample; + private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; @BeforeSuite public void setUp() { @@ -23,8 +24,8 @@ public class TestSeleniumWithTestNG { @Test public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { - String expectedTitle = seleniumExample.getExpectedTitle(); - String actualTitle = seleniumExample.getActualTitle(); + String actualTitle = seleniumExample.getTitle(); + assertNotNull(actualTitle); assertEquals(actualTitle, expectedTitle); } } diff --git a/selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java b/selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java deleted file mode 100644 index dcdfafc4f1..0000000000 --- a/selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100644 index a7b36c4e4e..0000000000 --- a/selenium-junit-testng/test/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java +++ /dev/null @@ -1,34 +0,0 @@ -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 d4e7c9d4af2a3b6f7e169d7d8c518748f53f3e42 Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Sun, 2 Oct 2016 18:01:49 +0530 Subject: [PATCH 015/309] Modifying methods in test files --- selenium-junit-testng/pom.xml | 82 +++++++++++-------- .../baeldung/selenium/SeleniumExample.java | 11 +-- .../selenium/junit/TestSeleniumWithJUnit.java | 5 +- .../testng/TestSeleniumWithTestNG.java | 5 +- .../testng/TestSeleniumWithTestNG.java | 34 -------- .../selenium/junit/TestSeleniumWithJUnit.java | 34 -------- 6 files changed, 56 insertions(+), 115 deletions(-) delete mode 100644 selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java delete 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 index c6bd2b042c..bf5a082fba 100644 --- a/selenium-junit-testng/pom.xml +++ b/selenium-junit-testng/pom.xml @@ -1,36 +1,48 @@ - - 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 - - + + 4.0.0 + com.baeldung + selenium-junit-testng + 0.0.1-SNAPSHOT + + src + + + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + + + Test*.java + + + + + + + + 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 index 6020b6bd2c..d8b248df81 100644 --- a/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java @@ -6,9 +6,8 @@ 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"; - + private String url = "http://www.baeldung.com/"; + public SeleniumExample() { webDriver = new FirefoxDriver(); webDriver.get(url); @@ -18,12 +17,8 @@ public class SeleniumExample { webDriver.close(); } - public String getActualTitle() { + public String getTitle() { 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 index 371f730eb9..dabb1e1988 100644 --- 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 @@ -10,6 +10,7 @@ import org.junit.Test; public class TestSeleniumWithJUnit { private SeleniumExample seleniumExample; + private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; @Before public void setUp() { @@ -23,8 +24,8 @@ public class TestSeleniumWithJUnit { @Test public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { - String expectedTitle = seleniumExample.getExpectedTitle(); - String actualTitle = seleniumExample.getActualTitle(); + String actualTitle = seleniumExample.getTitle(); + assertNotNull(actualTitle); 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 index ec10f9ca82..78ef8b8dfb 100644 --- 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 @@ -10,6 +10,7 @@ import org.testng.annotations.Test; public class TestSeleniumWithTestNG { private SeleniumExample seleniumExample; + private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; @BeforeSuite public void setUp() { @@ -23,8 +24,8 @@ public class TestSeleniumWithTestNG { @Test public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { - String expectedTitle = seleniumExample.getExpectedTitle(); - String actualTitle = seleniumExample.getActualTitle(); + String actualTitle = seleniumExample.getTitle(); + assertNotNull(actualTitle); assertEquals(actualTitle, expectedTitle); } } diff --git a/selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java b/selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java deleted file mode 100644 index dcdfafc4f1..0000000000 --- a/selenium-junit-testng/test/com/baeldun/selenium/testng/TestSeleniumWithTestNG.java +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100644 index a7b36c4e4e..0000000000 --- a/selenium-junit-testng/test/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java +++ /dev/null @@ -1,34 +0,0 @@ -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 a0f281a9f7f8e7657ee6cadaec78c7e9db71437c Mon Sep 17 00:00:00 2001 From: "chris.anatalio" Date: Sun, 2 Oct 2016 18:44:56 -0700 Subject: [PATCH 016/309] Updated dependencies to use newer version of dynamoDB dependency --- spring-boot-data-dynamodb/pom.xml | 8 ++------ .../baeldung/spring/data/es/config/DynamoDBConfig.java | 6 ++++-- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/spring-boot-data-dynamodb/pom.xml b/spring-boot-data-dynamodb/pom.xml index 023d249c56..9c6c5a875f 100644 --- a/spring-boot-data-dynamodb/pom.xml +++ b/spring-boot-data-dynamodb/pom.xml @@ -105,9 +105,9 @@ 1.11.34 - org.socialsignin + com.github.derjust spring-data-dynamodb - 4.2.1 + 4.3.1 @@ -162,10 +162,6 @@ false - - opensourceagility-release - http://repo.opensourceagility.com/release/ - diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java index 554a6c9c12..984262a949 100644 --- a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java @@ -1,10 +1,12 @@ package com.baeldung.spring.data.es.config; -import org.apache.commons.lang3.StringUtils; + + import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.util.StringUtils; import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; @@ -27,7 +29,7 @@ public class DynamoDBConfig { @Bean public AmazonDynamoDB amazonDynamoDB() { AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient(amazonAWSCredentials()); - if (StringUtils.isNotEmpty(amazonDynamoDBEndpoint)) { + if (StringUtils.isEmpty(amazonDynamoDBEndpoint)) { amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint); } return amazonDynamoDB; From 7c7d91fe7b9d752553bf8b464faa5f32f137b411 Mon Sep 17 00:00:00 2001 From: "chris.anatalio" Date: Sun, 2 Oct 2016 18:47:31 -0700 Subject: [PATCH 017/309] Use provided auto-formater --- .../java/com/baeldung/spring/data/es/config/DynamoDBConfig.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java index 984262a949..5ced393fd4 100644 --- a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java @@ -1,7 +1,5 @@ package com.baeldung.spring.data.es.config; - - import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; From d478746229bbfafd494b84de915315ff0088fc3a Mon Sep 17 00:00:00 2001 From: "chris.anatalio" Date: Sun, 2 Oct 2016 19:08:03 -0700 Subject: [PATCH 018/309] Updated component scan path --- .../java/com/baeldung/spring/data/es/config/DynamoDBConfig.java | 2 +- .../src/main/java/org/baeldung/Application.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java index 5ced393fd4..b215e357d9 100644 --- a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java @@ -12,7 +12,7 @@ import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; @Configuration -@ComponentScan(basePackages = { "com.baeldung.spring.data.es.service" }) +@ComponentScan(basePackages = { "com.baeldung.spring.data.es" }) public class DynamoDBConfig { @Value("${amazon.dynamodb.endpoint}") diff --git a/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java b/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java index aae0c427a9..76895ca575 100644 --- a/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java +++ b/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java @@ -10,4 +10,4 @@ public class Application { public static void main(String[] args) { applicationContext = SpringApplication.run(Application.class, args); } -} +} \ No newline at end of file From 2693991c1b60b86eb933cf1c1eef76938c823a65 Mon Sep 17 00:00:00 2001 From: "chris.anatalio" Date: Sun, 2 Oct 2016 19:10:55 -0700 Subject: [PATCH 019/309] Fixed missing new line issue --- .../src/main/java/org/baeldung/Application.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java b/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java index 76895ca575..aae0c427a9 100644 --- a/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java +++ b/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java @@ -10,4 +10,4 @@ public class Application { public static void main(String[] args) { applicationContext = SpringApplication.run(Application.class, args); } -} \ No newline at end of file +} From 455c71ae714a78691a6fef52805949bac002c4e3 Mon Sep 17 00:00:00 2001 From: Egima profile Date: Mon, 3 Oct 2016 22:06:01 +0300 Subject: [PATCH 020/309] 3 major changes (#716) * made changes to java reflection * removed redundant method makeSound in Animal abstract class * added project for play-framework article * added project for regex * changed regex project from own model to core-java * added project for routing in play * made changes to regex project * refactored code for REST API with Play project --- .../java/com/baeldung/java/regex/Result.java | 27 -- .../com/baeldung/java/regex/RegexTest.java | 333 ++++++++------- .../app/controllers/StudentController.java | 4 +- .../student-api/app/models/StudentStore.java | 18 +- routing-in-play/.gitignore | 8 + routing-in-play/LICENSE | 8 + routing-in-play/README | 49 +++ routing-in-play/app/Filters.java | 46 ++ routing-in-play/app/Module.java | 31 ++ .../app/controllers/HomeController.java | 33 ++ .../app/filters/ExampleFilter.java | 45 ++ .../app/services/ApplicationTimer.java | 50 +++ .../app/services/AtomicCounter.java | 26 ++ routing-in-play/app/services/Counter.java | 13 + routing-in-play/app/views/index.scala.html | 20 + routing-in-play/app/views/main.scala.html | 23 + routing-in-play/bin/activator | 397 ++++++++++++++++++ routing-in-play/bin/activator.bat | 248 +++++++++++ routing-in-play/build.sbt | 13 + routing-in-play/conf/application.conf | 353 ++++++++++++++++ routing-in-play/conf/logback.xml | 41 ++ routing-in-play/conf/routes | 7 + .../libexec/activator-launch-1.3.10.jar | Bin 0 -> 1206790 bytes routing-in-play/project/build.properties | 4 + routing-in-play/project/plugins.sbt | 21 + routing-in-play/public/images/favicon.png | Bin 0 -> 687 bytes routing-in-play/public/javascripts/hello.js | 3 + routing-in-play/public/stylesheets/main.css | 0 routing-in-play/test/ApplicationTest.java | 45 ++ routing-in-play/test/IntegrationTest.java | 25 ++ 30 files changed, 1685 insertions(+), 206 deletions(-) delete mode 100644 core-java/src/main/java/com/baeldung/java/regex/Result.java create mode 100644 routing-in-play/.gitignore create mode 100644 routing-in-play/LICENSE create mode 100644 routing-in-play/README create mode 100644 routing-in-play/app/Filters.java create mode 100644 routing-in-play/app/Module.java create mode 100644 routing-in-play/app/controllers/HomeController.java create mode 100644 routing-in-play/app/filters/ExampleFilter.java create mode 100644 routing-in-play/app/services/ApplicationTimer.java create mode 100644 routing-in-play/app/services/AtomicCounter.java create mode 100644 routing-in-play/app/services/Counter.java create mode 100644 routing-in-play/app/views/index.scala.html create mode 100644 routing-in-play/app/views/main.scala.html create mode 100644 routing-in-play/bin/activator create mode 100644 routing-in-play/bin/activator.bat create mode 100644 routing-in-play/build.sbt create mode 100644 routing-in-play/conf/application.conf create mode 100644 routing-in-play/conf/logback.xml create mode 100644 routing-in-play/conf/routes create mode 100644 routing-in-play/libexec/activator-launch-1.3.10.jar create mode 100644 routing-in-play/project/build.properties create mode 100644 routing-in-play/project/plugins.sbt create mode 100644 routing-in-play/public/images/favicon.png create mode 100644 routing-in-play/public/javascripts/hello.js create mode 100644 routing-in-play/public/stylesheets/main.css create mode 100644 routing-in-play/test/ApplicationTest.java create mode 100644 routing-in-play/test/IntegrationTest.java diff --git a/core-java/src/main/java/com/baeldung/java/regex/Result.java b/core-java/src/main/java/com/baeldung/java/regex/Result.java deleted file mode 100644 index d47c94ad2e..0000000000 --- a/core-java/src/main/java/com/baeldung/java/regex/Result.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.java.regex; - -public class Result { - private boolean found = false; - private int count = 0; - - public Result() { - - } - - public boolean isFound() { - return found; - } - - public void setFound(boolean found) { - this.found = found; - } - - public int getCount() { - return count; - } - - public void setCount(int count) { - this.count = count; - } - -} diff --git a/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java b/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java index 257e486600..414401eb85 100644 --- a/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java +++ b/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java @@ -13,366 +13,368 @@ public class RegexTest { @Test public void givenText_whenSimpleRegexMatches_thenCorrect() { - Result result = runTest("foo", "foo"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); - + Pattern pattern = Pattern.compile("foo"); + Matcher matcher = pattern.matcher("foo"); + assertTrue(matcher.find()); } @Test public void givenText_whenSimpleRegexMatchesTwice_thenCorrect() { - Result result = runTest("foo", "foofoo"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + Pattern pattern = Pattern.compile("foo"); + Matcher matcher = pattern.matcher("foofoo"); + int matches = 0; + while (matcher.find()) + matches++; + assertEquals(matches, 2); } @Test public void givenText_whenMatchesWithDotMetach_thenCorrect() { - Result result = runTest(".", "foo"); - assertTrue(result.isFound()); + int matches = runTest(".", "foo"); + assertTrue(matches > 0); } @Test public void givenRepeatedText_whenMatchesOnceWithDotMetach_thenCorrect() { - Result result = runTest("foo.", "foofoo"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("foo.", "foofoo"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenORSet_whenMatchesAny_thenCorrect() { - Result result = runTest("[abc]", "b"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("[abc]", "b"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenORSet_whenMatchesAnyAndAll_thenCorrect() { - Result result = runTest("[abc]", "cab"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("[abc]", "cab"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenORSet_whenMatchesAllCombinations_thenCorrect() { - Result result = runTest("[bcr]at", "bat cat rat"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("[bcr]at", "bat cat rat"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenNORSet_whenMatchesNon_thenCorrect() { - Result result = runTest("[^abc]", "g"); - assertTrue(result.isFound()); + int matches = runTest("[^abc]", "g"); + assertTrue(matches > 0); } @Test public void givenNORSet_whenMatchesAllExceptElements_thenCorrect() { - Result result = runTest("[^bcr]at", "sat mat eat"); - assertTrue(result.isFound()); + int matches = runTest("[^bcr]at", "sat mat eat"); + assertTrue(matches > 0); } @Test public void givenUpperCaseRange_whenMatchesUpperCase_thenCorrect() { - Result result = runTest("[A-Z]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("[A-Z]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenLowerCaseRange_whenMatchesLowerCase_thenCorrect() { - Result result = runTest("[a-z]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 26); + int matches = runTest("[a-z]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 26); } @Test public void givenBothLowerAndUpperCaseRange_whenMatchesAllLetters_thenCorrect() { - Result result = runTest("[a-zA-Z]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 28); + int matches = runTest("[a-zA-Z]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 28); } @Test public void givenNumberRange_whenMatchesAccurately_thenCorrect() { - Result result = runTest("[1-5]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("[1-5]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenNumberRange_whenMatchesAccurately_thenCorrect2() { - Result result = runTest("[30-35]", "Two Uppercase alphabets 34 overall"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("[30-35]", "Two Uppercase alphabets 34 overall"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenTwoSets_whenMatchesUnion_thenCorrect() { - Result result = runTest("[1-3[7-9]]", "123456789"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 6); + int matches = runTest("[1-3[7-9]]", "123456789"); + assertTrue(matches > 0); + assertEquals(matches, 6); } @Test public void givenTwoSets_whenMatchesIntersection_thenCorrect() { - Result result = runTest("[1-6&&[3-9]]", "123456789"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 4); + int matches = runTest("[1-6&&[3-9]]", "123456789"); + assertTrue(matches > 0); + assertEquals(matches, 4); } @Test public void givenSetWithSubtraction_whenMatchesAccurately_thenCorrect() { - Result result = runTest("[0-9&&[^2468]]", "123456789"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 5); + int matches = runTest("[0-9&&[^2468]]", "123456789"); + assertTrue(matches > 0); + assertEquals(matches, 5); } @Test public void givenDigits_whenMatches_thenCorrect() { - Result result = runTest("\\d", "123"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\d", "123"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenNonDigits_whenMatches_thenCorrect() { - Result result = runTest("\\D", "a6c"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("\\D", "a6c"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenWhiteSpace_whenMatches_thenCorrect() { - Result result = runTest("\\s", "a c"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("\\s", "a c"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenNonWhiteSpace_whenMatches_thenCorrect() { - Result result = runTest("\\S", "a c"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("\\S", "a c"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenWordCharacter_whenMatches_thenCorrect() { - Result result = runTest("\\w", "hi!"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("\\w", "hi!"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenNonWordCharacter_whenMatches_thenCorrect() { - Result result = runTest("\\W", "hi!"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("\\W", "hi!"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenZeroOrOneQuantifier_whenMatches_thenCorrect() { - Result result = runTest("\\a?", "hi"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\a?", "hi"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenZeroOrOneQuantifier_whenMatches_thenCorrect2() { - Result result = runTest("\\a{0,1}", "hi"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\a{0,1}", "hi"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenZeroOrManyQuantifier_whenMatches_thenCorrect() { - Result result = runTest("\\a*", "hi"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\a*", "hi"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenZeroOrManyQuantifier_whenMatches_thenCorrect2() { - Result result = runTest("\\a{0,}", "hi"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 3); + int matches = runTest("\\a{0,}", "hi"); + assertTrue(matches > 0); + assertEquals(matches, 3); } @Test public void givenOneOrManyQuantifier_whenMatches_thenCorrect() { - Result result = runTest("\\a+", "hi"); - assertFalse(result.isFound()); + int matches = runTest("\\a+", "hi"); + assertFalse(matches > 0); } @Test public void givenOneOrManyQuantifier_whenMatches_thenCorrect2() { - Result result = runTest("\\a{1,}", "hi"); - assertFalse(result.isFound()); + int matches = runTest("\\a{1,}", "hi"); + assertFalse(matches > 0); } @Test public void givenBraceQuantifier_whenMatches_thenCorrect() { - Result result = runTest("a{3}", "aaaaaa"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("a{3}", "aaaaaa"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenBraceQuantifier_whenFailsToMatch_thenCorrect() { - Result result = runTest("a{3}", "aa"); - assertFalse(result.isFound()); + int matches = runTest("a{3}", "aa"); + assertFalse(matches > 0); } @Test public void givenBraceQuantifierWithRange_whenMatches_thenCorrect() { - Result result = runTest("a{2,3}", "aaaa"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("a{2,3}", "aaaa"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenBraceQuantifierWithRange_whenMatchesLazily_thenCorrect() { - Result result = runTest("a{2,3}?", "aaaa"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("a{2,3}?", "aaaa"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenCapturingGroup_whenMatches_thenCorrect() { - Result result = runTest("(\\d\\d)", "12"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("(\\d\\d)", "12"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenCapturingGroup_whenMatches_thenCorrect2() { - Result result = runTest("(\\d\\d)", "1212"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 2); + int matches = runTest("(\\d\\d)", "1212"); + assertTrue(matches > 0); + assertEquals(matches, 2); } @Test public void givenCapturingGroup_whenMatches_thenCorrect3() { - Result result = runTest("(\\d\\d)(\\d\\d)", "1212"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("(\\d\\d)(\\d\\d)", "1212"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenCapturingGroup_whenMatchesWithBackReference_thenCorrect() { - Result result = runTest("(\\d\\d)\\1", "1212"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("(\\d\\d)\\1", "1212"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenCapturingGroup_whenMatchesWithBackReference_thenCorrect2() { - Result result = runTest("(\\d\\d)\\1\\1\\1", "12121212"); - assertTrue(result.isFound()); - assertEquals(result.getCount(), 1); + int matches = runTest("(\\d\\d)\\1\\1\\1", "12121212"); + assertTrue(matches > 0); + assertEquals(matches, 1); } @Test public void givenCapturingGroupAndWrongInput_whenMatchFailsWithBackReference_thenCorrect() { - Result result = runTest("(\\d\\d)\\1", "1213"); - assertFalse(result.isFound()); + int matches = runTest("(\\d\\d)\\1", "1213"); + assertFalse(matches > 0); } @Test public void givenText_whenMatchesAtBeginning_thenCorrect() { - Result result = runTest("^dog", "dogs are friendly"); - assertTrue(result.isFound()); + int matches = runTest("^dog", "dogs are friendly"); + assertTrue(matches > 0); } @Test public void givenTextAndWrongInput_whenMatchFailsAtBeginning_thenCorrect() { - Result result = runTest("^dog", "are dogs are friendly?"); - assertFalse(result.isFound()); + int matches = runTest("^dog", "are dogs are friendly?"); + assertFalse(matches > 0); } @Test public void givenText_whenMatchesAtEnd_thenCorrect() { - Result result = runTest("dog$", "Man's best friend is a dog"); - assertTrue(result.isFound()); + int matches = runTest("dog$", "Man's best friend is a dog"); + assertTrue(matches > 0); } @Test public void givenTextAndWrongInput_whenMatchFailsAtEnd_thenCorrect() { - Result result = runTest("dog$", "is a dog man's best friend?"); - assertFalse(result.isFound()); + int matches = runTest("dog$", "is a dog man's best friend?"); + assertFalse(matches > 0); } @Test public void givenText_whenMatchesAtWordBoundary_thenCorrect() { - Result result = runTest("\\bdog\\b", "a dog is friendly"); - assertTrue(result.isFound()); + int matches = runTest("\\bdog\\b", "a dog is friendly"); + assertTrue(matches > 0); } @Test public void givenText_whenMatchesAtWordBoundary_thenCorrect2() { - Result result = runTest("\\bdog\\b", "dog is man's best friend"); - assertTrue(result.isFound()); + int matches = runTest("\\bdog\\b", "dog is man's best friend"); + assertTrue(matches > 0); } @Test public void givenWrongText_whenMatchFailsAtWordBoundary_thenCorrect() { - Result result = runTest("\\bdog\\b", "snoop dogg is a rapper"); - assertFalse(result.isFound()); + int matches = runTest("\\bdog\\b", "snoop dogg is a rapper"); + assertFalse(matches > 0); } @Test public void givenText_whenMatchesAtWordAndNonBoundary_thenCorrect() { - Result result = runTest("\\bdog\\B", "snoop dogg is a rapper"); - assertTrue(result.isFound()); + int matches = runTest("\\bdog\\B", "snoop dogg is a rapper"); + assertTrue(matches > 0); } @Test public void givenRegexWithoutCanonEq_whenMatchFailsOnEquivalentUnicode_thenCorrect() { - Result result = runTest("\u00E9", "\u0065\u0301"); - assertFalse(result.isFound()); + int matches = runTest("\u00E9", "\u0065\u0301"); + assertFalse(matches > 0); } @Test public void givenRegexWithCanonEq_whenMatchesOnEquivalentUnicode_thenCorrect() { - Result result = runTest("\u00E9", "\u0065\u0301", Pattern.CANON_EQ); - assertTrue(result.isFound()); + int matches = runTest("\u00E9", "\u0065\u0301", Pattern.CANON_EQ); + assertTrue(matches > 0); } @Test public void givenRegexWithDefaultMatcher_whenMatchFailsOnDifferentCases_thenCorrect() { - Result result = runTest("dog", "This is a Dog"); - assertFalse(result.isFound()); + int matches = runTest("dog", "This is a Dog"); + assertFalse(matches > 0); } @Test public void givenRegexWithCaseInsensitiveMatcher_whenMatchesOnDifferentCases_thenCorrect() { - Result result = runTest("dog", "This is a Dog", Pattern.CASE_INSENSITIVE); - assertTrue(result.isFound()); + int matches = runTest("dog", "This is a Dog", Pattern.CASE_INSENSITIVE); + assertTrue(matches > 0); } @Test public void givenRegexWithEmbeddedCaseInsensitiveMatcher_whenMatchesOnDifferentCases_thenCorrect() { - Result result = runTest("(?i)dog", "This is a Dog"); - assertTrue(result.isFound()); + int matches = runTest("(?i)dog", "This is a Dog"); + assertTrue(matches > 0); } @Test public void givenRegexWithComments_whenMatchFailsWithoutFlag_thenCorrect() { - Result result = runTest("dog$ #check for word dog at end of text", "This is a dog"); - assertFalse(result.isFound()); + int matches = runTest("dog$ #check for word dog at end of text", "This is a dog"); + assertFalse(matches > 0); } @Test public void givenRegexWithComments_whenMatchesWithFlag_thenCorrect() { - Result result = runTest("dog$ #check for word dog at end of text", "This is a dog", Pattern.COMMENTS); - assertTrue(result.isFound()); + int matches = runTest("dog$ #check for word dog at end of text", "This is a dog", Pattern.COMMENTS); + assertTrue(matches > 0); } @Test public void givenRegexWithComments_whenMatchesWithEmbeddedFlag_thenCorrect() { - Result result = runTest("(?x)dog$ #check for word dog at end of text", "This is a dog"); - assertTrue(result.isFound()); + int matches = runTest("(?x)dog$ #check for word dog at end of text", "This is a dog"); + assertTrue(matches > 0); } @Test @@ -401,38 +403,38 @@ public class RegexTest { @Test public void givenRegex_whenMatchesWithoutLiteralFlag_thenCorrect() { - Result result = runTest("(.*)", "text"); - assertTrue(result.isFound()); + int matches = runTest("(.*)", "text"); + assertTrue(matches > 0); } @Test public void givenRegex_whenMatchFailsWithLiteralFlag_thenCorrect() { - Result result = runTest("(.*)", "text", Pattern.LITERAL); - assertFalse(result.isFound()); + int matches = runTest("(.*)", "text", Pattern.LITERAL); + assertFalse(matches > 0); } @Test public void givenRegex_whenMatchesWithLiteralFlag_thenCorrect() { - Result result = runTest("(.*)", "text(.*)", Pattern.LITERAL); - assertTrue(result.isFound()); + int matches = runTest("(.*)", "text(.*)", Pattern.LITERAL); + assertTrue(matches > 0); } @Test public void givenRegex_whenMatchFailsWithoutMultilineFlag_thenCorrect() { - Result result = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); - assertFalse(result.isFound()); + int matches = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); + assertFalse(matches > 0); } @Test public void givenRegex_whenMatchesWithMultilineFlag_thenCorrect() { - Result result = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox", Pattern.MULTILINE); - assertTrue(result.isFound()); + int matches = runTest("dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox", Pattern.MULTILINE); + assertTrue(matches > 0); } @Test public void givenRegex_whenMatchesWithEmbeddedMultilineFlag_thenCorrect() { - Result result = runTest("(?m)dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); - assertTrue(result.isFound()); + int matches = runTest("(?m)dog$", "This is a dog" + System.getProperty("line.separator") + "this is a fox"); + assertTrue(matches > 0); } @Test @@ -479,25 +481,22 @@ public class RegexTest { } - public synchronized static Result runTest(String regex, String text) { + public synchronized static int runTest(String regex, String text) { pattern = Pattern.compile(regex); matcher = pattern.matcher(text); - Result result = new Result(); + int matches = 0; while (matcher.find()) - result.setCount(result.getCount() + 1); - if (result.getCount() > 0) - result.setFound(true); - return result; + matches++; + return matches; } - public synchronized static Result runTest(String regex, String text, int flags) { + public synchronized static int runTest(String regex, String text, int flags) { pattern = Pattern.compile(regex, flags); matcher = pattern.matcher(text); - Result result = new Result(); + int matches = 0; while (matcher.find()) - result.setCount(result.getCount() + 1); - if (result.getCount() > 0) - result.setFound(true); - return result; + matches++; + return matches; } } + diff --git a/play-framework/student-api/app/controllers/StudentController.java b/play-framework/student-api/app/controllers/StudentController.java index 0adedfa432..08318733b5 100644 --- a/play-framework/student-api/app/controllers/StudentController.java +++ b/play-framework/student-api/app/controllers/StudentController.java @@ -38,8 +38,8 @@ public class StudentController extends Controller { return ok(Util.createResponse(jsonObjects,true)); } public Result listStudents() { - List result=StudentStore.getInstance().getAllStudents(); - ObjectMapper mapper = new ObjectMapper(); + Set result=StudentStore.getInstance().getAllStudents(); + ObjectMapper mapper = new ObjectMapper(); JsonNode jsonData=mapper.convertValue(result, JsonNode.class); return ok(Util.createResponse(jsonData,true)); diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/student-api/app/models/StudentStore.java index 3290e141cd..01b565a22e 100644 --- a/play-framework/student-api/app/models/StudentStore.java +++ b/play-framework/student-api/app/models/StudentStore.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; public class StudentStore { private static StudentStore instance; @@ -22,19 +23,16 @@ public class StudentStore { } public Student getStudent(int id) { - if (students.containsKey(id)) - return students.get(id); - return null; + return students.get(id); } - public List getAllStudents() { - return new ArrayList(students.values()); + public Set getAllStudents() { + return (Set)students.values(); } public Student updateStudent(Student student) { int id=student.getId(); if (students.containsKey(id)) { - student.setId(id); students.put(id, student); return student; } @@ -42,11 +40,11 @@ public class StudentStore { } public boolean deleteStudent(int id) { - - if (!students.containsKey(id)) + Student student=students.remove(id); + if (student == null) return false; - students.remove(id); - return true; + else + return true; } } \ No newline at end of file diff --git a/routing-in-play/.gitignore b/routing-in-play/.gitignore new file mode 100644 index 0000000000..eb372fc719 --- /dev/null +++ b/routing-in-play/.gitignore @@ -0,0 +1,8 @@ +logs +target +/.idea +/.idea_modules +/.classpath +/.project +/.settings +/RUNNING_PID diff --git a/routing-in-play/LICENSE b/routing-in-play/LICENSE new file mode 100644 index 0000000000..4baedcb95f --- /dev/null +++ b/routing-in-play/LICENSE @@ -0,0 +1,8 @@ +This software is licensed under the Apache 2 license, quoted below. + +Licensed under the Apache License, Version 2.0 (the "License"); you may not use this project except in compliance with +the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0. + +Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an +"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific +language governing permissions and limitations under the License. \ No newline at end of file diff --git a/routing-in-play/README b/routing-in-play/README new file mode 100644 index 0000000000..f21d092edf --- /dev/null +++ b/routing-in-play/README @@ -0,0 +1,49 @@ +This is your new Play application +================================= + +This file will be packaged with your application when using `activator dist`. + +There are several demonstration files available in this template. + +Controllers +=========== + +- HomeController.java: + + Shows how to handle simple HTTP requests. + +- AsyncController.java: + + Shows how to do asynchronous programming when handling a request. + +- CountController.java: + + Shows how to inject a component into a controller and use the component when + handling requests. + +Components +========== + +- Module.java: + + Shows how to use Guice to bind all the components needed by your application. + +- Counter.java: + + An example of a component that contains state, in this case a simple counter. + +- ApplicationTimer.java: + + An example of a component that starts when the application starts and stops + when the application stops. + +Filters +======= + +- Filters.java: + + Creates the list of HTTP filters used by your application. + +- ExampleFilter.java + + A simple filter that adds a header to every response. \ No newline at end of file diff --git a/routing-in-play/app/Filters.java b/routing-in-play/app/Filters.java new file mode 100644 index 0000000000..255de8ca93 --- /dev/null +++ b/routing-in-play/app/Filters.java @@ -0,0 +1,46 @@ +import javax.inject.*; +import play.*; +import play.mvc.EssentialFilter; +import play.http.HttpFilters; +import play.mvc.*; + +import filters.ExampleFilter; + +/** + * This class configures filters that run on every request. This + * class is queried by Play to get a list of filters. + * + * Play will automatically use filters from any class called + * Filters that is placed the root package. You can load filters + * from a different class by adding a `play.http.filters` setting to + * the application.conf configuration file. + */ +@Singleton +public class Filters implements HttpFilters { + + private final Environment env; + private final EssentialFilter exampleFilter; + + /** + * @param env Basic environment settings for the current application. + * @param exampleFilter A demonstration filter that adds a header to + */ + @Inject + public Filters(Environment env, ExampleFilter exampleFilter) { + this.env = env; + this.exampleFilter = exampleFilter; + } + + @Override + public EssentialFilter[] filters() { + // Use the example filter if we're running development mode. If + // we're running in production or test mode then don't use any + // filters at all. + if (env.mode().equals(Mode.DEV)) { + return new EssentialFilter[] { exampleFilter }; + } else { + return new EssentialFilter[] {}; + } + } + +} diff --git a/routing-in-play/app/Module.java b/routing-in-play/app/Module.java new file mode 100644 index 0000000000..6e7d1766ef --- /dev/null +++ b/routing-in-play/app/Module.java @@ -0,0 +1,31 @@ +import com.google.inject.AbstractModule; +import java.time.Clock; + +import services.ApplicationTimer; +import services.AtomicCounter; +import services.Counter; + +/** + * This class is a Guice module that tells Guice how to bind several + * different types. This Guice module is created when the Play + * application starts. + * + * Play will automatically use any class called `Module` that is in + * the root package. You can create modules in other locations by + * adding `play.modules.enabled` settings to the `application.conf` + * configuration file. + */ +public class Module extends AbstractModule { + + @Override + public void configure() { + // Use the system clock as the default implementation of Clock + bind(Clock.class).toInstance(Clock.systemDefaultZone()); + // Ask Guice to create an instance of ApplicationTimer when the + // application starts. + bind(ApplicationTimer.class).asEagerSingleton(); + // Set AtomicCounter as the implementation for Counter. + bind(Counter.class).to(AtomicCounter.class); + } + +} diff --git a/routing-in-play/app/controllers/HomeController.java b/routing-in-play/app/controllers/HomeController.java new file mode 100644 index 0000000000..6e340d594f --- /dev/null +++ b/routing-in-play/app/controllers/HomeController.java @@ -0,0 +1,33 @@ +package controllers; + +import play.mvc.*; + +import views.html.*; + +/** + * This controller contains an action to handle HTTP requests + * to the application's home page. + */ +public class HomeController extends Controller { + + /** + * An action that renders an HTML page with a welcome message. + * The configuration in the routes file means that + * this method will be called when the application receives a + * GET request with a path of /. + */ + public Result index(String author,int id) { + return ok("Routing in Play by:"+author+" ID:"+id); + } + public Result greet(String name,int age) { + return ok("Hello "+name+", you are "+age+" years old"); + } + public Result introduceMe(String data) { + String[] clientData=data.split(","); + return ok("Your name is "+clientData[0]+", you are "+clientData[1]+" years old"); + } + public Result squareMe(Long num) { + return ok(num+" Squared is "+(num*num)); + } + +} diff --git a/routing-in-play/app/filters/ExampleFilter.java b/routing-in-play/app/filters/ExampleFilter.java new file mode 100644 index 0000000000..67a6a36cc3 --- /dev/null +++ b/routing-in-play/app/filters/ExampleFilter.java @@ -0,0 +1,45 @@ +package filters; + +import akka.stream.Materializer; +import java.util.concurrent.CompletionStage; +import java.util.concurrent.Executor; +import java.util.function.Function; +import javax.inject.*; +import play.mvc.*; +import play.mvc.Http.RequestHeader; + + +/** + * This is a simple filter that adds a header to all requests. It's + * added to the application's list of filters by the + * {@link Filters} class. + */ +@Singleton +public class ExampleFilter extends Filter { + + private final Executor exec; + + /** + * @param mat This object is needed to handle streaming of requests + * and responses. + * @param exec This class is needed to execute code asynchronously. + * It is used below by the thenAsyncApply method. + */ + @Inject + public ExampleFilter(Materializer mat, Executor exec) { + super(mat); + this.exec = exec; + } + + @Override + public CompletionStage apply( + Function> next, + RequestHeader requestHeader) { + + return next.apply(requestHeader).thenApplyAsync( + result -> result.withHeader("X-ExampleFilter", "foo"), + exec + ); + } + +} diff --git a/routing-in-play/app/services/ApplicationTimer.java b/routing-in-play/app/services/ApplicationTimer.java new file mode 100644 index 0000000000..a951562b1d --- /dev/null +++ b/routing-in-play/app/services/ApplicationTimer.java @@ -0,0 +1,50 @@ +package services; + +import java.time.Clock; +import java.time.Instant; +import java.util.concurrent.CompletableFuture; +import javax.inject.*; +import play.Logger; +import play.inject.ApplicationLifecycle; + +/** + * This class demonstrates how to run code when the + * application starts and stops. It starts a timer when the + * application starts. When the application stops it prints out how + * long the application was running for. + * + * This class is registered for Guice dependency injection in the + * {@link Module} class. We want the class to start when the application + * starts, so it is registered as an "eager singleton". See the code + * in the {@link Module} class to see how this happens. + * + * This class needs to run code when the server stops. It uses the + * application's {@link ApplicationLifecycle} to register a stop hook. + */ +@Singleton +public class ApplicationTimer { + + private final Clock clock; + private final ApplicationLifecycle appLifecycle; + private final Instant start; + + @Inject + public ApplicationTimer(Clock clock, ApplicationLifecycle appLifecycle) { + this.clock = clock; + this.appLifecycle = appLifecycle; + // This code is called when the application starts. + start = clock.instant(); + Logger.info("ApplicationTimer demo: Starting application at " + start); + + // When the application starts, register a stop hook with the + // ApplicationLifecycle object. The code inside the stop hook will + // be run when the application stops. + appLifecycle.addStopHook(() -> { + Instant stop = clock.instant(); + Long runningTime = stop.getEpochSecond() - start.getEpochSecond(); + Logger.info("ApplicationTimer demo: Stopping application at " + clock.instant() + " after " + runningTime + "s."); + return CompletableFuture.completedFuture(null); + }); + } + +} diff --git a/routing-in-play/app/services/AtomicCounter.java b/routing-in-play/app/services/AtomicCounter.java new file mode 100644 index 0000000000..41f741cbf7 --- /dev/null +++ b/routing-in-play/app/services/AtomicCounter.java @@ -0,0 +1,26 @@ +package services; + +import java.util.concurrent.atomic.AtomicInteger; +import javax.inject.*; + +/** + * This class is a concrete implementation of the {@link Counter} trait. + * It is configured for Guice dependency injection in the {@link Module} + * class. + * + * This class has a {@link Singleton} annotation because we need to make + * sure we only use one counter per application. Without this + * annotation we would get a new instance every time a {@link Counter} is + * injected. + */ +@Singleton +public class AtomicCounter implements Counter { + + private final AtomicInteger atomicCounter = new AtomicInteger(); + + @Override + public int nextCount() { + return atomicCounter.getAndIncrement(); + } + +} diff --git a/routing-in-play/app/services/Counter.java b/routing-in-play/app/services/Counter.java new file mode 100644 index 0000000000..dadad8b09d --- /dev/null +++ b/routing-in-play/app/services/Counter.java @@ -0,0 +1,13 @@ +package services; + +/** + * This interface demonstrates how to create a component that is injected + * into a controller. The interface represents a counter that returns a + * incremented number each time it is called. + * + * The {@link Modules} class binds this interface to the + * {@link AtomicCounter} implementation. + */ +public interface Counter { + int nextCount(); +} diff --git a/routing-in-play/app/views/index.scala.html b/routing-in-play/app/views/index.scala.html new file mode 100644 index 0000000000..4539f5a10b --- /dev/null +++ b/routing-in-play/app/views/index.scala.html @@ -0,0 +1,20 @@ +@* + * This template takes a single argument, a String containing a + * message to display. + *@ +@(message: String) + +@* + * Call the `main` template with two arguments. The first + * argument is a `String` with the title of the page, the second + * argument is an `Html` object containing the body of the page. + *@ +@main("Welcome to Play") { + + @* + * Get an `Html` object by calling the built-in Play welcome + * template and passing a `String` message. + *@ + @play20.welcome(message, style = "Java") + +} diff --git a/routing-in-play/app/views/main.scala.html b/routing-in-play/app/views/main.scala.html new file mode 100644 index 0000000000..9414f4be6e --- /dev/null +++ b/routing-in-play/app/views/main.scala.html @@ -0,0 +1,23 @@ +@* + * This template is called from the `index` template. This template + * handles the rendering of the page header and body tags. It takes + * two arguments, a `String` for the title of the page and an `Html` + * object to insert into the body of the page. + *@ +@(title: String)(content: Html) + + + + + @* Here's where we render the page title `String`. *@ + @title + + + + + + @* And here's where we render the `Html` object containing + * the page content. *@ + @content + + diff --git a/routing-in-play/bin/activator b/routing-in-play/bin/activator new file mode 100644 index 0000000000..a8b11d482f --- /dev/null +++ b/routing-in-play/bin/activator @@ -0,0 +1,397 @@ +#!/usr/bin/env bash + +### ------------------------------- ### +### Helper methods for BASH scripts ### +### ------------------------------- ### + +realpath () { +( + TARGET_FILE="$1" + FIX_CYGPATH="$2" + + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + + COUNT=0 + while [ -L "$TARGET_FILE" -a $COUNT -lt 100 ] + do + TARGET_FILE=$(readlink "$TARGET_FILE") + cd "$(dirname "$TARGET_FILE")" + TARGET_FILE=$(basename "$TARGET_FILE") + COUNT=$(($COUNT + 1)) + done + + # make sure we grab the actual windows path, instead of cygwin's path. + if [[ "x$FIX_CYGPATH" != "x" ]]; then + echo "$(cygwinpath "$(pwd -P)/$TARGET_FILE")" + else + echo "$(pwd -P)/$TARGET_FILE" + fi +) +} + + +# Uses uname to detect if we're in the odd cygwin environment. +is_cygwin() { + local os=$(uname -s) + case "$os" in + CYGWIN*) return 0 ;; + *) return 1 ;; + esac +} + +# TODO - Use nicer bash-isms here. +CYGWIN_FLAG=$(if is_cygwin; then echo true; else echo false; fi) + + +# This can fix cygwin style /cygdrive paths so we get the +# windows style paths. +cygwinpath() { + local file="$1" + if [[ "$CYGWIN_FLAG" == "true" ]]; then + echo $(cygpath -w $file) + else + echo $file + fi +} + +# Make something URI friendly +make_url() { + url="$1" + local nospaces=${url// /%20} + if is_cygwin; then + echo "/${nospaces//\\//}" + else + echo "$nospaces" + fi +} + +declare -a residual_args +declare -a java_args +declare -a scalac_args +declare -a sbt_commands +declare java_cmd=java +declare java_version +declare -r real_script_path="$(realpath "$0")" +declare -r sbt_home="$(realpath "$(dirname "$(dirname "$real_script_path")")")" +declare -r sbt_bin_dir="$(dirname "$real_script_path")" +declare -r app_version="1.3.10" + +declare -r script_name=activator +declare -r java_opts=( "${ACTIVATOR_OPTS[@]}" "${SBT_OPTS[@]}" "${JAVA_OPTS[@]}" "${java_opts[@]}" ) +userhome="$HOME" +if is_cygwin; then + # cygwin sets home to something f-d up, set to real windows homedir + userhome="$USERPROFILE" +fi +declare -r activator_user_home_dir="${userhome}/.activator" +declare -r java_opts_config_home="${activator_user_home_dir}/activatorconfig.txt" +declare -r java_opts_config_version="${activator_user_home_dir}/${app_version}/activatorconfig.txt" + +echoerr () { + echo 1>&2 "$@" +} +vlog () { + [[ $verbose || $debug ]] && echoerr "$@" +} +dlog () { + [[ $debug ]] && echoerr "$@" +} + +jar_file () { + echo "$(cygwinpath "${sbt_home}/libexec/activator-launch-${app_version}.jar")" +} + +acquire_sbt_jar () { + sbt_jar="$(jar_file)" + + if [[ ! -f "$sbt_jar" ]]; then + echoerr "Could not find launcher jar: $sbt_jar" + exit 2 + fi +} + +execRunner () { + # print the arguments one to a line, quoting any containing spaces + [[ $verbose || $debug ]] && echo "# Executing command line:" && { + for arg; do + if printf "%s\n" "$arg" | grep -q ' '; then + printf "\"%s\"\n" "$arg" + else + printf "%s\n" "$arg" + fi + done + echo "" + } + + # THis used to be exec, but we loose the ability to re-hook stty then + # for cygwin... Maybe we should flag the feature here... + "$@" +} + +addJava () { + dlog "[addJava] arg = '$1'" + java_args=( "${java_args[@]}" "$1" ) +} +addSbt () { + dlog "[addSbt] arg = '$1'" + sbt_commands=( "${sbt_commands[@]}" "$1" ) +} +addResidual () { + dlog "[residual] arg = '$1'" + residual_args=( "${residual_args[@]}" "$1" ) +} +addDebugger () { + addJava "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$1" +} + +get_mem_opts () { + # if we detect any of these settings in ${JAVA_OPTS} we need to NOT output our settings. + # The reason is the Xms/Xmx, if they don't line up, cause errors. + if [[ "${JAVA_OPTS}" == *-Xmx* ]] || [[ "${JAVA_OPTS}" == *-Xms* ]] || [[ "${JAVA_OPTS}" == *-XX:MaxPermSize* ]] || [[ "${JAVA_OPTS}" == *-XX:MaxMetaspaceSize* ]] || [[ "${JAVA_OPTS}" == *-XX:ReservedCodeCacheSize* ]]; then + echo "" + else + # a ham-fisted attempt to move some memory settings in concert + # so they need not be messed around with individually. + local mem=${1:-1024} + local codecache=$(( $mem / 8 )) + (( $codecache > 128 )) || codecache=128 + (( $codecache < 512 )) || codecache=512 + local class_metadata_size=$(( $codecache * 2 )) + local class_metadata_opt=$([[ "$java_version" < "1.8" ]] && echo "MaxPermSize" || echo "MaxMetaspaceSize") + + echo "-Xms${mem}m -Xmx${mem}m -XX:ReservedCodeCacheSize=${codecache}m -XX:${class_metadata_opt}=${class_metadata_size}m" + fi +} + +require_arg () { + local type="$1" + local opt="$2" + local arg="$3" + if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then + echo "$opt requires <$type> argument" + exit 1 + fi +} + +is_function_defined() { + declare -f "$1" > /dev/null +} + +# If we're *not* running in a terminal, and we don't have any arguments, then we need to add the 'ui' parameter +detect_terminal_for_ui() { + [[ ! -t 0 ]] && [[ "${#residual_args}" == "0" ]] && { + addResidual "ui" + } + # SPECIAL TEST FOR MAC + [[ "$(uname)" == "Darwin" ]] && [[ "$HOME" == "$PWD" ]] && [[ "${#residual_args}" == "0" ]] && { + echo "Detected MAC OSX launched script...." + echo "Swapping to UI" + addResidual "ui" + } +} + +process_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -h|-help) usage; exit 1 ;; + -v|-verbose) verbose=1 && shift ;; + -d|-debug) debug=1 && shift ;; + + -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; + -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;; + -jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;; + -batch) exec &1 | awk -F '"' '/version/ {print $2}') + vlog "[process_args] java_version = '$java_version'" +} + +# Detect that we have java installed. +checkJava() { + local required_version="$1" + # Now check to see if it's a good enough version + if [[ "$java_version" == "" ]]; then + echo + echo No java installations was detected. + echo Please go to http://www.java.com/getjava/ and download + echo + exit 1 + elif [[ ! "$java_version" > "$required_version" ]]; then + echo + echo The java installation you have is not up to date + echo $script_name requires at least version $required_version+, you have + echo version $java_version + echo + echo Please go to http://www.java.com/getjava/ and download + echo a valid Java Runtime and install before running $script_name. + echo + exit 1 + fi +} + + +run() { + # no jar? download it. + [[ -f "$sbt_jar" ]] || acquire_sbt_jar "$sbt_version" || { + # still no jar? uh-oh. + echo "Download failed. Obtain the sbt-launch.jar manually and place it at $sbt_jar" + exit 1 + } + + # process the combined args, then reset "$@" to the residuals + process_args "$@" + detect_terminal_for_ui + set -- "${residual_args[@]}" + argumentCount=$# + + # TODO - java check should be configurable... + checkJava "1.6" + + #If we're in cygwin, we should use the windows config, and terminal hacks + if [[ "$CYGWIN_FLAG" == "true" ]]; then + stty -icanon min 1 -echo > /dev/null 2>&1 + addJava "-Djline.terminal=jline.UnixTerminal" + addJava "-Dsbt.cygwin=true" + fi + + # run sbt + execRunner "$java_cmd" \ + "-Dactivator.home=$(make_url "$sbt_home")" \ + ${SBT_OPTS:-$default_sbt_opts} \ + $(get_mem_opts $sbt_mem) \ + ${JAVA_OPTS} \ + ${java_args[@]} \ + -jar "$sbt_jar" \ + "${sbt_commands[@]}" \ + "${residual_args[@]}" + + exit_code=$? + + # Clean up the terminal from cygwin hacks. + if [[ "$CYGWIN_FLAG" == "true" ]]; then + stty icanon echo > /dev/null 2>&1 + fi + exit $exit_code +} + + +declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy" +declare -r sbt_opts_file=".sbtopts" +declare -r etc_sbt_opts_file="${sbt_home}/conf/sbtopts" +declare -r win_sbt_opts_file="${sbt_home}/conf/sbtconfig.txt" + +usage() { + cat < path to global settings/plugins directory (default: ~/.sbt) + -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11 series) + -ivy path to local Ivy repository (default: ~/.ivy2) + -mem set memory options (default: $sbt_mem, which is $(get_mem_opts $sbt_mem)) + -no-share use all local caches; no sharing + -no-global uses global caches, but does not use global ~/.sbt directory. + -jvm-debug Turn on JVM debugging, open at the given port. + -batch Disable interactive mode + + # sbt version (default: from project/build.properties if present, else latest release) + -sbt-version use the specified version of sbt + -sbt-jar use the specified jar as the sbt launcher + -sbt-rc use an RC version of sbt + -sbt-snapshot use a snapshot version of sbt + + # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) + -java-home alternate JAVA_HOME + + # jvm options and output control + JAVA_OPTS environment variable, if unset uses "$java_opts" + SBT_OPTS environment variable, if unset uses "$default_sbt_opts" + ACTIVATOR_OPTS Environment variable, if unset uses "" + .sbtopts if this file exists in the current directory, it is + prepended to the runner args + /etc/sbt/sbtopts if this file exists, it is prepended to the runner args + -Dkey=val pass -Dkey=val directly to the java runtime + -J-X pass option -X directly to the java runtime + (-J is stripped) + -S-X add -X to sbt's scalacOptions (-S is stripped) + +In the case of duplicated or conflicting options, the order above +shows precedence: JAVA_OPTS lowest, command line options highest. +EOM +} + + + +process_my_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;; + -no-share) addJava "$noshare_opts" && shift ;; + -no-global) addJava "-Dsbt.global.base=$(pwd)/project/.sbtboot" && shift ;; + -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; + -sbt-dir) require_arg path "$1" "$2" && addJava "-Dsbt.global.base=$2" && shift 2 ;; + -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; + -batch) exec ^&1') do ( + if %%~j==java set JAVAINSTALLED=1 + if %%~j==openjdk set JAVAINSTALLED=1 +) + +rem Detect the same thing about javac +if "%_JAVACCMD%"=="" ( + if not "%JAVA_HOME%"=="" ( + if exist "%JAVA_HOME%\bin\javac.exe" set "_JAVACCMD=%JAVA_HOME%\bin\javac.exe" + ) +) +if "%_JAVACCMD%"=="" set _JAVACCMD=javac +for /F %%j in ('"%_JAVACCMD%" -version 2^>^&1') do ( + if %%~j==javac set JAVACINSTALLED=1 +) + +rem BAT has no logical or, so we do it OLD SCHOOL! Oppan Redmond Style +set JAVAOK=true +if not defined JAVAINSTALLED set JAVAOK=false +if not defined JAVACINSTALLED set JAVAOK=false + +if "%JAVAOK%"=="false" ( + echo. + echo A Java JDK is not installed or can't be found. + if not "%JAVA_HOME%"=="" ( + echo JAVA_HOME = "%JAVA_HOME%" + ) + echo. + echo Please go to + echo http://www.oracle.com/technetwork/java/javase/downloads/index.html + echo and download a valid Java JDK and install before running Activator. + echo. + echo If you think this message is in error, please check + echo your environment variables to see if "java.exe" and "javac.exe" are + echo available via JAVA_HOME or PATH. + echo. + if defined DOUBLECLICKED pause + exit /B 1 +) + +rem Check what Java version is being used to determine what memory options to use +for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do ( + set JAVA_VERSION=%%g +) + +rem Strips away the " characters +set JAVA_VERSION=%JAVA_VERSION:"=% + +rem TODO Check if there are existing mem settings in JAVA_OPTS/CFG_OPTS and use those instead of the below +for /f "delims=. tokens=1-3" %%v in ("%JAVA_VERSION%") do ( + set MAJOR=%%v + set MINOR=%%w + set BUILD=%%x + + set META_SIZE=-XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=256M + if "!MINOR!" LSS "8" ( + set META_SIZE=-XX:PermSize=64M -XX:MaxPermSize=256M + ) + + set MEM_OPTS=!META_SIZE! + ) + +rem We use the value of the JAVA_OPTS environment variable if defined, rather than the config. +set _JAVA_OPTS=%JAVA_OPTS% +if "%_JAVA_OPTS%"=="" set _JAVA_OPTS=%CFG_OPTS% + +set DEBUG_OPTS= + +rem Loop through the arguments, building remaining args in args variable +set args= +:argsloop +if not "%~1"=="" ( + rem Checks if the argument contains "-D" and if true, adds argument 1 with 2 and puts an equal sign between them. + rem This is done since batch considers "=" to be a delimiter so we need to circumvent this behavior with a small hack. + set arg1=%~1 + if "!arg1:~0,2!"=="-D" ( + set "args=%args% "%~1"="%~2"" + shift + shift + goto argsloop + ) + + if "%~1"=="-jvm-debug" ( + if not "%~2"=="" ( + rem This piece of magic somehow checks that an argument is a number + for /F "delims=0123456789" %%i in ("%~2") do ( + set var="%%i" + ) + if defined var ( + rem Not a number, assume no argument given and default to 9999 + set JPDA_PORT=9999 + ) else ( + rem Port was given, shift arguments + set JPDA_PORT=%~2 + shift + ) + ) else ( + set JPDA_PORT=9999 + ) + shift + + set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=!JPDA_PORT! + goto argsloop + ) + rem else + set "args=%args% "%~1"" + shift + goto argsloop +) + +:run + +if "!args!"=="" ( + if defined DOUBLECLICKED ( + set CMDS="ui" + ) else set CMDS=!args! +) else set CMDS=!args! + +rem We add a / in front, so we get file:///C: instead of file://C: +rem Java considers the later a UNC path. +rem We also attempt a solid effort at making it URI friendly. +rem We don't even bother with UNC paths. +set JAVA_FRIENDLY_HOME_1=/!ACTIVATOR_HOME:\=/! +set JAVA_FRIENDLY_HOME=/!JAVA_FRIENDLY_HOME_1: =%%20! + +rem Checks if the command contains spaces to know if it should be wrapped in quotes or not +set NON_SPACED_CMD=%_JAVACMD: =% +if "%_JAVACMD%"=="%NON_SPACED_CMD%" %_JAVACMD% %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\libexec\%ACTIVATOR_LAUNCH_JAR%" %CMDS% +if NOT "%_JAVACMD%"=="%NON_SPACED_CMD%" "%_JAVACMD%" %DEBUG_OPTS% %MEM_OPTS% %ACTIVATOR_OPTS% %SBT_OPTS% %_JAVA_OPTS% "-Dactivator.home=%JAVA_FRIENDLY_HOME%" -jar "%ACTIVATOR_HOME%\libexec\%ACTIVATOR_LAUNCH_JAR%" %CMDS% + +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end + +@endlocal + +exit /B %ERROR_CODE% diff --git a/routing-in-play/build.sbt b/routing-in-play/build.sbt new file mode 100644 index 0000000000..083d071676 --- /dev/null +++ b/routing-in-play/build.sbt @@ -0,0 +1,13 @@ +name := """webapp""" + +version := "1.0-SNAPSHOT" + +lazy val root = (project in file(".")).enablePlugins(PlayJava) + +scalaVersion := "2.11.7" + +libraryDependencies ++= Seq( + javaJdbc, + cache, + javaWs +) diff --git a/routing-in-play/conf/application.conf b/routing-in-play/conf/application.conf new file mode 100644 index 0000000000..489d3f9b3e --- /dev/null +++ b/routing-in-play/conf/application.conf @@ -0,0 +1,353 @@ +# This is the main configuration file for the application. +# https://www.playframework.com/documentation/latest/ConfigFile +# ~~~~~ +# Play uses HOCON as its configuration file format. HOCON has a number +# of advantages over other config formats, but there are two things that +# can be used when modifying settings. +# +# You can include other configuration files in this main application.conf file: +#include "extra-config.conf" +# +# You can declare variables and substitute for them: +#mykey = ${some.value} +# +# And if an environment variable exists when there is no other subsitution, then +# HOCON will fall back to substituting environment variable: +#mykey = ${JAVA_HOME} + +## Akka +# https://www.playframework.com/documentation/latest/ScalaAkka#Configuration +# https://www.playframework.com/documentation/latest/JavaAkka#Configuration +# ~~~~~ +# Play uses Akka internally and exposes Akka Streams and actors in Websockets and +# other streaming HTTP responses. +akka { + # "akka.log-config-on-start" is extraordinarly useful because it log the complete + # configuration at INFO level, including defaults and overrides, so it s worth + # putting at the very top. + # + # Put the following in your conf/logback.xml file: + # + # + # + # And then uncomment this line to debug the configuration. + # + #log-config-on-start = true +} + +## Secret key +# http://www.playframework.com/documentation/latest/ApplicationSecret +# ~~~~~ +# The secret key is used to sign Play's session cookie. +# This must be changed for production, but we don't recommend you change it in this file. +play.crypto.secret = "changeme" + +## Modules +# https://www.playframework.com/documentation/latest/Modules +# ~~~~~ +# Control which modules are loaded when Play starts. Note that modules are +# the replacement for "GlobalSettings", which are deprecated in 2.5.x. +# Please see https://www.playframework.com/documentation/latest/GlobalSettings +# for more information. +# +# You can also extend Play functionality by using one of the publically available +# Play modules: https://playframework.com/documentation/latest/ModuleDirectory +play.modules { + # By default, Play will load any class called Module that is defined + # in the root package (the "app" directory), or you can define them + # explicitly below. + # If there are any built-in modules that you want to disable, you can list them here. + #enabled += my.application.Module + + # If there are any built-in modules that you want to disable, you can list them here. + #disabled += "" +} + +## IDE +# https://www.playframework.com/documentation/latest/IDE +# ~~~~~ +# Depending on your IDE, you can add a hyperlink for errors that will jump you +# directly to the code location in the IDE in dev mode. The following line makes +# use of the IntelliJ IDEA REST interface: +#play.editor="http://localhost:63342/api/file/?file=%s&line=%s" + +## Internationalisation +# https://www.playframework.com/documentation/latest/JavaI18N +# https://www.playframework.com/documentation/latest/ScalaI18N +# ~~~~~ +# Play comes with its own i18n settings, which allow the user's preferred language +# to map through to internal messages, or allow the language to be stored in a cookie. +play.i18n { + # The application languages + langs = [ "en" ] + + # Whether the language cookie should be secure or not + #langCookieSecure = true + + # Whether the HTTP only attribute of the cookie should be set to true + #langCookieHttpOnly = true +} + +## Play HTTP settings +# ~~~~~ +play.http { + ## Router + # https://www.playframework.com/documentation/latest/JavaRouting + # https://www.playframework.com/documentation/latest/ScalaRouting + # ~~~~~ + # Define the Router object to use for this application. + # This router will be looked up first when the application is starting up, + # so make sure this is the entry point. + # Furthermore, it's assumed your route file is named properly. + # So for an application router like `my.application.Router`, + # you may need to define a router file `conf/my.application.routes`. + # Default to Routes in the root package (aka "apps" folder) (and conf/routes) + #router = my.application.Router + + ## Action Creator + # https://www.playframework.com/documentation/latest/JavaActionCreator + # ~~~~~ + #actionCreator = null + + ## ErrorHandler + # https://www.playframework.com/documentation/latest/JavaRouting + # https://www.playframework.com/documentation/latest/ScalaRouting + # ~~~~~ + # If null, will attempt to load a class called ErrorHandler in the root package, + #errorHandler = null + + ## Filters + # https://www.playframework.com/documentation/latest/ScalaHttpFilters + # https://www.playframework.com/documentation/latest/JavaHttpFilters + # ~~~~~ + # Filters run code on every request. They can be used to perform + # common logic for all your actions, e.g. adding common headers. + # Defaults to "Filters" in the root package (aka "apps" folder) + # Alternatively you can explicitly register a class here. + #filters = my.application.Filters + + ## Session & Flash + # https://www.playframework.com/documentation/latest/JavaSessionFlash + # https://www.playframework.com/documentation/latest/ScalaSessionFlash + # ~~~~~ + session { + # Sets the cookie to be sent only over HTTPS. + #secure = true + + # Sets the cookie to be accessed only by the server. + #httpOnly = true + + # Sets the max-age field of the cookie to 5 minutes. + # NOTE: this only sets when the browser will discard the cookie. Play will consider any + # cookie value with a valid signature to be a valid session forever. To implement a server side session timeout, + # you need to put a timestamp in the session and check it at regular intervals to possibly expire it. + #maxAge = 300 + + # Sets the domain on the session cookie. + #domain = "example.com" + } + + flash { + # Sets the cookie to be sent only over HTTPS. + #secure = true + + # Sets the cookie to be accessed only by the server. + #httpOnly = true + } +} + +## Netty Provider +# https://www.playframework.com/documentation/latest/SettingsNetty +# ~~~~~ +play.server.netty { + # Whether the Netty wire should be logged + #log.wire = true + + # If you run Play on Linux, you can use Netty's native socket transport + # for higher performance with less garbage. + #transport = "native" +} + +## WS (HTTP Client) +# https://www.playframework.com/documentation/latest/ScalaWS#Configuring-WS +# ~~~~~ +# The HTTP client primarily used for REST APIs. The default client can be +# configured directly, but you can also create different client instances +# with customized settings. You must enable this by adding to build.sbt: +# +# libraryDependencies += ws // or javaWs if using java +# +play.ws { + # Sets HTTP requests not to follow 302 requests + #followRedirects = false + + # Sets the maximum number of open HTTP connections for the client. + #ahc.maxConnectionsTotal = 50 + + ## WS SSL + # https://www.playframework.com/documentation/latest/WsSSL + # ~~~~~ + ssl { + # Configuring HTTPS with Play WS does not require programming. You can + # set up both trustManager and keyManager for mutual authentication, and + # turn on JSSE debugging in development with a reload. + #debug.handshake = true + #trustManager = { + # stores = [ + # { type = "JKS", path = "exampletrust.jks" } + # ] + #} + } +} + +## Cache +# https://www.playframework.com/documentation/latest/JavaCache +# https://www.playframework.com/documentation/latest/ScalaCache +# ~~~~~ +# Play comes with an integrated cache API that can reduce the operational +# overhead of repeated requests. You must enable this by adding to build.sbt: +# +# libraryDependencies += cache +# +play.cache { + # If you want to bind several caches, you can bind the individually + #bindCaches = ["db-cache", "user-cache", "session-cache"] +} + +## Filters +# https://www.playframework.com/documentation/latest/Filters +# ~~~~~ +# There are a number of built-in filters that can be enabled and configured +# to give Play greater security. You must enable this by adding to build.sbt: +# +# libraryDependencies += filters +# +play.filters { + ## CORS filter configuration + # https://www.playframework.com/documentation/latest/CorsFilter + # ~~~~~ + # CORS is a protocol that allows web applications to make requests from the browser + # across different domains. + # NOTE: You MUST apply the CORS configuration before the CSRF filter, as CSRF has + # dependencies on CORS settings. + cors { + # Filter paths by a whitelist of path prefixes + #pathPrefixes = ["/some/path", ...] + + # The allowed origins. If null, all origins are allowed. + #allowedOrigins = ["http://www.example.com"] + + # The allowed HTTP methods. If null, all methods are allowed + #allowedHttpMethods = ["GET", "POST"] + } + + ## CSRF Filter + # https://www.playframework.com/documentation/latest/ScalaCsrf#Applying-a-global-CSRF-filter + # https://www.playframework.com/documentation/latest/JavaCsrf#Applying-a-global-CSRF-filter + # ~~~~~ + # Play supports multiple methods for verifying that a request is not a CSRF request. + # The primary mechanism is a CSRF token. This token gets placed either in the query string + # or body of every form submitted, and also gets placed in the users session. + # Play then verifies that both tokens are present and match. + csrf { + # Sets the cookie to be sent only over HTTPS + #cookie.secure = true + + # Defaults to CSRFErrorHandler in the root package. + #errorHandler = MyCSRFErrorHandler + } + + ## Security headers filter configuration + # https://www.playframework.com/documentation/latest/SecurityHeaders + # ~~~~~ + # Defines security headers that prevent XSS attacks. + # If enabled, then all options are set to the below configuration by default: + headers { + # The X-Frame-Options header. If null, the header is not set. + #frameOptions = "DENY" + + # The X-XSS-Protection header. If null, the header is not set. + #xssProtection = "1; mode=block" + + # The X-Content-Type-Options header. If null, the header is not set. + #contentTypeOptions = "nosniff" + + # The X-Permitted-Cross-Domain-Policies header. If null, the header is not set. + #permittedCrossDomainPolicies = "master-only" + + # The Content-Security-Policy header. If null, the header is not set. + #contentSecurityPolicy = "default-src 'self'" + } + + ## Allowed hosts filter configuration + # https://www.playframework.com/documentation/latest/AllowedHostsFilter + # ~~~~~ + # Play provides a filter that lets you configure which hosts can access your application. + # This is useful to prevent cache poisoning attacks. + hosts { + # Allow requests to example.com, its subdomains, and localhost:9000. + #allowed = [".example.com", "localhost:9000"] + } +} + +## Evolutions +# https://www.playframework.com/documentation/latest/Evolutions +# ~~~~~ +# Evolutions allows database scripts to be automatically run on startup in dev mode +# for database migrations. You must enable this by adding to build.sbt: +# +# libraryDependencies += evolutions +# +play.evolutions { + # You can disable evolutions for a specific datasource if necessary + #db.default.enabled = false +} + +## Database Connection Pool +# https://www.playframework.com/documentation/latest/SettingsJDBC +# ~~~~~ +# Play doesn't require a JDBC database to run, but you can easily enable one. +# +# libraryDependencies += jdbc +# +play.db { + # The combination of these two settings results in "db.default" as the + # default JDBC pool: + #config = "db" + #default = "default" + + # Play uses HikariCP as the default connection pool. You can override + # settings by changing the prototype: + prototype { + # Sets a fixed JDBC connection pool size of 50 + #hikaricp.minimumIdle = 50 + #hikaricp.maximumPoolSize = 50 + } +} + +## JDBC Datasource +# https://www.playframework.com/documentation/latest/JavaDatabase +# https://www.playframework.com/documentation/latest/ScalaDatabase +# ~~~~~ +# Once JDBC datasource is set up, you can work with several different +# database options: +# +# Slick (Scala preferred option): https://www.playframework.com/documentation/latest/PlaySlick +# JPA (Java preferred option): https://playframework.com/documentation/latest/JavaJPA +# EBean: https://playframework.com/documentation/latest/JavaEbean +# Anorm: https://www.playframework.com/documentation/latest/ScalaAnorm +# +db { + # You can declare as many datasources as you want. + # By convention, the default datasource is named `default` + + # https://www.playframework.com/documentation/latest/Developing-with-the-H2-Database + #default.driver = org.h2.Driver + #default.url = "jdbc:h2:mem:play" + #default.username = sa + #default.password = "" + + # You can turn on SQL logging for any datasource + # https://www.playframework.com/documentation/latest/Highlights25#Logging-SQL-statements + #default.logSql=true +} diff --git a/routing-in-play/conf/logback.xml b/routing-in-play/conf/logback.xml new file mode 100644 index 0000000000..86ec12c0af --- /dev/null +++ b/routing-in-play/conf/logback.xml @@ -0,0 +1,41 @@ + + + + + + + ${application.home:-.}/logs/application.log + + %date [%level] from %logger in %thread - %message%n%xException + + + + + + %coloredLevel %logger{15} - %message%n%xException{10} + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/routing-in-play/conf/routes b/routing-in-play/conf/routes new file mode 100644 index 0000000000..f72d8a1a14 --- /dev/null +++ b/routing-in-play/conf/routes @@ -0,0 +1,7 @@ +GET / controllers.HomeController.index(author="Baeldung",id:Int?=1) +GET /:author controllers.HomeController.index(author,id:Int?=1) +GET /greet/:name/:age controllers.HomeController.greet(name,age:Integer) +GET /square/$num<[0-9]+> controllers.HomeController.squareMe(num:Long) +# Map static resources from the /public folder to the /assets URL path +GET /assets/*file controllers.Assets.versioned(path="/public", file: Asset) +GET /*data controllers.HomeController.introduceMe(data) diff --git a/routing-in-play/libexec/activator-launch-1.3.10.jar b/routing-in-play/libexec/activator-launch-1.3.10.jar new file mode 100644 index 0000000000000000000000000000000000000000..69050e7decce1da12207fe83f49afb1d26308acb GIT binary patch literal 1206790 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෼r~5(jyj8wH+RW- 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
  • cvo@>>KRA_ewqv=Wf=+zw@*R)auUuj>~FxBG# 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≠mUT4^gVSLIYPY(10O20 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%0D^~N4=L&Csc`hjNM)gX(^N7l|9&I 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%0D_4 zNoh&7ivGw~Zy3|;EZkIgss(g67s*t(Ky0I5Rkl)rwx_R9{`L&PYAQ=sz`%cpO?d_; z6G;$!4??XJCaD~RwC&@!9U`|4o7MqFH}CnnBet$N`HU&-Vl0O-Ykf1UclQ|$dWv-0 zv;1QHX`%R;)7%i84`U?x*DZMddO#3a@8^e%Jc3+7Mr^Z7kr3h6^IuqzT@~i!o?QtS z#2@xDMpqyX#HKHb`dGR^QggwJNd#rKU8Aa(UczuIyL?*P3uf}J;#E|m_;CeTa9Ozk ze_U^jm&%6cM+ulJG2GAgvDJj=f7O_ZR{HE{)8Hz@rn^)m5+bV z>pyL~f{lLF%BiE`rhJQ^C3IhBJgqMjb`ul{KSPYJIN8|^4^s@C+zT?q!hl+2R-!hD zw^=ES@@__)d&K+8FXkS27D?I{Ha92%%#0+|SP)wEFfMpFz z{*BW2pwXK^KJ&8mIN=VFicQ-^FRPyJ1tzT{sSf z-FJ4&ne4TU$;Z6BUhtDWcceeWsr-8Pz^Oqu6mI@1&$d%jaCSj@tEcp#rg;2JH@!Yy zkLI(spj$UalT;;b`(AQAy)D56Q94)pmLxkP5BnOkE>P}zVW|}L7ek!}B;n1N#lju; z8g>mt6jb1x5_Q6r92gr+bmkj_7@k;q<(qo|Gj?XbU>LY-QCMsg-c)^-U5m!G?vdIj zqI#t_^q7F`mGdjuvNc_q*nL;ch+XAOxtp@Je}rqyZ}>iec_3NxHxwb;&yhW81l2+z z@wgiTYqj@x1I%=Er-zzJ^U_3Bqo|gP{E1hFp72rU< z=Ia>@Vt{z*2YXbX1-$=fhyAeHO56?h?c3>>T4jaL7BFx!IYEnY)-eTLWDk zo&S4&Y4>+HAGO09cE|X~hSvr%I56VyD!njDv-Tw@H3tY@TF^;BwIEl#nR#R97DUAI zYm2yjbMxSh~eU2m)IjRLIsjK}R4{F3|xTN+0QgucbZ|xSf=10l1yC5VRyEdN>NId=YdB=>aQgTne}-%9xZ8rz92w zbZV&q=_D3)^a`;}y1iKP4~-#BaUc1i74f&6h+do<6!H({A)&~pun2$b8)otzx;;bj zx2y<%oEr!Jv`?zNUh%j1h;Z>YtszCRx7vujC{MAWLh^@5@CfjzAX0d2<+`XK zdCb2Bq)|bX@Ztr#s8FS}V+Bf#@Bn36x*+ju8MLaP9ZX??uD=2FPwfyDpjzZI;YtXL zK6b=ylj|A?8_*SE**ORd1;cxn8F8C3fSr(qAeSnDhSv!BZ4#{1v>l@BnmCvOvThO# zLCJ_^4h%urjAa?ja@Pzd8;+U9GqK+mvThknHr)(P29cWAi0*A3?2qR^bFI^WL*Ocy z<)8~P8;A9nhK2`;uSf^-^D0Cj`k4_AYfmcXi5ysgr5i|+=6Ej$q(Qh7OCUA&3xbs~K zaL5O~CTJDHB+XrUapC`nYi6?gI58i11)P5KK=i8W9 zC_w6sxE|9!Gu~TftREit_!9xY;)v!f!@jO(PmJTf1m0()JzI}xmk3_V9}(U#b7OKR zSO+~a1R57xbZRqWHa`vQl7!JvRV(Ct^!Emq9LY+&#ou8{mkz3?ms6S8&XUbWtFnp zw@{fv+bCOv@z5gGA;c*nG<$)+O93_FOP)M35azrP_kp+wbW_4yWr==m7EBH@NRqk& zHe&a!*13Hx$ckGn$oT1tU(OJ5HvAnNgi*HN)4d-^#V$apVoJA7R;>OUsAQZ1(Spxpvj5TW6ZV?ZRdZf^-6H}V7=H;^#oNZm0IBh^s&{bu-<1PiDKC;86_>uxRZTl z*l?rZl;xs^kz&bunb>vYsEaR7*!ZzklQ9z?$3H&Vjikv@?dCKKOh{kky__e53ypZ` zUXX%!xo?c;NDN02OA%RE>b?$AX<^t*#|R$oFmj?6`HvyJUW?3JCLM?1UZHTDLkfb(o(-(z6vc}YT=0Gubh%v-c*QS zUHE@{P&7DG(9*ihm^>%ochVN+cjCHn)s5rb`e7GrP+)edNaQAc_!!Uo&5NWu^ znvvOZAbcqjyh6wp8 z(rB!Y?=WXoR#We_wKr1yhc3me(nKu_hI5(x_r?jA4`^HDADY4h68}>nxgPE4n*FM@iYZVp8Y7`Wx9(h>=itAQwPPlG8$IP#=lAvD^RrC+tZ^*cW#;l) zT^S9e3H?8SVjk@*KRmXrdI40#4sKfqA$@ExcsYD!QwPp3|CeU&_Az4jRD9=fYu3VY zH`j1i?m6_4t$MML9C;ORGH&gYha_gv7vrSa=lkaYvZzR@zFtn6vP}?^L_(3S~A ziA(~}F$&#LFJG{ z{PU}LRmvQgZriZIZM%lt^%=swHvO)a%DZw6wWI8tX%$)7YV!f5f@jPOJTsh z^{ff2ez0@5sa+jnWZcwu!-o2dzu>}@jLdZ(oZNKht62Y(|uo9NWx+ciW3oSw~? zZz4FjE{YLtf}QSgbqMNZspAe5KExdw?&C`*%Pp#`G~Dd256rg0AXM+;&;qCYlB7CA zvYtCboYp!+PPxnaLo80RxdJ%H_0a#eCO4a8;oB}2c0}leZ8dF=xJiVI{{F)4NIv69`gYSpwad8^8vilh7j2n6JNB=s7tQ##zLCE1e8U zq`FN@E`pA<;6gbm5eU+jl1 zCE_0ETH)-47ER|on8!Bmk36_LU8wQG-SiSaXEkwwb(8qy;gP_TrJ4fT*j12+8?xcF zf#Z=$bR---5N3Hxde1f*)B+dkh0=qe%cfya${F{>IL2Ca!f5A!0?QYAm?#U)wg-kP{Mj;z zGUaNp!x2RSzxX1|1}wU3&=*FuS}T=bR$Cwqef&}xF@ke^bH{TAvZ^fP%Bl7CY=yCPUO9H?MkxE*)4>OB>BOZvd_m1P8^o=iObx{c%JG`c7OxJPP`cT~3> zVr#Ey6OB1YaeDXH>>9)ttiY^nYjjzJz%}jwKx?F$azGVWp{epWY7s(Uv+{6x|7Y~G zJp_v0#@b3OW$chp9m3^&sVOkNMvU9lv)D%bEKFa}aZZ?4!wQS}Au2~{2|>Nb;QDFe z0B}7so5l*KgXd%&l^l{vX?GeV|B87-T4jOcA2Ex>ZKl1emR$n1w8_SlFb>XJU6ySw zY`KF_wa~gcM!9*(v^Vo^0Ha%iNf$@y6Pp?G>W=Qfs^dWos+2gdq1>F7q`ffkU-o~E=@4C+AOlSXxOKgrqZa00L?)Kh^*h&_{#?C2Wn0u>w*Q}DIdki7rM zbbyo_L_B`^z#cse*bVX?PS&dGW-v>lthP$W4pxXggWgo^GOj9sbi<0UY!H=TFJ76h*2DD-)mNV;NT0K;XN)vYZk{ z_`kez+E~e!(k(b>5nRf-om;z57vq>!tsiA9;5XN}Xr& zNCoPOjXI~ZIt#k;)~6g#31Q%SMXt}zLgWPun@^PQ-Xs@M>Mg82Y9hxu;=8hi=O{e# zw<6LzI%(t0_ysfZw%a389Vm?Zx zYgfy60omoL*uXM!LZ+U9KfCljy+tTi%eq$n{QfGKx9vZj{cgE01vI}9iXzRigx2+x z>6^)AbSfqROaa8vkFnR9ZqwAd+$1p`hgm^dCMTwsnqY3V3}{z^#st zohDeI@_Y6~mwZU`RHtEF9Hn<2~lFC+rx;mo;lnfJti8zXo;N|^L??d53dnj z^9%N+IsEowA2TByQ_~JPHVam`E0PY0Bh2K3)|KpB6(DQOsVA{=c{q!#*~bZ_@MVC-)V%rS&0V0uo>k0Bw)J_nY4+L?4ukyEU+5B5HS2$G=oH6#Bk`}BY zJj02uqVOE#YbX)$M;opmc>?qR)4}w25FUu^DFYa=KGWwifNCZ})-Mva>05SckzHT`b^qlzz+2!bkFId-wNTRbH{;7pLIGRdv9jP8bp+P{{92X>b zPANkw6zqP^hgnUa++YyYaBss{ZxCL*{Jnni}X&$%(7eXUQF3p^>RiW<#c`VJD#ZAxF#9AJ)=Y z!@Pd*PHlsR7kWbT2bkzI#3MqFiU>{PL41A3wBdOb})g%f4xy z6ZrYx+636<5uwys1-?5?Z4!>E7fg#trO^VyV6=xhMyg;LXY*r1j{PA85GRjJ#$eKb#-ls-Q7=yKDn2? z!X%jk^dR<9n~97)q^&wmxQm_1y(deH{9wP`eb56h*C5OPJi%|w4R2}iJ`_RvGyf)C%48-Y4Km4ZG*%0rq@u>WT|I1 z;+#o8ZV-bRmK1Q%lhSM7$aYw)eEjFvKb9}ub~5JIjvUv2H39wK-I4nrC!iv3)^`8z z_1D)3)JScq`FL~kpj(cZ5^vc!5lvf!O`4K%Z_Fg%8yLFD09V9_^bwU8O9q}Ln2P<9 zhHmB8t2R0}u&!>7%0yKyU&hwe-O%Y=S-xCfx)c|`ooT?Es1D4Q&0aI_ex{Ceic&m0=BaJJn%#^}kBP3hGa4^|Dwvl_st90OjH03M+N-EP8PG?dsib z_z%hcPkK+0er_xu+5T26{_@@L@Lw4=fcytq8Ek$8zxXO9t328Q7ON;4JC;)_xdq)o zbwnc;t1j9xtw|jD5xq$+`4K~b8X5woa!G`cy=vpEjfTT0Qw0f_!GMi@FWS=)F*`Z7TwswLl2_YrBBCCchm?& z!KKfl3iw0dZ4OL#7YT-AAde7;)+PEaP#7+_k#H8$->FaIsS%=O&=z?W%-^j~;mC$2 zcglz>co_K_#Q5bdthE;)yNiO1F2R!CXG9(>jY!R&K5YaD_CjupY5&J=Wj;GX+V`92 z<1zsGi6FQYw`*#bGS~wT5%q@|DeeI)kS%?pZ)(>E+5j4dMQhp!DmVrCBxHri$OtXi z1X>lh4R_M`KOJ+4VIZ9dgV#mMgqu-q>SOxnMYK?8aJ!_x{lQbi9)M;vQW`Vj4>m_! z#ug!(Hd4}oCGav}PsJSI%GQDHyvY`6!~B998}FL1g!c!D%+6`RdIK%U{tk!YZwKh& zJ>fR7z_M6b&i3~iB^b?4?Ft~)7y+?@EAjLyL6X-P_}d{QOV__V+T-TCF@I z`i;A^24_r^24{>*!%&RX24_t52AOw>kx2R(IN!*73(|u^5DM;FLVtXn!63=)iK6E}MZ7me0!|;ObB;G&huLfO%^FZ``b2HL_TbKS@($aR zK#%6&%F~6L!3_+w|G|vV&AQO-h9NL3%-{6d1NyTsBJ6W$3jYJaaU~?`oKra<&9(s2 zacPM1t&N)6lmJ2>Lp35wE3VbL0NTU0Ak_@x9M`VzoTDCXr!-Q2wK#GrrgBu4V=lr^ zo+D94jQw&}48e&MFesmSZHge0yKzpf)$v+!5BAI3jz@ZHm!8hWVf@>FQLg+fIBHo%%SwO6JPAy8iu+n4AxWV<4IDEJwv zoh356*Ra6M1-@L+(U-9%EAKG>h{rnrOHV9n2LJ+uNEagjri)Lci`{sUSSWD(+y-Ew zT`jgXIufmC7>H~ZvMq9xZOQAK8Dad=Dbr%iti$dZWWp!B`IKo6Gkf1LJ<+ZG06q#^ z%zs#2c)I51!;Aq$Ey0I-e65=~gPFWK77c_?Z*vafb_V=CfW&=6o`X*} zIezll4&=KRQV6fbFLGLbx2|4-#lN{EL_fIh(Qj`)A`lR=y^kP*Y$m-nNF+Ct~# zLv(rEYCq1KMhfcuh$ zgcp4=Xv(s0M4VKglr3?u#nYxZv)ME*lGwg-RaAuL&ryPc z6fF@cSWH#;lai3#%D@BboC?jJ{nyy&C&>fvATqW1S?C_6kDPP!ot&PVx+Z5>=X^`e z6-#txCWy&y{$0&@W}I9Y`c@VnB{p%S>~T(DKAJP&hhhw$1mTEMMpQ*g6tm#yyJm>j2{xUZOrahO) zPtk%(^>~N-R%q*o168*banXqagi)P%@@(#g35vo&L5~CZ!9DiFxpfFJZzVSIGD7VD zQauhv7^1&M8iu?yqo|LW_naHH1Qoi=cGg;&t$wnIjSn3_VR(+`gQ?Vhdi^Y$T1MKDUWMpNlm+Kd(mW2veKnO7^f=8>7hcblMU?88d+s@;zy*lsqV~w zD*hBem?fNAWzLI840%J}UzB97j#LUTS6v^_M?3Yf(dEIU5wz-D8`o?V!gUR&u%q#x zC6YQDpS7MJE|&%=)ol=6EpGYQN_tSv;d7Ye{OsGBppclfe@WYj7`-#<9PQqT@aXt5 z-l3xxgDI+4BoXUok@o$iph6GEPL^oLN3|^_R~w;qHn#BCgnrw^(GnanvEtd3^$$Y2 z+%WeVCNfh$USbV}`pgbrh7Sag4RvnpLe3S4GwP_|>|KF;uTP(IIB9B&=vk;4U@tK@ zo_7!*5l#OY)xVnHMs%}orZl&kogbX~J&}Gnv~bE|XzKf5)5SQDQRr}Jq-@)P@OOLp z#kiq$%i$XsyFZ$2rdWy3rf}Z**PxWLytu=6i(o*XuNj>>kPJCbQOa6s8D!zls8FO` z35N0O;zJdeqIFsZb7(YVQHpPDTwO)$h(>_M7dH_CEj4&~(^0l*kc7=d; z&OtBIy#u^FQsRBf;*6F!gsND6QhiXVXF9axbieTxeBK_vzMteg8MIIMqKTkQpiI@Q ziIUD3J5%#_jIPn9lu`P`TY0dC2iw?$JxysdRgDq(!8Q@4?@22T)p3PsQ8gtF7yLfojmNDaLLxd;^ z{9m+vV~`};vhGaVwr$(CZQHh{ZQHiHr)~GNZQItgU+;a+x$m79_w0M#z4883R8>?& zRb_rF*O$3getG*Cl3qNs&WqtdD-Lr|B$ICaL~O*?jDqx% zGl7|wv7UwzwKNAqz2ss-1nbqtWibTlbz6Q!3j1q;9t`FyVRMw~g%4G^{KQK(i&8Ig z@~Ocg?BTaHuC8*>@ zBu{wPmuu6_cPE-zJb}URbZ&O0-nMTh*|i}=(mRN&Ywrhd_Q4Y<>R8v`Ta~_~Tj6e{ zedgmjZ}JLDf0uC8&O8~#1V9)EyUjxJ9$h%ZLD|z{6n(pqiE$#+K!g}(tOgAo>lCMP zuX4uUPJWWbnVS>KhC@E*A{L<<1^GGKIh1G=J16o06)<5xF6&C zvbXp#!X|Z#u|O+}Hjme`CQgW+uTBvu-r>V%D@n&vhTg9v%uui9@|XyvGyb4}NuG6b zVsG$}O<#urA=>`NznFW1Hy}h550#wA45A*3daIPM1jTuKpBQT+L60;vuuGUmH5)M_ z49Socq}q5A*D}J=u1?BKm9|OrUR6BO**%9xD$U*oZyG}66XjOhKHJHBhcUVhS@}Mn zZ(^6dqupzlsv+h|K!DwoCG#r@t8K?9AhSE>)lDYz^<92cb>cN`Ftys1-ZSy=Esa8k z)xpMnMW|t||B_EFCg^Z@qyF(HL1H_X(xQ=Q##ZHJct23tLDTEmEMNF_D_GRoF zCkTsKpkh)x(;~VI5MZ%F1?seq8!=TNiWuN=5Ll+_fEGpRI`fL zHRPkF;F}aVV>c`wlRyKQ*BJh+vrBh+CAhv~>a^#yXCW}UttF^k*F*!O*}iJLl{fA$ z+e=`b*LgT@9JXcF@fToPKIc5C<9qiUBPtt!x*dzbA)q>jiB+I4&nKDdu$11N*Ifm6 zg0Nb9ToHV*9o?Wfv=wd$kK998I}<=-J^a_ewY{u)KwZF&JHqj|Yqjy&mOJgW=sNz~ z*W6(JV{WJunLq~LBzmi3NyMPr;kT(%VTgZAcKkvJ7b?X4#>sd~)|tCbu1oL(h&Uf+ zt*Q)vbxCBZ$oL>Tyx{tT6u&p(ST-NDOUWLq0m4)V7K;sRuTY7Y+wPqHnI&dRK|zY} z^jl3V6)!1_ZqUlLz<4sViHJn%;Ex79g^@JrUxz10nR_RGUvh{-g->;-FWaU7UOH>` zYAdjsUXcc>r$MmEoG0BnEhCn$D_V~{zoUE$?Dp^-NK@X$LnS9BiO{b6L~%F);BUK7 zfv^GrN`CIpNjXijxKh|<3+A}U3a;qAWJBch1S&`jIPV*NvrQ1Y>On&DMc+q|lmdgEjq-8Dwxs^!0St~yOT}4d=U5%v35`Uu@41UW%`r& z>t@z$!u&m*PmfZ9H%;1*`0Ee9^9NKas>$3xFh?HHq{RjqTBl2pp3<*cMI@%mQ^|K?-5@i8s0nr5OwJMnn^`0isi zq=a3nXIQ^oC%R;zoB0fgBt>Uc9`FY*+&2o?7k%p1p$DBHx+xymgp-@bJ-g|XeN=}M zLA!*x6J=?q@4Ox5k`E|sl-lL@O(RTN+X|VAnabYR?_A6L*#(^bcWv7+Ow*D6}hloBaRrqFEqsjuI@S9Dl|KT+$9^u(<@^8I{nFIXUkvn zMwVbXy=X!duVrc1eSrFwA#tz#Vzevd3EWPudkANngm!0~2Drc=$relevv$2fWJ1*4 zP{w=J?Ksjl5SYGu{(rK%+x6S}RU9WFq0aHXyT31JELP zKA2^I`!ayvJCwQkO)CkmGMos*eJ!H}g#kOqhWNI(m5i2MGk(?bLTo3oRM+ z+?|elgy=n2vJlE`%-lO+@oFQC3ocJ*hX5oR&wv%VOv6mw0~2C)vBNB%FzVI;q!A6E z0C4&vz-?gXX``S?MYa*mN;YsC|3O61V80vs5zHb_HUMTfQ4v+RBI=LiWcQe&ZR!Sac#N^N3^85xD@MfTtccIEZcPkkl z6;*NK;yA_{l98MCC0GYE-O;&Sh8rKQ9ba+htJV~d`R#KCcShoZgu$ji!y%yg0pPby zDJDAS?O-e0I$p+oEz~-$GQ4wsZvMn_-2mY@pZVwrggy|m&G)$eiupBVTV`9X>5ktl zsGb{n^x5P)i6vS5bGmq9NKG-ssDOPU&VFCG!#(qxy=Z-phX9HpL*h?X9-;4Buxs9C z5_6Ev4?TwF3su1ev!YN+QawuRpm%n>N;}`xg0B2LD7a~dp89k;AOzf)wM2pUsSEp2 zuQlA@YY6G9Lq2y!3&W2DH`nBNzahucV(%-s=q8Hb`c~ml5yhgv#GB-{(aLIY*@T%o zWG7A~;_XRd1PnH66)dq+yNmqB$Oc^yTN73Zk(|GA7@8qR}i z>$jl9TvGtyfv7xT{ad^o;4*f1;_$^WK?)~U23t`o5WP%}Z^f#ccx4HESXn`nx01kx zr?#~c)+ao+*Y5pJ&J3F8)IL6~#w<3-1-R&H6oR5w{gkrf@z&?~zV+OFfu=p`W4Xd} zXUzLL-xqs!mo|wvU0Z1{%VyuyPWp2DN3^lHGtR_;ha(E*%E@U^#i+vJ4(h`EL+&o-4^g2m zUMm6#8-gE11iV-*ac}EFAHqU9Bv&jydt@BC05CkO&()9Fz>X5R0kM?|6Ftc+;+@0Q zGe%mx6G1O+k3*b|8ekO{h@@9Rw+yfMDr392kY}BFY<+OwVs%wxWp%_K>LcKI?UA~C+_rVfbCex`7gVU-jab>Z>Kn#-P^%3WP;|K&4$cJkS0$B>Rx9dcM4H2g2 zBFemONCle$`*~Oe@amOM#I51+$w8U%`n=`|kO^o6-JW)~G$Qv~hXLu=mC{KHqhcOj z;{`?Y{01nm9vR3r415kw{KeZG#zS@j5h3+2Ea61hV*q z_ue(%k5PFo78{)^B#WP_rfk(qKC9}<#AM=0u+4iHuTK@2ITtUwy|1rudLie{%T$rP8woopd1))Zq9 zZn!XIOR4WZ^f{k!NQBm%rV@H85pJ>hd1HH(iQmtAxH#Hz{CdYWr;Zh5aUuE#+N+1v zQSD@!%4q%V6R5GtV!m(svBpn5Qgtc$3}9nIsOl_GoC60&E2TzG3?&C)4AeDA>28=R z-NcqfB?_ZzRvUU!)ReZdJe-6VS2zlvxtIWTxW%D>LOZC-se5fiJY=%rlxC-AWo1Y5 z$wG`PHV;L#5EJRaCSY61jBWbZ7@71cQtlKx{c)uBrvJ)I+yryn|YVv&2ltug30WJo2SaI zPa->gYvv!+B-s!!6TvY3jKG~Tvw&_UoPWgVQ8%$Z7`M)sWQZ)9JJvdoyx)UC$#UZE zwlfRmF-X$OFhn~(kTF0)_pvVJpBWof=j$zx(#Blul4Ee z>WXW9?D_p@4fb0`OTlh&xF*G-(mD-ZfFv;4Gy-E*Y8nArI0i-P99_&9Mzz70=E^{& zVO*ZZn%Q}V_ne*d6#Z%(QubY7o)^JzoLy8f7$HK51*RudjO7s^O+HawEA>v;F?m4! z#abpu1*>Kjt1V{x1x&w{pxc}B`kBKDeLIbI3TdMX$JVmN*cG!kr^_=8EH%0Ruaqgn zomDL!F+Ga;$FC+eR045LCS#(_G?fNRMk!7%kH;8YlJ1XQ2g8iD{!Dz~*xw2-_OWp8 z4y(zy*LhvT#$;YG{LV6=v+8R#?XT42;OvN_V5T^uGe`lQUpPMekTK1hj2s5+6dY3qU2s87+dY3sqC2wOA zV6@776<>#tAhdBGARqn}ozVS@rYOhx;LlE@O&g=JZ(ofh`CpyX|GJq(`G1bT|NE5n z9}*yxO!s4!q0S!B`?ikV7bfN>O&DlQG25}rCN96aMt)Jon2^d!7}t6bI5 zQ$?TX(;xQewTS?)-|BFH+~0Xi|8cuo+~8b=S>_}NC3$eEupw52PLUEJwu~9?skyce zleB*^E$-FE*^%T99Rg(Bnt=Hnb_Prz6Bu5^vAt+)MM*oGr!lg zpGu~=IGc9$Rw3gVR}*;A7HPEot7p@ul|yoT>j^-X*XY<2fg@hO{mg5$Ic|XlBKiC}zOl4|31c*I)|d{g=Y~)t(w|Y2#y4@N z=j${e<+?qa=ey%D<4@{~$n}Ec{mcBDzkTCxz=^en2lzjowF`Ri07umr)yz!vEadzVGD#Elt?0fW z8~m3FBkKQi$o?Nn0RPb*^*7iqC~8Y$@*{Eod}boCV6x6B^uET&Ee_}s@n4lATUKbe z&$HdTWR_Vur%BlG?H)o!Mgjsv$@^0^$Bi`*j-^2jB8Y*`@o1d=DI5KehwGyQv^GqY zUCF_X9u)E!0H_`~+Cex`F0|yCK*vB_uU%v9PFl5`Z)KS1VOt2qW`03O7i9E)F1wqUmRtbCpYc*}wj$Qmn=XBT2C5%%et2xy+|{xJM(+PA8$lLp4a zt2w@>#w%|-jV%jZU>eiW_q3fK#w?E>4>@idQ4=Q34JG|ed@os7u|2!lkH?DhoJ4oR z*lm#wpN|zCCUoX5tg|$CTRy6Q#ByxcgobmT*h>{ovj^{?1*e` zlhQu=%=V3Cl?QkyD46Rm{+tSW?3ZlO3Xyhz4D~(jB(q$;3f`S*U4m_!zy0Rzh}8Do z{Z48pV}DM{H_*rpK^zXvD(mdcr@c@sup)}HfK*x1C=1w2dG|9jbR3>VJse^)^aH&* z?Z*Hn=6ppjP%wkTgc6R?z2zHLHlL4fM6B>qd@B{hq z4F*WBOiYH6$-@T#CkNgzu!RxjSzF~49j%eS{_ce&Q2Y%%tW4$3#r1IS?gG09U>G_b zgfXCf?6nZv-sF{H-_^5TJm_U#0?vU!?ZI72qROfzur7&eM!ezmF+`hJw+ea^SF!tr z=aras5R{Z->oyu%CR;(CQWAGyJ26Ysev-$fncM~>;Afk#pP?u$t!7<8@2zYzmc-E> zUz#&qkq`f8h|YX7GrtoAR!{Dz6jU)=C1SMP`v~eECY&hNJsSBk5b~E9|MiCO#a8|; zA?5!&>i>g~F#l~G6)F5}9U1blsLzS)iLNEirX-6%W)b{GLY{}yjc?LB5!@naUvlod z9A{{!+&5L0>jnMc%PY}=DFI0BeXD=yljV7txwFZ;zWIH*_Y8yu^Vnng`ns=Q61K)m zY5HD1XsgeWs<}2enXjn%L2z5pmPr{^VrW$8mdSNh==}#H@ogb%Jxx4?axc5MH+_Pi zGZ7*t3jIiIea{I~vkc6!6tX=}ZlaVJNh%dmLmAm=SLZT+;2F)jnXRdE$wIcE} zGRm}`QGuSser9Gq*>~muzwh zs|;LDNo@P5A%M#%^_uA(W>bzk@`{*0JiTK}ZR!5y<)pvtBmJLxn&}^&?v+8}hx4AG z;p}gzt<5J8Xo+pnGXT5^PA9``p_1^w>8WxpM#~s?lJ)Qq`%QwF1WAPR_KkN`jS=4l z;6{jJLs?t-O1ZPp=kxg)vIj;*kPG~VYCytw_GDV;0poM0ovH*u z4rS%T5T#i0UjwN9KUy~u(#!5NFfXS>Z-J)UfXDNRm2(0n@uOmWGG8Inu1r@-Alv$o#)dO^nCKK_I^hi(9$JT z%qC!3*?@JlH%s}kHnW9SN;Hxi=V^({9RA_$C0+3IEl}ODN@PS>gw|2FEX9J#i?aJ= zfe=&yyzQj4-7(7EZudu(6^N#}j3qGI6?nDn<~gA5`cE)N)}l4Do9`$(_nPlzl;iU% zwOKuf>HfB0H(B_+Y%jGZ%b$OWr5`IH8isv&zUKd{=NbRud1>1@J~;0T+IDk+h-Vt| zAO)dS2o&VrB441WQDWdiJeYNs$3?3;*Q!SBGEg5d(18%3P(xZg`)$zc0^hp2P@r8U z^)psZ+rx`-v#!tIFVH<8Dq2)6$E|8k_PvAk5fLzx9BfB=BfZZoSWatp_Jx43j@X$) zT!Nk5FM&G_KUzph{6z&qyb{%m`X_#H3-7;wOfSbq2>qTSQcdu_#H4h$^5=@@iY>EM zjz=E@bx_@xXNe7)_nZIt*oJL>ZjiIsP|z@TMZ?e}iG^|$EIJ6_!jXJcizK|I;%2y! zA?KRtOsOD?eYB9r67)23I2*H84s;bwyUw`^EtJrOrPgODz* z@fQ~#W3?9$cyCk=em1{@9rm1^LNhUlGnq|pu#6WF5rT4s<%S7f`(aKbk3*4lE3~Yn zfn$69DQj@R(f_D_8}S$+E=FO*QfHD6fS#z$!LpPVZk~8CO2AsJAIuWw)!@X;(IDx> zDY8g_PiR%`-FyBW9cuVwiz2JW4$1WR4aVD#!@FlNPy;HFybGKICIUD2DQ7a!?i(vCP|_ zZRzs5)JOYYpyK|^OyYkUP8j|Hsx_N0P;qCpgk_L41bT{-r{K*h)si8|TF2$$cN8L# zhk|ahJhE8TbuJD?&*$*1=bftF0~6u={>B55>I@yn$ECdZGCrBf&dHd5#oOfrIL$vd zm>&@wL5!-ZrR8j26&YcyMPb+)Ifk4lU(qudMsb>2v&)5o7G9N90>!HFu1ycm1ve84 zi%^h1v)YX_=Cyok$+$~^vgtUoU=-uIDu!dh3r+NNu*^sy)3Br6N;r#mGO8xh71_~w znX|mgSfQk$8Ygkdz?QL^0(Iw&JR)k&mUtM32C}d2Q`ui7<(BTrtL#TRL9K};Xq>CK zH^F6jerxiJp*L(w`crae*8hWPZ2S zuYE!c^)nBRbk;~;by!6N2N3sh0vOuKm4WoF}s`a`qVwf&#GVJ0DYu9;qIU0H#J z0_)4iVYfw7bWdyJ7}cpv5=v$v0c)v6$^^L9+I}$9h#N9-jY7Y`OjmX3T*W~8&0kU& zjwCY&fH_3xpU7rG?=fD@suv@iAJLT~7}=8@sNis_7qc?A_kl=B*+c^?kzQ3eDbJ9x zIz*6de?6fg}PYi&Gv=9+o$*9KExhJEoiRj(?@RIE}mbz2J-eF=~NuFeHtq1#w z{`?SR*c5Ip^IpLcVBC^5FuJ)R;Bkiec1u}w8z)fEUAb$a<5XD43a5?-+Fb%%7to<0 zEh7RinpO_3-MqT^5)ul;5yG?(72}|~4%#Q-G$ijdacpsHoQF?4&8bXm!6M`!hV*iH@jUd-F?#j@)O4nbKn=s1_O2m1PW1l089yk<;1i|&pa$fN zjB)Vrz@3jU(0;oo+9)b=!y?CQ@C?bZIq8qjw8~ABWp?o{%)pGWLJ=;_Q-LBI48xf0 z2+h=DYJy0VYLSq~P#e<`O@gssGF3l%%M2aR4v)7gdsNv1BAk3ex`eWL^bBth4?Xw^ zOT9(bRybDnbb5xqRru=AAv0miCpo2$%>!IxKzHzC+S13kDt&NQ?*ZEE5>6tneSZ}f ziV}D)Pjgg$dHb{CaoyOfxcUVp>c4~%>%U2G|96h~B}@6Y*rXjjAt6W)7bI)3rdfdu z?+v^Da&re#|? zLpC06&B_50JIc&M>*%2q$>0Lrb|b^*zCx{u1kvuUVm_I;gfH=sBke%_)fWWf4Gc*r zM(Jk?lRE;VF4YIc1yI!mDbcZ_IfYfa;1Y;9+y?_^x0Brm&02j?TY%bS_cU0Ws% zv8QhUJkMVtoQM?1FofuU$oe35KJJpCg81oe%35TzTr7TH^zht%b@^4H`%Tf|jukAA zyWPLW^XggG4=k80S8WEN;hQagoJ7=HqbB7nOcdmodY5QM!iIIf+w0jwn1sh>4F?V$ z)DtLVN4;WHO&?n`;%5{;>+ewI<(sOYNsbZKAHgG~zF8=drlF{(i9E*`$OxPiD@!M= z5??&dB;=rn1sG&q(~EB|Vl?U&44p(dQlADQZ%?rhnY28(Y!(HYfwIsxgqz;mS~<{> zd?8heqXpT8UxGdrx8(;2#B|$CS_J858I@f$WF**j5?dQBL5;g*mF-&r8uSm&^( z$`sgMavVwQT@#RF5eA8j{1F@#&=b^X)!OxklLn-3D;Mw-FrQjwmTmM3phAuS>_7|6 z0c%hN(LAqj8COnrgPN_SY7UN^}@sn8|xKYae_cLIlMDBin$^N#dZD! z3uLP%gq{SYaH3`Qu+Ht(^Vq1T5YgB+n4oU&H75L;H4wT1bvPz#IJ#S@ETmpK%LZQ| zeF^q++`%azD^=K7VSJ2^drhV&n#(m{A`2LyY$cJ%1GF8QV4Z&%>ij0ms0E&MhdB86 zMQ6~`np2N6P#$Enu?)m%?l?R?i^Y{=BgIt zKy5*53*xOb3nI+~3VxaoMdDCuDFbC$i3dFIQFl{5$CN-ZriW=;k%(PBEuEbPk?*l# zWRYU(MQYASR8;N)xR#AIGFp(2g{K4uNlL)4Xw^A9^e+@lib1tA5237igc#RFEwu3F7?)H ze~`slv!g|=h;rx!RC7MO%%zZU9GR+=hA)V;oJ+k)2&u^?F-Kexo$u+|JsvG z5xSs|IdY$aQ1tvn+gnJ2Ha%BUKEQQ#EtxYPz-%Tgf_3%&;mQkkX3^O}JS^SQ^ed2l z;G{7*{rGY+GG(81htnbLCLv3kG2i4~>9a7**}kQ2rWm)I7cZoORaE*F6b#L_*b%#0 zy`jtGN6?v>cfXHF#?_5WzfbVg)Q$xr^%9kjNzBcuW<%I6vbU$f&gr1Y2XQpyK;8{dY}&^PWnrQNE|6cFblCGi713A z%0Fd>g1gSFjnZ^CHb2}S9{S_CY<1M?7>legpSDPHhIOmCg=gn~%B1-Uw3hRbd@E`| ztxzmRQ?#TGS4s18D9(AcddfY&UyD9dd4>vyAKBjip2#s3Y~|>rhgzqIl1r9#$$9V{ z-RP}RCCeY`ocP2r){i|K6c~N_9S6xM_D<*tft@WTKjnt+bU6E*hE+PLp5bv8r42%5e8HpVW3-OHGf0zXtDavkc+x|S02&oM)I*_YXFA_c&P>Y z%h%I6_Pc8}pivL@**A2%8eF5EkXJ+?)F~nQmTZCmqZZy?By_N)segJn@(712{Q7}n zH82dZUq2GBlj9fPG;fDY8h$`uT{b@8LB~X_pTnlfFFtl#Mx)#g4%92)BadJxg=dmi zG^5=0_pcAGIz~ZR9KGP6&rd#ZGn8gEdm7n2*5e19mO9N0YQ2fx)-ywW{CN~ph@ zqUWcFITgSaz2M&Lq{5D-c3h#+q|2iW`lc%h;>U0+2fxZvb|_z=EPCQm-WYmv%5&uMd@z^d!{t5F@mgj?tOGeH}@;JLIIDoqjFK>s`jbE@ukznM}hFT&m~+kLTGfy zo5b?n7I)U4nVjVP1$2*8ob_3->j?djl(&qsKw-!$_I-wyc4qGf^k^_2X&h+96cecQ!DC z9VrC{O^IJ~IusmBbHemngxerG<$x_q4Y2Q)b1gEIJR>r#sp3^}RdvbR0F~|_?`69s z&4N})oUAFzlV-dHREzT^&>O)vQo~h7j{yZ#PjZA77+zxUU2Z~Ie|-OAfAh?)HaPeq zh%L3{NtIDgT9TUiLHb6KZ@^3QJvuc{BVI4?`w*Pid%dM zmTWD@4*b`k^S`Xtt(W39(9>45uNR>HVB49S-2xD;>Abiimld9i@V1 zzH+h!$PhCCebLiU5P6DcX1sr%TaZ!>CiQ;Vf#xsi^j|Q6|HM*%OGdI3w`5o4kUnUD zA(F^HG7bArhDhj4HFZ!3>G45w=28>8v0Ut%FIh*;_ zeL>Z6yBsfDx1R00@83S|?ofRpC>S<>Eyvxc3{^uhLxV>EBm+@Fs>%1%=Hij?A;5{M z@B^$sW$)DaYJt$!rS-BjF-%``0b*-HQ4T8X&33RT4?A&|!@o4Gt(Yzs)E>Di-HkTz zI4*QuR;bF<7`FSJrfcKKrB;x->ddijZ1>%@ua{_*slCAMkOl|rLK#1X6x<7}$z!^} zDbPDN0nD>0H)5?d_5%hRIUf(eb~?&HFk7YM+_za@vQ9J!#+@4tXQ^W_biCST9bWCV z8-QU9nW0a-+^mRSwAggiU@xL0^`AYX@YWC3hMTK%fkC7f(^J91wiP2g&CO0aTgT`> z^gXqS@PfHN<(NR7VdLOPcgLSdNcGi<=*(pZj6{FL&OH)03s~^ZRvo^Y=!Oo<`Lv)A z-S>|Gd$V{1;qN?Q;Y{c5>_;3grI_jSY2FH10lU-JA;uK}hgIUJr@1xo2fA}GlL_u4 zkFm;)HitIa(6RD`ue(JU#DK(($b$Xw@x5o=Ww3&yktc~ITps{{a0{oHCDV6SV@F*m z>N-F3mSG6@9v}!;!@RvU5@wSB`0k$RAu@lfWZ{u%VXWvTT$58+JXFS>-!=5|J9jq4 z9!KH6lC!KyT;OJ6Lx3QOVJi-+EKexKy&eLBmdAz=UFhX|tzGK*C{e$0V%+dOtp%Kv*=)&}&69p&y-ZDPgK9o zRIY9qjTWB5Q_~7HisCx9n-*5ME;gEX#u94*cdGwG>y(utglL01;^c zv(jwtli6MLL~Gnjlygn;hmaR;7U;1dnKV{z#t!t5__6-7UfR_3sNdKSPa6w~_=Q`< z<4C7#2rr{&A`ya4La;S2XlnEIy`3$aH_P zTRNkfz(|j{LA!(lH8tjG_wkyPo%gW5(ZG{f;nP301U3)k%EP~q4)P_p`>!h*|Bp!j zdm-_kknR9~9UQJ^w+7IDK#)Q(@xX3!Fr}NJ_PJ+NERcb z>7Q7?`y1Bl^7TdfD}&jg?=Vo9s4UcGV`T;Um9e2vod)O&3lRG`5YXg|Y9Z;hl=dZ1 zIqbya#z2Pb`g?$E&{GFO{m9pu^vEYwj4+m<*L#@($LOHf2g&+<(`an&ux%Dv+ReGk ztRP9p8KJPtGV&_bgXDg5-Fvki)6K~ezC`Lzb6u3*BmX>p&OouXGnG_xFkN!s(p7V= zS*?uIYLtL)rf@OB<8GFlC|PsXQ)7P+D_C4lw9#wrpaD>TtneB*_?#>z15C!#d0t(aI%#(IXlQ*$Q~#e{efXvFq|N{ZYK>Lq>Y9{WbETyMh?-&H5k ztpHi;D4Nh8&v=dH9f=y>bgc}__1t1ohbVB@IAI9@#5w}h_=bW=1|;S*$}Z*2SgsU; zHBo|%RFm8In0rMi_+zew~@)$Q`x87F?rLNN)? z@$puHandGplzu#G;|(o6x1OkvT3lLRELhY6gEa~yr5tJzQ*lnDV3U6fO`#B*)Fx4c zRiq?)#7BVP4)_H$9?b?(dK$d`RFQDC{)hCUJ;#-4cR|91F%Lm&%q8GGVDpmvAYy)et zxiuBO=(MRF>`y01D1z+Yz=DF~T#?h3@cBFpnC5v{5%nN#F*gtN9lUYN05ej71n++m z{A_)-#)$tC>fHYhACp!P7y1t>rtf5KYoqX`BK$YX(fLPw=STV&`cjEOCewkWP=?p^ ztIqcY$kzg@u$J~kd+0SJ(bJ>KI2x+c0X%*RY zjgiCH8$Yo*z=#xC$xI!XoRji6)idf@Hq4Y$K~j3Ro@*@LM}I8Eyooo*j<3py&ry2V zM_U^B@KdhBER8nFGn?C*vFAwNxbHx$jiMFS4}J?SVJ1NSsezDOq3)5^Zgi+&L&3-+ z>=*Evm!0w1fa5W5#zC)8mgE$y67@$bZu216cR|>q3`iQzqSn(rLKSD z)u^>S8L2}zGD`ue7Bj~!K{F;krb^^z-hPVo92i@@R>Ixs##y4OBG~Uy)JGkFFEpT) zyRaQ(5te7YSgj%AUypob_6^~zS(+`;!}n`UuM_Lkm0Ka+dSoxPtXm=;fy!`lp7~uW z!};^bGCk8043A)cFg>MKIP5d9JS~+jduL-XW8ueddi0miU(HQdPzgWKSF#-g@x^5} z6`(R%TuLQ(Q)d!Jv$~o=fmF7?(+=Y<5|7& zweSq(;p(Hp5!?os;uf{iyW}~F6+wc>CQXzeQ)I|=DX7_C3*luuu*25z50+Q zg8>5q0~GpChUzgl)uCYq6e2c+TZBX6^+Y?#uYp)OV!xI8OnIz^>0vq{SnvyTakQ~s zkeIHm0YQ+ghU8(gu*}Ye?O{mSJBIRfdr><2c9elN?Zf-cVf0}(usqm0s$&b_LJ%oP zZb(8PDV)Yj#db5p*`-Qbg6)yXGgae;QXwD-DHzx)2*!3mKrwAgf7zdUN0$HoW{-^P z&>91$e8bLq4IHfO74{RVGL7GihebFdC7E2t3c5k0`sB`otVnZ2ZoW>Ma%G~nbzqXy zgo3HuG_3iRJ=>ZnO4Dg~;0P*1hTCsZl12xg)X%4j9jBCzo33O{eothxc30#n0?N8# zo`cnKB9wDu{Wy-#Id`G%>1aZ!ukjAx8KV2hd6?eHvT7@y%h=um`$L2PKS9@4%y}>K z*0@20!G)pF)VW;!S7tYMxTzIk;v~^6`6{VE0S&Xwcm_M8Av7sja^9)h%iYhPO65_B z<_{iS(3KBa(gz8}Ns#IutH0paz@nmIVWSnlZO~#K{`h72@*^tbWfC)tFDMD7gyy{=^n{2-VQg-ntZFx5<;>75+;9e~G_9I$7wN9;d<(Z80sB$zxy$LZ zl}deLv$lwVmN;p7_u1fsSkm1h8%4Iu(Y-PGaz-cxu7t_9UUze^2c)_n^@NNYV(5~b z+3=}2q!~jcyV0CdM;C?W@yra01KCW-Li5RV5rgAo!!vJ~BDw_EmKY5V>ZHs({fl$n zVG5JUTJLuiljR%QPgn`kg(Qt5qk|s+MLET7g{@e`sWc;FluFg(`|4^#6Z(`#a?GV5 zRQ=O84xK~OZ96D6yoM&vFmh2tqaOesf>em$lx>GQA3VL(o&0eduwjc5HS-Pbk-zx(I3b9}4i3~l zm?1AFB0nb`Bfg9{2wc{du)6_wMGUhlD(j*HC@M>z{2V$$pFbg+Z!u7KF&|vE_6VP4 z_{|F3liBwB>l+rtayOVfVqbm9So6dYM!#%>)t$42!T0vdT*(A&VL!@nVeB8$-`lmT zYvL*4S*d6RYUIdQDIi*;rZ7y3iYWA3HQ13F>H+ddZ-?T&X2oS>Q!$;QIN493w`mT1% z^(WhdIn-gEnq!?xcKhVk#gumAUni8H`Gi-DIT?0A=pzZU2N?^=X>tU-{_HbdAArcQ zq;B6k!(s6qVymBZjcT~1M>da)shq4{%DU*Bmrxx={Lv>3u}sJ<;61*lT0q~ciy0N> zLyU3va+d#8XIK^F9cbHboc6a`YU=mMkNB^Qq6hM?vI^RNcQg3kw=CP`^ z>lzd9Y~``w&k*L)BAtlvaJ*@ND7^d-du%If?G$I#W8H-a0e;?GT;z#r6)|Smqs`W* zOwJI_D_mOJZ!Yo*u?n#&wN!@6L+O$Jk@?|hyA(u30IAS;=)+ux0KW$7{H?Ige!-RU zg(6*osaI*4|KypYHfg?ZJ4$!4jDcGiT?(YWaJ^!EUuLZ$aSft)Le(9Qdz485=>$@bl6vENlD$a zYZn)L=W<^$bL`I`i_(I-{cIsgY`2j#g<-sGwRyyK9=_Eq-k7sq+~Jl#d`V&T-*pzX zIOjtdgOLG3s#Md{Sq~?O4^_+%B%30@rvg&~h9(0a0h#SZjXV(z4R*Rfo|Puy7+`|V zH33MKA^-qMb$`hw3u+VelgtYnl>K7^AGd(0RsAZ!VSR1l|2h+7|JOdV{@cDxt6*$u z>}DsY@ANe~%jTap>#V8 zVDVo%Q1rj&K%&2S^`G1s^fgLno)3w8PS}JzNLxwo4D`2O3+@cY3>u&X*bFJ(Zo2fn zb(74fo~y=K;`Wc*L7`r={1}oCvWF&3b#WB$RL;($Y|qP!uW^9S&y>DvX7*Z#Eq(S$ zhJJe(qFDv>AklLyXe8EZ>S(=*QHrHTd8a*t=%6WI@=@?}Fkcey0VFhZiKkIAIJyi} z3rns8+1CPjfVS3}MApwFNvkPiQ9k(06!!?|zr1Y)(SB%>j6tz}Tv}uZo#=u6kVGRy zlzuzWf13nnvu19~Z(x8$7g@|#jnAvEZdjM{)K23<-H3&I!kt?;MTbM>t9zJ;oYHG9 zV7fU#ObU}~h`QFb4Q+ut@R^Ue8(r6{nqY!zCMXg=yXm4eEFhSW!-mUtaV@ls=6~1K zPvzbL4^axYHV@mxmAPpgt3@OBBQ@YpD|y`Xuulb%xbgsY#%q7U-K|YgKMoMZ;JQq) zkAO0X>lQgtOLP7eseWmYyvshyk*Mj^J|VbVb%pi`@VE7c<#I)S7OA~yPcS#{6D31L|@!>#V3 z4aKj(Op>%#8Ecf-;61*buo4k}eb4C0cEHdG6~X&+OA{vmF!&NHC4C2=kPs@A&JBC` z8u$-Wuv;uymw)|H@V`8np!u&&A!GYbOD9TRQW8KO>7%;lri!~#%2UvcU+_WzTmT9n z3xKe6!x^L4a&Me&QtbVUo(YhZ8c*|DAZE!+YAoz#KRr*nPI`ZOd3>)8AqKxgKq1;E zMj}Eo1S5n8737NcrR@tPjpJtsBOj*&l00w>)+(FX@utCCpFc=G15>O?q(#qHUVtmM zgGD1)sDm$8SH&obPFh^aQ>b7x!swevs##miWZYySQ@2oyrg6-uSW2gQajmy@YoqgY zNNGoM*gq6gMVk$0c5(575Na@Xk1ods$0b{EX!V%ee?)V07f`%`+M7oxu3&%ARQ{>0 zp9Zxe-Yec-P~@K2R`R`^=l)FpC?+YpIv=C2SQDa(wVkIX4V6Qe2QQ9^WjI z9tUF!4d;y)pr2m&DahxC5i#EsI^W`zv+G0B`5rvLxIFl6*77==z)xQ{ecKQDRI>>F zEcGt0m*-cQ!ma1&5F8MXP%555OsJHJXmH>yk)z=H%AYY(wYbE~=?`fCWsIcyul@N? z-sF6+UE%=&0U-pDaRFg*0f7+#k%!Ky9H}4eo9sxH|-QcbDMr{iVC-ou28=%$om) zv(94i>7J^3YS(^tRq@5rl7On)`&ueGmT8;GQIiCG5DNLCr1senngrB~Uc-ZlBtXko zvCY>=kT|wDM^mj-KUO(CJ59X;K~bR)fh{E}&M(X_?jsnc=GP~zR6$w@HNxS(E|A~% zX??({7LmZ;Py&4ZeJcM0{IdCbDhIat{L>H3Qq@*RQAd4~vqg#TM(mRgZ$d(HG7Z;? z_(T<|Rf%X>pmFLFA8E*#R%p0QE%5CXw6jHRr4feRrLqY@m;V;yk@R)KB#=Ds8!LkT z{knOMPp40s)0_9*X!QsB%@e|Pxb0+r22}6TO&ahve}Dgc|9BALZej2f7<{UdTfu%0 zXglc^On;05qF*caay_YmZbDF-j!-aSy--FvJwc35v9Ym<_EeFGO2~DFfq6mGF=33+ zgmgp&+rndIzc7KZqOx0CxJ_@Svf7&&{+z0E1zlCD(T|3fBX!5pQN8UXQ%Wg)z^0>a zI1)tdNKLDws+ch0vWj@whXNuTw!7W-rm;ZXraFI)Iv;2N$YMFs{ zmTbf7+&;f4)L?8VS^cnh9URFcs9mWzf7_;~!@_!VRiswUI$G42r|ObX6x>v?5@|)( zsCs@y9!~?$kBBLKTersHclt5JK><7XRl z%k8i#_*++#n!%vw{r0F3>sae(2^cUlnb8JwaBtYgcp^kiRyvY}3iQYU-R}wxv}=J4 z!U)2FIJ!1EVkl61R^wvREruf`Pd80^-Xa7KLtpi(an!=}0CSA6vMY;-P}s?9i@PF@ z6(h*cVK-l#pcH=CSUci?KX85wl9H=twoX){V1xK(BU;VcT2XO?!?lA00iS-(LCiSC z$BkFyN&+tT(z{x7;nlBQqDl=gn5T7&I$yFo#<3d9iaLLlNHYhIGbge1pIt&`p)Ty0a`_8`kk_pd-+%a&h+ElxqsB^Y_!Y!7r)~LozknRXS z1d7s8`Mu-x`{mGRT)g;t_{5j>=~u)KM>}LYWv`C}cJ^Hoe7y$8T!}x;Ia`DLR6Jqh zRLo$foq>x<>H5GOm(YzsHnw4cIKX_xEnG$xdbE{pE9D;bH&u=)0DTr-%7iF4&5YYy z>$7^RU+QiKW8kAiw>kAeHUS6(VqhegJ(_)tQqNp6MgUk&`Eck%iM&8o{`?2V4j!F* zDjCIYq#${?A~#Hhw|sAKetRci&s5qh->_-StI~j}K*o}3j??gi{Ns#fh%;<4Z~Kyn z5r0}Q7D8vh#`Ep)gk5KGJ6EIxh>15c_8zp!V^3#D1noT;?GE!O-_d1sZ*wo{cha?k zSl_TE^}=N}eP%5ces%gsu4DiAu!GBb4DmE!6CB|HBb-4>acxeTPaadkivw2#hcvkS zAI&!a1(gQNQRoLh8X!zla~$$lyrS0;hT6`2mhbLI1KM<}ky5gDFJ68pKl*AXtYaVs zQ2gT>M$Z5FuoQJSGJS$h?5xlOv_?ST-iR(zWh3{pTBsR9T? z%!=WPhPtMDd9zd-BC_XKeCqVILOwQn;#izM@?!M%nU%O)4o?>V&UR3)C#>BuJVYx$R-iyF5B3mWActCFRg&0 z(hd%87T-emTxoQ=s?#xyh;LL*<6DJxkxiR9VA_$e=jVE*!O$Fj>$#rO0$Ma)Y&0)a zD?QG*+Bd~YCeo84I_zFsaZbAR+95Y)JKzlAWd)o2;Anb!nHVIbbpV^q6=Eb~=ERm7 zH|WA+fEnf67lPoM_l)~jJ%!CwdhGlJ7L)Hh@$nL~HdOS=jp9Ed>%3!)P(%jb4yi?d zHro(|+mx|rKmm9@GO~-d_;C7Nzu1I573xw-ylr|h@CVIhfASSHc^Qo@Xc6NIoTK;) zx(G2Q8)yJiUG5)Ko#_9`dZfQC`cJ7LC{9|sR{=3-(#FczYEG^4VnL`7!Md+9AGWmo z>1%jy`-*#*`YdS?hthijjvyW7q0*&zSOP0Cf0rnE=2ixa6PMjZ%;bmpni4~;-pF9h zzb^NfB?Kq^i84fqX(a)NL&ge&q`}TId0nxz$& zMpB|1-y+^mQF7K}qg65hr8W;Lj571wt16H>R9iglI%(!T)ximXUYDcL@3}uw--zs% z!D3$S3s-P#H#3aHgZm7G9d3+LyskvFbRbr3QOLNn8J2C1xB)l%>|TC01T8apca70h zyl5X=bL?K{k1Nflw5GrBcJ4hTck{`O#Hud@n?oi$FN+~uMhW1zqTU&G*Sy3C1B{Z0 zr4@{PZpnJSQZ6bSFv++Cs-!vlzb!dpyzY(g%`_Kc4wS$v_I!%tl^Q}!8^m?IS~cTU zFX=Gagg$M7J^QBADg5*?EyH3wr5{F9C2y7sr7+%ryERgL>hSmF7Nt|aju+6{c7L?? zr~jq3g|_ zrPCWG6|;~Ba>sR&XiHG<24aBa!v@v0vP}CY*ErkuMAO}G0bn@9oR}%(!z0Glkb=~b zMrce3i}zr?Bw)uO!hzX8;x;ub35fbAZr4z-y7dW!JiAvnF=`}T(>f5se$z2927*M! zK!Z;G(V%~rOz{s4_d8VowL$+D#{c-=KZSFavhH8En0&JcMeVv4g5@CLFrjB^?f!@a zgxJELjg+*6pv5+dPE2%lnlenKkL9N~x+26#KmS$UljujfHAR6b3*YUHt@1o%^LaU5 z09WO9e$eP47LP0FGjv?tZW&kHs$ng(*XtIAvy`#e1H58Asm*%d+ zu@0w<&)X=jri2I{+wpXIHuU*E5?kKdS>blC#k`767xR=d8IOIFvro3vzx8gvS1}_v zQz~!Q#FIxy&?>cW!Ge503Ws!STKp|uR5UvBi4MR*5&e@VyLrjgC%?kg21~?t#e66S zl~t=<32FD;InD1O@Qj5u_{yy2;ih=qS6b)Etr-hF_$Gbp{0pZn3EF@q_AzQDNPi$S z+f{=sG~4mjumxEWRJFqG2g#8Sv-?b9<8D)<1dOhM0Nr}$aXdjU=}FeCKok*J6)3vh zP+OP?Om(X{3NPd@@QkAyv9EypTg(CV8$RZ}m?4Tw2oIPBy-Vz)Im2s4^um@w38)&G zRT@Tn1P;n=32Xtz;ZR?G`pn1Q2tdQnHXQ`$fY^W3LH#cZ2|-(re{!$?sDI_6?amAz zDTV!~{DYT+kV7%SKKmihopZyv+5oTI#I6Mz!_b8U=>pyqGY%uMh0C>8ohJDXo;z<^ z2=phbKSbA%84HVPiHV8H4VXb86B{xH_FlG%32}ylM|FGNAVLli5`f_ zTdpKCdhX4z3D@Kw_aNRw3+L9^BdZ$E>^6CpYeLe836`aCVEavKoyh^W_@WdM0V?+Z zZRtO^bhG07gDvk+`FH!2``q&ZF2xj)am=aGRItO$F3aqA(m&;bMk5++s@B;a?eh{I zo~*grd<|iG=PRDRm%-T>Vgn=*?AOn%%3f($bD{*ZQ}CD)-wsDJk_{ieux!RQofc#< zOb@qs6;)p)$Xijg%T$A`MV^2APURo7%UBWb@(wkG%qLz$YXtj?seetz`yDS1qo$l{ zm*dEfxD$&(?)p=<`-)2bR~L2c(*%4$sW+9iw6LzESPA0Wz_02&j8>Gg>}<2LzMy{r z0}=X|b9dm$qVmU+ql~KaX{Ir+Jcu3aRtn8r78sZ=a8Xu1gNp zZ>#pb(u+0*N-+Yksa)2{-)C}G?}i=_K;@M%p6zs|74-!v+fb`R zB+sLcHn+Q(GEKoH$7P%@3x2plR%(L^e;YlWf!< z@%=1_RmrIk3G;IyUis8uf#V|9zZFGh(bQg?f`aHmsCi9~I zG+#L?c%IO)RK54~n`a3UQek=q`q=kBQiy+0^jg~)TQSJl$pBx^Ifsi*3_2RT+tS{HeMWr`Lu{mMS74YvWz{?a{ zxP8O@lJ{HymjL4PS2?d(p~zg)hi+`RGXe<(T(h7xXoezgGZm^L4& zX`FH7T34?T9%dKQah-6am>uj}37nWfRg=gey7fgHze%)-NkffhoC4l8WpO)fiPdKI zOUBbe#nn>nsMAlxmp%vRy2O>e40vb0z7qi=IzF4MlY$Zcf;|pIKmJsTHzy@z;Tb*f zySdt`p@^my2#ha)&%gf|9RD6V|NaRq(S240NXQMCyNZb!{oxf$u-jM`DTDGW|P^-H5$6FdiO^R=)8 z;b?(}EHy}sz0%s%in5;_j(gi$i&dtdoBhrjd(qmYK5X2K-HTO5I3f6GvBxYWn0bP7 z5CRTuu~c#T&bq12((EQNc!`%AN8ZXEz$3+kva-~0#Od#2eP1tGe`IKU#2J0Ch-;8w zp5{}Xt2|iFdx`(#oEcEM1B=N$v6CAO zd-&4<$;-t%%obWnqv!VW+CC;rGKj_X+Je5rPsed_L}@36c7@0~BJg^sZk}Yofh3u! z?ntBkL}SVM)!j`z#u&TQGj5jZlporOgonI{eZNv>#F0Cz=8O>)-(K_If5haba%9GgK_PyF=i+c|zQcsb}$J*7%=gn@XdvNe=e2^Pl zc`it0?WAWl)hOoG;mZ+LU`zwAVDT4% z?$q+Amdt zn{rMhPR%w$o6yNytA3P9iZnRXwk0`*E5MDuFe9{pq7gf1Mo`@2r!&ABhTl(C3)Gez zFK4qZ9^E>1bbPffa%@9>y}V)*)aUQS7Lmq)Yos>m%pu&Oyvv_UD9OV99<~JiPMBTz zW4YYBlvrA=fY*SmXzFg38ZFS)-OH{JLT+Z}IUI+Yo zTcgkUGWdPl#~*3&y6T83aD|+mSdmhGM5zrXS(U(0anuZi@JyjN+hLPLFI zHhK534p&1kQq}FEY0*KYr9!2>K_C>m>)HR1oT#W*NX+^@O2u;Qe=?*ZJiH#`cwGsFT?GCVKzu@tHA!Yr7 z)BTl||Mm$4UiCPD{eb`F+J{z^(JFye1`w)_arf0Q-cLp!MrzN$0RH2oB4BzT1Wb%Z z0>%t5oALuu@Z8ZGzM$*OEPQV0!G(2tU>6+a>cb5N?w))rWd9c|tSPX{* z2%0%T+7`b?UuV^luwYn?{#|EPifuAbD7PS~V8k0vEe1}QXvJ|;+AD~I2tk{`PXrEX zs=FQg=RaF?oH$4~ir7YPpW0M*jl!n(e6R5d(czJ=Lk>5wZdYVOrVGv247oGK!6tN} z0LDZr2#_D=hKeUr!SiG={Y9J`qH?9xwugeeyF^q-{G>0ZBkJs*(k(*e+ZA>R(cuKG zC9YA2J$EM$L&;ADa?Ek0B@y|36Va);MGzAPy3|xLG%edH;FTreoE%F80n9|IqWoo5 zsD{)iXmT?&9R#Wk%UYgq+}oGW=Qk71YLV3~dq>oc{dlU1qdYJoVd2wz5J67(OU6d& zV;g_Lc{4F=IxV2+GVqUmi$edG^hNqtQu`~P{X=c}ThR~HHW%qMRcN2Psi0T3C60oG zV|-Gv^;i1DM1IY_hIcHqWYeS_n3Km(DMApbsPE1+EyM~O5VC!-CCaDVMMxNCd40yU z@d%VQn{nT~9;DcP@U$0*oM)sD0xqAZ@n-^WMvJ6LRj^m@F7$8lFGbGm!a@_Zh_hGg z;etL;MI|W{5=;nZl#{YZ&XsP-%?B%1E#dqo6p)vPafa;43Xo`tmV*m8jGwC9g5YLd z75NdYJ%cTn5v()s+@s2|x9>zJfA9aS)sdrNYOii>3x z!?s4-<9(V@<*XHDw!q73>dV%qCez%j@kQz5H_?@=(nr@x`E=g#%E2DzWc6`p>I~=A z$h3T>ailn8zf@Oo^-P1+8+5F;m;?e3b^z#m7D`eDsY$skjt!Ni> zx4+6QbYRlWMZN^vC$(UHhwp+_*&$1>2{x-p*hT|%kgxG5b>_Kk(b0B@6HuKfs#Mw( zY+>w$SacCHg7>e4&S-pZY2neKB>C{E>)iMe^nGxd&Yj8HI~jLUXn;epQg)2^o3c^Sr0}+gZ?HQ}gn4gCc z02BOIqv)1zM&OV^MEcAUujPH@$(@An(LcqNUm(S>|+YZdHndnmBZ^3oZ45 zs0&Qc_&-Zg_L(#Wk$Dg&jJQ^kvi7O$$Y$oGHT1oJ*hS(m? zv+-!X^a@Id8E-2Wt90O+Illd%XUDt7AKv9Z>WhHTcd;kI_kAm#;X#J_RZ|jN3Mfhv~)PP5+1ZVV!vz^w#2i&5)k04026Fo z3`44(G6eu#Bc9d4ora^@5wkSs`(YN2r&uXHyY6Fo&S^OAno+c)iepy%8PNakkds+_ z@6&pARwnn#s1#^M=Z87YN|jd>CFhVXf|6h|JZlrKhxMv#7f0I=yX20-l|wN{obN}< zh0Pi%uJF`GSuc`CGJ;ILoM?Wlo`{v-V1FvOMe>BDXBY?%3efM;lCYWDkKN zqJf`k{Rt|(?h0{Yd=VH{SA?E5?()rsI5-K&Zqh!q^5KvKT_N#u=pvV9!7^r@FR23h z8w5EYCTjX?C#Lrgp%_`gKW|d0O-a>;p$ormUi#fS?Z`NE$Lc)Qnk}ANmBacRRG}BO z-1{zjsW|mdbu!6qB+HZF1%EaPLw)E3q~WKgIunysI=14<`KuWR8xuH|no(z1Sne}8 znvJfum|Oa=Cw*yWynPF}$eDS`a|UF3tJwQ&EbgKN$61-NDOn( zI6&f<2psC&!IEBByu{~IFMhjjFRW07Q%m_P-FhNBnB4(Cn%N&qXW(Yue>WiX_i-TT z=xk{Qq|W|(u^6Q^3LNc*%9l{+V80q1m>hpAD*bWLqs8(FB%HcYq9Pxr6smMh_Ou)C zc)7cl<}PQk#(|Xj3OHGHTQ2@u0kkKAh2>%0$vfKlhtK;pS{HjZT8-W(U14EiWnt}r zN|K0h|7UJTN*WCXg`Z3T9^er$_=iK~w)hVKYXiydbpH^DY@`0KVXC0$pCOuRtaA(6 zR!W%0GVabHeTQvwAhUgN#hEYfG3(4;@r0LfA51KMBzG=mXz`d@q&2hIj^dNgxQU7! z!_MwY@|b5wM>kz$vh3=Qd>VKL{0yK>zGy{p6F$fs@SyD|Z&J!#QqQBol+witE!fSc z$ZzgAP!<({PZ&ZPArX$_Awa=`Ci~RWv4PW1Ns>hiQo#BStqo&R`EI;Y?k+YhIwpiyMzIZiyO|$GPHd*t^9VD4K++z43-9EAGVBoKiDPe zbePSNLU`4(kg{-!CX!Ip0g5i@>Zn-H*JOq?3y)Ub`Tkwq{62-jr_aJD>xGdw&kG{P z_cuFZSuGU#4s@@~Kaywvql^8Wo&E1F<`Xw5)%yuC1cIAKEphYfFqJ z#Vfx8$W16Q4W?uh87+-I-jJ82nx@uck87_V$Yq3d&Pr_)-acT}sqHBB(*%2*Fc8VJ zok-C?1`q<`g@cddR%DIN$;OA;Nunuw2&|=(7IzM{7!%V4DJMK1szMoBR*GaiR?oy} zj{CDY;Yhnnz;Co#`1I$=zUE;%%Znk;3W!duX>XA^8xLI!uZJ0JY~h`+K~WqcWXiQ4 zKpHMsCLBjvrFK8bV~O5XNleV~p-A5T>}--!;VVroK- z)L@ZeXl040fns@Dh7x@katWK7(m>Lqe{MxN$#16Fd_ioNd8^BjdO=c$$N@{)(yy`M z)A~9#@xu-lb-SF6twIqz$==Da;9TcxTbuOp%16+6gjcmOSb2SA< z%7S`=g57GkhNP^4xt2;t*uTQv2};I1q7PZC*Us1ugD~iQ8)(?AGnYfsDTCdno$l6|0!?BLg9xK!EtlJOE-X zH?LFUyo2|b;Re6*8ma;f$Nopd{XrJ<*QmFDX}EtRS06=LX<&f*l*<+{HQm+EYYBX+ zQDZvp4D(7R>L^`T;K-$I* z^X}V3KVzCiTzs}mqPqiHARvj*nQnb+BB^F~yz=K2vHFv4S(JDaybzi8sv?DN1h?IL z&g%Qv9-XyN0o)YAY&OK<6#OB(WCd^-XX6M-@Oc=cjIs=c5x#M1w>v|l6gjt{=^0!p z1%L&&>Ps!&8ThH=5z-MRu+0=<>Z0?NS@Hw~u>61;Ubvs2Sj7Ju>0{ueZaD!B%lAja z{-GECpA7q7qA`jIrsor)=(`0gHcq!RWhiVDl?b9Bl!k^@r2`5Fz2u@bNNai!3{VW=p3j~DW;~Ycn@i%)|F9_?iQ|= ziI4S!TWIFr;=;k}82PuJa<+tPYOSnZcG4K3wY(XZ?_2a(+5O#yr0~KkReIp#WF{|I zdRn5Cd83xz5<{o*A1}HtKKLt}EZ;)oA*LU5f?>cLw1-rY1^V_*d;R`877!wUP9Ut& z2Y#V{Pm^>10r>o9w^uTCwR8gZP5<*(%KCfnbP+~VVvrFU*he%ln{tKAs(xuY!kJyS4|3prbI~za@gd%2A=h? z*tQVuyJ$0{k%~U|1c=;Ta0ASnq$SKideieV+MKfUY+ITxze&yd=h>Jz(|XW2IWd3n zVNH@VBd;$Q*5P*Jnw+|F8~A7$OO!Y*8&{569O#lDk0tW+iQy!V?hIyM8ciC-xXpVZ z)vd)f2mUkfDZTDyI=OYbo4tK(XzSh~i;mOGzKms7S{pyzKGq9M+c4a*upsAS-ITMf z2{=co3;QeW$(c-siN3}Ur>ZOm+sSz5v|qi%9#v|M8)ZIx!phS##T;chFJA=atJO|^ zwfh1Fn`b40%U3++GhW2clva#JZOiIgaxYiarfT=A)xvwqaM0*b%CB29S>y$0sbp5Yd6tx%1lHnL{!F>pV`7Ru*qo4+f< zu4nfvSm{qG0$AGV&_c*xk**cF2>K4`b$!bVxLumJ3xREvQbYm{taKHRl}-t|yWE{> z;an*gEh;z6S4f{zD|-aCGzX&58ay0AaD#l9_nt}i;;7!WK7XfIt&Wj6VB)?E{CtHf z$y+e1eExv@{9C2*b#t7H8Hg3t{@8jg`G1Ve-+kA@b~g5gKy+dE_qOXSRcU8zRm?Z~ zYQJGpI9AeVo2bggPsl>}Hp_tx>|{QOM5SalvO*OosWYW05Qd?}wyQ0Q3w+tm#TmAX zhqZHqwZ%9m(?K*3^tvq$Cqh?0fU}`;BbYDWAABF4FJARmA0Kn<2tZT&=s3t%IWNS< zqR2Rs!AZe&Fzki9GCi{6=p((ofi3nvwk-zf5W7b`|_OQ=*!I2JTjW^#?c zB=iC!nIWh-DW$t?5BY@D5FtHLgcGvL7!xNbim{($aHj#KgZPpfaa;VPsFIoD=s`YU z9YTkljW1pWCU7Yr?*tHSkXim_kf6zHSH{(d3D=JW&(1&!SdJP#GYE`+|J{&zLiI>iSs8!%CU1iZX-y%ICSjAk~*Y z2CFYok=|@B0(+y4$CNtFt%S%ercPH{anhwCz?_fIl?6{O##-T`sGbBMG_XibDaw3v z8m$HhSMzDEI3y$9Q%T5+FzJPb2{J47PoGBRE2Z{WP77W4sg#$rJ|hiYzdyJ3JJy?d zw_{Ld8YSyz4Tm#R2BEr6ekTF1|CX94|#%yBMa_!!n!3{3?$Dz!v!^;koYzPH5vta zx*_dHko9A~Q9n`F-J-4!EYr`S4#FlOfZyk`*Wg%f=*a-3ERJpX-Wz&fd3e#q`}JyJ z1|qJQ&_JLrn~Bg&pqTwR!x4jz(t0TKp_DaA`tSzfWC+C>Hj(AFL1lJGGJ7aeyZNYh zic@>dIRipCLoQ0;eEU6K{4n48K%6!~670h~9Ma&7;)0kaiee2ENi{)6t-;k(rR>HR zh7$;;lnZ)SK^ifAz*-KaU#~fgB3)jCNZ4qvc9NHqHo!)7qtTNSWSOaqAUJiPq=@u zF_N}scK_m}Q$`U)d?OE(S){#2oC_r;mO{qIK}Gtg2sWMgRdpbrmVUm5){to_sy#tM z?hU*;`3n(7Icj&n-je>Vjc1!z=Xv(|+0pCc^NQOCjw{kg+i2)$FWdxN z1kNH(d`B6lF?-(aRGY8C<=7yc)p_`M;X3n(LMafy+YGoCL_x%9sGb&7K`;!o)_h~c z@7%Tp`h!qL;kQRE0r+?YEk!%@RVSFeaCkcshb=KJ(St3+AA*}Sylr(+gW}NS1|*~> zU72?PYlW`gBZ;nibm{@^8q6{a^^q#ItY_Ra%dud`?~p^yg`^yvLd6g6{s?$M2lYXb zXTQXzuf11XBKy}|^dyAbO_VVr7?^Jd?z66zuG>sUt_srK!wuFJ(!#T=(cq0H#+3R=P40lVI5zJZd4ee(_V+I z%_MsnIuc^Bux#E;o3E(sU@iK_s6QF;lC3VATD14fH*6B`myu+W#BDtMz0*82R^hIl zMl~ZdFQ_m;c5KSvnT1Sz*E%8Z(S8A6;f$R`cVy>SHV^m2X5{Ldy$rYV!SF+ZVNKJ3 zVd(3HshLEk&I^_Na(Pc8mHAIoO#bl{i`s~-d2MoL1qG{n*ss-y~P|`dI=0++F zr%zF`>3bia5RASyKscwy-{fQpA_WTWWsKO(o^w|pycG)<+lWL65d#xE)CX@5gOOMGNrjuXXjl<3N1kil1W z4`Ah`?H;5iWmo9p$?r8`3g2YtSk2?@&5S%6MB0Ly20c~C%T4~#UUD9Hu14m0jqq2^ zyZs8=3Ic=}^pJl7{{sKZ0F*Ixw=}jhcQmxOur&TJ6~I4Q#21d+K5J@e2`M0u?;7bN zN)ZalX9P=4?X0??3DK9Nes zK5QdV64r#u%&|=;z2ZwG<0EAgDM=-mOCWR-?_3EX;0pHCPGu5?C)u4$#@k=oLT zo&qmp7`Io@Mb<7;s=oYQR5I?cn4kx&;gtVah^pQw zs3p@OuPX1oXc1D79K)@PX?jJJhucIZw#0n9i$U2|fKYl7LA!d_9pBFm^uX+K$kn5^ zCd{m*fVU|WUlaMj`&or>l=GpYFG5AGRT%m=tT-#TFmbzinea(b!C92-(m1)Z*i3~M z)5y28ol})EB_b3BEUM3eW8xry2g)MjxWQE@zjpB3xl=P^Cb+#_2xn@YwLp@S%9@>S>JMbGNk9So_cy^z|~ny`nI zX-Pt0VEQTyv!)KZ&c_%A1Fae+Q40fn0y5%RZCTFvR0KTq(@Aj_4EaSiCUz~8_HVq?zuli8{HMapA#Yr-^L7*c8t4g7BdQG zs%ol_h>k05NK8{ph9q7rvQ>kg`pb!^W&#!r>>qZDVEWW8HQ424#77`vaD&sbo#m<4 zj}^$D>!5pAa~XlkOV5A%yJvN1oM={zJIT-iv;k#byZ`-P@lUAt7*M#PV#8G2iRg)?M{CCMqs0 zrx6l0bKRlr@PFTlG#r0l=>?uzdVh45KM9Ke#yF$H4(Y=brHd4irQQmd|VP4^E7WaLS5ESK(M9RiaWU(xardl5;57-Jp+mw4qI zHKi3LtooKxtjE(C*AlZ?N?#_-Y?ojHrQR5 z|CNg$Hj^bQfl)CBeEwgExPQp^|5el^sYuHMg$ZxxjAv7>?l2Ofh?i`MJy7|?dqje= zpJCEJ$xQuh$V!GaElO*(@&C~q73S59iKdJ(kOaH%hJVrus;C{hEV-ZQG`YhQli~E^ z_17&{7p)pADchJu>Q8&+-ppVg?0vS?D8k4aMasjdd^jIPZoN>!{;#B0m_mmsCX5hp z2hKYEWO%bJCB2Ee5MnN?J*m+vsZ+II4e=r{XKDjS0X737+_^EBPmy6`RjQ3+@q4J_ zgG;(R6iVaAvRe+tsW3*_5Vu&pv2pxYrBHgzKp~8!p;xj!-}Nbn+~DXU+K$J-U3igd zlOs>la5@S*?2d&olfM1<61=;Sl~KDg`hz_8v1t+NSjFd! z*q};Wwh8v(SJ52PGB$GDBo=}$aTqr772rjeQczA;0FD7R?-*~FfwPtj#CC|_bzdHp-Te^(Ty z5Qf8pL7!{U62|DI!Bjdn`vqb{l=u?9?p_j%pT3D?#Gp@ti-6Zz`UN;l61fmNuNj;) zD2~(v2HMjw`OvR51gm0thfQ+cqr~M_@oINPOaS_hP{cPKtOP}?KodIBc~Y>*O5iv1 z{5qx`69!BaaDPb5DuP9lqM}HJrW70UB=?(QxHZGQpaLfwY{Q0<9w#8Y!G8%xnxyUjL@8-G z!*bv|;bwOK^7MR%^A(BKUdFzVlboxF%ZwA>iFYe?&mCJB+;%W`tBsh$C^VNXm@?gX z(;_SnCX5qvdAp=fR&;r%WPlFu^-yiMQw}_yTg*Xy5Y+h?Q#d6$q@~yx_d7R!p70>* z`C+O!g0OO(o24>ppdl=Ud56YEq8a1xlw;WhWU>t{#0-kxNt|IIpelu>uZfYP&=AcP zZuYLQcF*jFeOQwO&yl9i;4%4x){Ls;J)Te>!f$Wa+qkwSgX(&h-+S6;W#WK#kOO8$ zSu?6JfrSp_TERz^+-pJTDLs$H18GK+Qze`@UD`wO*5bPCgQ`lAb0US$0=)#d{nGfz zFpKV3Ym+P+Re$ULL-QNa=NDTF+RK@-eo z{jszUt;~`7*DB-NiIGb#0+)S3wMj@GzN@f2MXUTD`CS`_-q9edZh`7JG)SlP&`q^x zu$5%L6NA(yMbu+;L7Fgh#OaUm+=nL4Vo&h)XDm#B0Fj@cL6EA4r$un$>EBX zZ_f&B3D`zyzugh!XA_}Gioj2IU4E<&w=((lkq!+{LgXQjAiva~7O5#^%9l89Dv|vS zsZo5hI??&-@11iGDyDlF zQAb`7x5)bJRP;0^$bQNG6sL{;iy()3@H`?2)}g*6_GYRM2~?66CnyQ6z{~GC4#mFW zVjCDrkbk6#|1bmh--ME=yRoVLUvqH(mQ$mYZGhdQh`!0_RoTTIP}|be!U`8shN391 z3IW|>C<);ZP+>>KCoXi-^X;Q+P0KlZDf1TF2$$km=9WmH$+z?#W@Z;lY361RzOQd@ zC|$I0F1NTTx0(XPTZT7V^hiaNS=YoCOj93TmKCRgZH& zc)w6?6TkJm|04ZW$q~IeqCuK)(Wwrc9jGncZ^b-Y81e|H@5C9H7AF(VYR&n^Uw9

    zwpJRIU?89g!uTsZC|zY&IYbpo4x3>-Ro~`sb`xyIAlFxVmiTjxG1~2a_elFKTp6@T zQhb=coCa*>q2_-05e_q=YHggAJ9V^<*uY%?nao6;7JjsdowqF*9m7LnV>Dt$+jgL0 z;)HG4Te=mNj8&Yn#5>pQT|-)|Cc!p(h&&H6&VA0SCIj*O_~3 zKV7y^*j0#c?pQ8-NRO%C$Tr%M&flOy8RZH#P97~a5sZQc-kdoqNGfyo+XucJ()pU9 zDoW(rcjGrlL526HXEzd}OB7pS_PxXQ9nYa0$oP%L{<3m-bT);f@41Us@#YnLt?>rE z{j%a9u8JZ!AMdBSl1HVDR`xnh@c7@xQqYy2>F3cS*#DME11=;$xq;?60Y3j8I{t4m z>EA%(zcf*nx~4KJa7YlgnMJDQr*1f7oo#kNzz#N?1*#?pgcvA{znP^Owl!W+ZM!+K z8B2r}vaAvNb!>=AS;dI7genL!O|l15m;j;tK2eNh+6Yflpm(!51S*87HjBTh zs#E8R&(r*u4SmQOqyXk8lMd<~HmqWk4*DH9EV~g-x}C_#dgh5?PKF)-$Y#?Hk{w+v z4B$G`PekdwLxS~?t&5a>Ha&5)m?qCFtiQSHCK`TEr`$!RPKru*oO&chGA&R4U2Zs8`TxI&pPg4;ssIQY6W>E7OwcH zz^?pM{%O-xI_O!d7ppdC!-s8M$EMr}mjH{?YLNO}uu&h5VA|i)h!B%qhHlYZWLt59 zq#NCQu8hoCn!`vI$$x(012fxbD0zc{vJs()2&)!^Sxp1$ikV3=qm6WwWv6eO#~0T1 z@Aw(0RDCvD2BVvc92rGd_~*Q0QD3C&#%?kv-4haHEXCR zOqj3a`c0XL=KmjQ?-<|d+N_Cor-P1d|6|*>ZQHh!j&0kvZQHi(bdnAyYt7zs=A8Y` z+VA|%$LDK3byw9@byZ!ECc;uggI<47W-Dq+pW@Sd*(-Izg&I^{bFBGCSH?`5$E{pH8lmY;!*N2sZMsfd{FSX*3G!_$bylp7474 zl`frB^ERJ>>YHcd6jfR?p-F!EJlF58BwCX*4Zkd6a9M-2Gv0dYC>|O_w?7}F1;!^t z^E@yJVZ@1I#Z@VY9*g}ty7a{DERZ@a^(}oJy7lj4qATn_hWp5-z%1IRl<7EsBZ#it z;TaB%GlXL^>?vEt)O_y7;1g7e)i)~CpUVU^eh@;x)pr}e1(`Sux`o!iV8qXrsuvL$ z2O6SK7d+NhfS_0mNdWwu)n3HxFe^eU4cBc+Wy->4H~Eg&gsI zO9wvUB9TSthcC`ZJ=ipQiwBC=dHfEyS%cUMO+|d&nIoX1+*pmSinS|T16sTHI1;4w z!&a(*A_o|2wKn&6vZQvI;fa*P<6HD99>A`?_9a0X6`J6%^6EP^-C#Gxz~*QIj%W9- zdq_PIHgtNh(e_*`17r_L$B3Zx!N9!1S$0kc0)tRn|;tIf@&psSq^Mhso?L=nGT$zbiGMKEA10oiDfFFTPK$)q-M|4Dc0Ig|GE51f;(H#B_?}a)Xs-2s8=p z`ekrYpZ|>D^_#$jk^jf3XApT6olIgYfht#67#3}Aw~}H60B;v;0$s=mrZR=8pssNR zf6{F36e@`xj60*BIYWfW0bg1vEW>WXBw@72m#*Sy8}?IE{`*xP0sJ5S&t}qhaG?)E z)TFo$euh?sxOddk6NFLD6W8fLMg9j8nB>6b$b!KmJ2;}ZKtP1#R~yC)jq z7^ZOys$;j)ZNi|di-+Y~m2HeZ&mgUT-xM4;D8&1GJy_tunmeYAAWkqcMFcTYYuNry zb_UaJ7U!X+c89D0L@?sHn|gJ!CbjA5K-Q#y7DiV+6?!A}<;bzS@~i2x=c{>32(xRT z5UGO{NUF(FliPe?xx+bym3REZ(oVeDvx2cE$nwou?Ea^kW*!MmV`0G|O|RmL+^}!& zAF!9}O?MgE(*c8CNn_adzm41;agx6IWkURatO@=dNbs+X{2vPgnF>}Ge?bCfEBnbq zt|j$yt3^iU))g#hKT)NHJUB4`qY&w{k;Cdh<#N02D)1}M+kp=prRfidmrdNlDJ}Ux zUHmaS4-SUu`;CcL<+c`P^02m{1(D2Kp3hM+}qG=w>QsKc8-0 zQY2%)*O@)bnPF~bdl`0lF5Q%EBHVuQNQzmN_Nw{X!ostSU9H{3_cC;Orqht2of4uB zudO=ptn6CQ&Qlmp3C=`rvRTCqcdg^jP|-39#mFaQCo$&&QwGxmGvGgjrp+u#7Aj;2 zkQa8i=yN{O`)=p5s$plgK-zz{VFK`31n{9;ie$MwW)h{dXZF2QeXO>JnEO9I=`gQS zk1HU-__^E+LbD*)bu$Poz|4;bWJY0{6&FuiR*KH2PC{qWe_t~}OQsO}S#!Bn#TmsQ z=T%!r)aWK~^KsyZ>qRaRNt zKO8grFOlGj&*W&PZ)x-|OV~*@NLR&0_z#)7b{7W+H$uV~WT5Xr0fx!EeGc%1z%!(R zgrb_V=f+ROl$Or(o9Utzm5qx{kA;g(5RH|;g%(wF&*IRw0ngqRR*Ox_<&Ea&`H#M9 zmlLfl5~|EG2j?c3+(%i%6B%p_pA&2(ZU@^g8_+r8ln#3+B+hKL>!Gk2`lSk3#XHbK z5psgQ00?9{W%zw0xq_d`fGD{ES0PDR!CC+@xqcj=h*ZA}AdXBY1wW5WCjf60mQosG zFQiD?SNSs=rhEOcThY4j1|O>qNcp@2M$pZ*j9zfwa5*c zUL6q><^9qCX^9&BE$K|(8Y-3?#_t(E`lJ-mFGL<@ixUr-;u$&0lH!>@>XP#IYg8uX zEn<|3T$47%Gjo(B)iZe%Rtd`=GF7uepL0!7vZqjzT0w4NNoGJL#ZrY1T*vT^h&Y+H zHDeT6(wX)Td^||egCfm? z-C@b9$w4$vHq^prbLyhp%uyMpHyjrRw}8=o$t>MF!gw9JKaD{ww;e$|yL`|#yJXNl zL+_F}x^>Z`-q1Gt%@|v~6c}5B;}{=)+osPH5*@>7+rwNK+ymE)Z_v}`&p$mF->_lL zp26H1-w>nCo>8smZGW}n66Ee8ZshJNa8~SYb0!gjf7gfiYZJ^`6hvubik0&08>)BC zvdvLJgt%G=Ky)$VA7n@y84ORGF=fyPPQ@4Alaq?*b4Wv*+~mAE+IN;p*ddaV9I8x9 z88^g<|I;Fa2x*F|kFPy50JvBTKkq zG|uGZTb)?cc*Fh}tKpfGce9^I;nJm)#CUQGU8MN6+a;_F5K>U!TLRjz2phQ*0pzJ23cO#12ioEX3X6ybyECGzYJGz)r%)HCmUtQz_necO{7H?Kd2OGPaI9MON zyfzFc#%Hjgt(Z_t0sR}M7V`x5gj3pxXxjr~y_apGJ2{u~u|01D6H9`Ajsh%ibp355 z%S_dgL;LtG*H(*p8cnfX$FZ4>pPkex{jN3w*b zZHW!G#oBFcEkZ2jdm6uYATnL@MSwD$dgt60r63<#KZt#28MDWnrc`|2J_OndMGE=G zor-4gVKIFWu7CvxjjGY5grMdK+5bapE>tH&_} zs~_9$j*1a_c;>SNLaI*}( z9%AwX#Pg%eu9>-kjOMTx@xBg?iCgiEI#yuc+EMJF&n1RSZ!>zQmRpd{HBgOBGiwzW zOj?IG*%fnjrNUgLY++pHjLxFSzeE&;91oD)>22!vTiwpEd6o^Vr%&k9&V@X7_sTXh z=6N~Q^o2Ox#aakTOdx0>h%4R6vKj_FxQfMFXH=fUvnN4L!=R^2$b)f03a3lZg2l@M zeaPWIvy2Gp6mA*5K)kGtKkYnhF2K1;(Hp^Q!C;yby&|H#DjLr7@RC*AUiYG(0+sLd z+>Y$)bfy9AdCBh}mElaUs5LNa}_d z^a>}J*T^4#b2fOa(mr@KRZ(I*u6xR1gN!T)Zpdh*FdDq*uhi9GsD4QqpK>>QRhtvT zCM9-9V6$LiT*&`sL5EYU%f8g>|64UgVe}Z&vevqz{F#CJ_juS0H4Mtzp+`;09;!`IqwB&-EJ-bteY<214>2(v*T6(OyxI zd8C8UN7Ws~D`ae5ySNCaf)vsP(!3TDJIQQP803m1AO!U|WVN?f4@ephy<)i?NeH+6 zcj_?PruJTwdq&6nI?QxI*e2t68WKd%M?K&1q@LrSKd#PmU7h=m9@)pxDUgx0UU4d# z*`1U9*{x+*nAh6s+A-?e2?J#Mi6v_}xgc8ws{tcA{$?#nk6zerPwo{1kq77LqutFh zJ}&VCl?U4a53=x<+4?v(`snX6anvuRas^W^w{;*V5Pw*kv!}OfIaN82H-Z6OX(L1f#JI}Ohx1>|U`$z%BWZ$ND$T(%bd3~LFr@IiF z5Qzd_5e%&WfD?m|^F^Y;;8A=%QWiPl<2c0*yxXEUc0`-a0Kq6}DPH_~poBk7RSVX|1i>d1302hyJ39Tq z;x!N*zN@bBH+Lu~J5~!j*sbv(mdC0VBp{+zM2Ys6E};#x6DhHGJT$*ysPyzN^wnka zYm?n`;k}LBz(2qz5}A(SfJw3X_B+^C?-%(O6CIuwTVh;fOO%Of*nNq(ZKxd0;tH={gt>($M(ub>?xY^>oO$LC{*lg`lZ)>Z}nAzsM_VpfpX%VB%&ESyho#>^uXp+4_9x{N9K&NDP*}nN8~mKj;kT}QNc&&9Q0_iI_Dg_T=U(Su+`4#ui7}DTglrov z5*Mpz#bWH$b8Avq`4tQoa-q7ysEVie#ea^Eb;pBX-gXit<^T3QTjtG-q2V!RM{;8Al56fHs3qJ{)xf&V% zOVIRn97bVY7Vblurl0^G8NLz~3Em2l$ZszY5T?|i9wu*dGM~$qWGc!owg&$h+TBB9 z;wT(G60u*;Bfb%zG)rc*kbHe%{djko75{#Ff6np^(G{a#3d9Y>1$je3R+hF}m#^0g z1QvLw+_gpPY?kKSZCmFDF0`yp*-gR=p1$ zTIEYDARs^tdfASzpK{8g#a9BuUcM7Vs~?LV!`eWzA3MT~R9~@QKy&d%G>B^`B#2~$ zHXy!~Q$UAa$#wKxv$;iU7BxvHtS;M%CE0Vifx_@=n|axDe(t`@w)MK@LC=qy)mrFS zNn0DfO-*NhJc{B$X}CnK0Q1EYk1DL~G&L%drS7}`@ON&55W;);Q9_rx)zJgt$p$F= zbDWEV&x*;dJevFDIBc`FK8K37nfu?3c?KaDxKc-0<9QVWZ0To~#%R*q+lkIQTC`j| zXxsNw4Q)kVVpArjP;BJWF)0i>kOapoG?euh(+=q>0UX2v=#MCp8b}u9<9%Ku$y9e& z+mXrY_U6`V6RC3+GNZ?bD)$|0VGs`eIb$8_$j*4KaYOR?+w`{Bt=oVK=Dh z1oU?W!#_IR;-SVMp2GGTp_nvi{B~!kU50FTSXR}RzoZ1pUe_uVJF68`pgK8l@g^r> zenz}+V;Z8p1TXj4mQI$NFOoCj-C1kLaJOIlp{9AYVi~gCwTaE7PAi(tt9kb=n!Ri? zjjwR+qq$SkN4cF~aUAe0W;2Qqutxed+n3v&RRA}tVw-9k*1*x=&F`2cUA@oiegOIC zCCu3wIwMb`5uEf9;QGS@gY^sUKndHT#EZ`DN#ydb0SVht-9Xyp;>rbr@@4cvSjk9Q z%b~0Sq5BmX`*p1T&DYY0g>FImnukvPBYlPG-{@lg%V*~lJ^5FIGN9aG;>F>1XRuwg zgB1=O!G7)+TnGechm7(1s1xD&59{tP%p7}b+6KOpO+vIr;^qZ`<4MLd6VHQst$ifMu#%sWrD+JZ_I7k z09ampg6-m5l**}mvKpDobBarY8}FFqP0wrx$N4%0k3X^D)=nKAm>hjOATJC9XDpm9 zy#MAc=WL-e9ef!{>i>72@;`}h|I(a^aewzIhdh)r5D1&+*Z`D1%&eD3+`I7~M;1XsK8oa#%lEF^WRo1VOZ1N9%xc!_Jf9q7 zI&K9K_R;7`>%LB*Keb4hZ5kjp9rOeV<2_ClpbDio;-Tta$42}=?C|1M05eExXv^03 zK53QC``!p+#pH?ifK!+OIyZ)c_dGOfT!{Jky2{^(RDI3rY9t;shrDWM8_epx+7>Ry zy*OX`9vP^;@KQnMEU7!0{8A)sxMcS#OqVVIeETOT`U#Q#=@jH2pUac6m|5?eHShJi zWE_rKZw_^ZOzNCL;4k8-g`N4xnW8Gu($V$}QHC_L+Yp%%Q}*`^9k2&8_HmVly+lCg zC6PI}a&9`jD&SiEno(6I*YZ_vPl)6KtL7+HIT0EII{g!9r}lDdB#y|a!(z$da~g!5 zQn8WuV%sF`0jpS*CJKN&)?k#?ay9$izq8;I4D;`mFZa3mM|OhXKfFXUdjls+J$o7z zJ$q|`|M(CzvNf_cG_p2u`+qZ!3l*$v=46q)Ay$&+*o2rJ`$OrGnVZ{ANr)tfrvd`> z0O7{B^M#$|Ooc>Vy*Jev#0GYuJUzHZoT%ubJ(_t>{ikkjR}R|N)6v=6T|ZWan!8F|1<#t>j9l$vb9)GOsY8iX)1kImgYOyq7(=bYs&>AFz z2wN3&9B5ssZ7{q#W(sXwA@bE}x>4xmb4qb%UJG5cpunCi^-*%(ULuK{mF&0pnV!3Jx8HM6jn%81`oT?^o&6@rj!3|jYegZe^beyW_6(=+aA9nJQ!MOtrOhn3g(3rHV?0wh4;HXZ>0AeMq4 z=9dh~ZgLrKJ!)IukU;!MGzAhw_+rG5v1(`|NPvf41%KUtam#WWe|ve~C;4@(>P&mC zyEWt&DTFD(?1?D@rki_`hua+4VlWUA4kS)(jg}s$L2Vh~?)u9^Skl!sL<9%NU_$^o z9w$q0g5U!@NZzUH<4e*3*8%y@x*9;~AxtlEf<4r8Yp>U2cl@zyJM3PxYys8~;ebx& z?Ki_=r71Wv1o8!9h6!Me#P8#5LnLVM%;;|XcI$v1Mu@*8R{LY1UhaJ%Q#uE6m&GY% z_yOj9GU}19!HB%EERd@Y?latHC--Jb98Q9$UJ2CVP?D_TTy{pq%EH6M%EHS(S3Vpm zR%f*-$!c)LmiBobC)%x^jtSV z+fW=&Jk2bWb{C@SA3I`BKG^~R6?&1-N9#OTVX9agMQt)jyI9`sgxzUlv@nxk?50&| z5t(2PS?6B;?bwK+qbusT%}zGFjr2}(=tD>%Lo$15Lbq9HZl*M6u-5czozJdbp#Yio z7uyDrM5=bYW4gjK=&{AHO;EvN?UqRP>IlO$x;uI~m(B%8-%M{{y#y|vJ>)#;E_ko> z_wk0~Ba;i@_jV!Y0N+3Z*I-*%I@gF@Yd;8KI!G`DA0bAQ8{nlYcx&%qhnd7YyULl( z;M2dygPrgM_2ggP8TgOh`A?IV|BRVJ_VzaR|E+V%YkZ9fkv@o+)^C%k8D22?B_|ZsDamyiWyQ4^LNb zf9vS+r?>Vnb#FP|^#%c1C?CmH7Q$I1PfcWJwp|QmB3U|L8K4U4T$<`xnK`CIEuK?} zFU1v6D{$G&3! z9AA1ha{b~dOiRWH8G?PJw?0ZsE9OO9f!){HYY2*$J4WX&Xp;t3ffM#SPpccy;GU+Y z`@_BT&+3`1T+&rQCnWV>SW;f%@JeWAU6*=0F<*%hHZyuLm2@Wrz#^3nH9wESIFG?&t_RJ@rGtsRtQ|7vEdUU zhHTYOhW?W~nV(|Ll%P2BvnW-&)Jv!!8Vf5zyEeW|wcxEu^;E zx}q%@GR7R%s%|jKm1PHhnFv=y>1vY7cBAeTV@#EEbfIe^3a_4+OrP=+W*fbOH;SNi;upsI*=3 zDEi)M8s?Ul0{!Q@}2g#?5E4KN~`EFRBH(*-dOIm%s4f$Ky zK?US#MMA}jQdN~(%|S@ybn-azrnA|Qa}0AksW5Lc(1H;2lKz~a8qShoDY76YQ?$96 zUm>8_ofv%iMJ;x4U?mM(IR0Lz*?Tqa;+2(<1{e;|v9zG{pXiM8Jx>rOMF`^b1W zm~pAvM^Zgie`6y(K-OJ<#)`~&+lubyL7l6q%OTu1HFh8ge^qgO<*q!1ze&F&-Yyl} zT>r4ARF2eTJ>`6+DXWvwQd zZ9*v2IyxpO>z_(8x(*nJV=j$sxtvp$2+!G26cKL)K}!>5TM~qN;pr#Wn(OS>8iy~Q z@1L=+bA?KtB69}O6rc0Ez6a9Uv{T+fQ~yj=adjpk`;tF)P!2?Mr}^N8>R0l{F%LT9 zf$84^w;dWSB%2j3gcB~TpR%C{8eRl#t>G%2@^wkDH2QUv0>kFQZ!bDq1saxNV3>+; zmGJ;qSvk9cetz!a(CR0( z0MdMtTCn`5PN!DoDK54r;7=t!_=g$T6A>W?l;5(3P#pCP_g>pD_0=}hG~ZxmZ)AVV z-pfw+`>K2sXbLep2v-$I&0Vr|3f3ogC6(-XWnLm?H6CHqV1fF5G_9>Zon@MTN!GuW z%2Qh#)0A(J8UW~$H827l8$s_4RO-FJQ_{8NnB}EQXkRPQroU72q%-v)Vk9vwGWEN3!ce7f~{j}JWxCG<^b zYW2jx(Ya)jP7!*Top9=)aE!SR(Mp|SKzma-wcW?{=Gz(WRIAk;IohS&cFbHo6# z+^|(<>roSR!0ngElhEi?xW>WqC)g&wPVPz0Gt6J1lGv>%l=Ul2l6_Sv|7TJ&#ee-< zHV!6cG)|6YmNd#n_J19tlGn2~G5U`U24xKeg)b5_N^6DyD;?^0WJS`vpbS&E^Fn^B zMe|7ecv42Wir|A3U<1EaU9VFK+!xG;LYu?D(}h$Z2BV^6)XY=&Jv8MC$}w(ofZ zX?k~=ol7r|Tifau*l zC8n*w4}t{B2U215^riES2H}Q(Rull5$B08)wnar{+URG44*EsrfGf^OFpD*1p*kP} z3`Z(x8xW))Ff}vtoL6fpcrT2P7^x!O%5R)NJ94E@hRBo@p|})rl$0$Leke(;UU_gg zt5&Z#g$$X$gi#;xo~ugP#1H*Z8Ysk|gudCidwA9#Y#h4GF$>^ImeF{tGJZSI zShpTEvs?enW!Y@PUr*0{La_=ePRXZ2cBxogObd70xO;dqHxsMcI`bAgg@eAO;WrJx z>ETMEI3Py_pQ0FS5W9&yhBz|(ee0*zW<`0h$}kfKB-5cvRXAb6mbx3M60wjEZcy6A zpCi{VR*D7*hwt)-Wja1maf~tcgFY%qX;kCDx7_@ zN$w)7+Xyx_vnkBtMzQ}&b;lQ=gKaAR$+UtH4kdr~Swfn;XZiFGb(>wmXYYr3&Hcb^W{rEbFJHFUQW?IiLQ-c5-8R4r>$UO7kTwqY;?P z3ZGuJHOU$@DvA4#Ovb36Qakig06qm}z;TYWoK#fOqI{m&ni=h^WIUST$mop^((gz1 zlzrXL`I-+d%_*gKCe0|NcNbS3RsZds%rAxKw^wOSXM2qG50#U;%aF}A)ZebZE_+be zOym7E4s-{^=ZHC6=%wtda#%GTF(D@N{Ev1Dfla31+lH;OhUwa(;kbAcpfUD5x8UMmY)ym&(uX&APgG@5@^vr_VMo z{rk_V5SHRSMMhHdGhLv-Qm}>(+5g0J7`{1*=}(rpY}HnEqr0J~xWsy-VyRm3XL*3F zHiu8J>Lt3J{f+*3DD4D)eD$r7A^$11a{s%rmGFNLw6c2k4*$7*8L9Gaqp^tYEq(FK z{wTHABK88$O)na1P~4cFG#A~Y%nz9>MhY!uJ1k<8vHsjtYL$@=NBY)7BN^faPMqV} zq#;B&)}WjxCB)eDPAjxelTwsxHqRT<{Vf;j+AX>odtTX`F#9Rv$+P47p8J^V7{}-1 zy*T^(Nq;yW7PvlTh}{phA5p%DpwbvA%rOixEV8D&XkGy4uoa3uZunRJn|zUhD7Z6t zNc>-yfGe0@xWyi3c=dO?pL~S;ro5a1aPC5u@U=>U@`B`o`A;D$MEcDkT!0s$4T?Py zVwinCcrYQTP&DRSMqx>;etg8F5O7X&0D(S&Ke1&*8f#Rrl%!tIKxv)ph9Ep_N=mN) zvE~H}UHA{;Bf}lF4I6!JEUw_}G*@k5neZ2&DDr20t{>_!Pvi|BIX(+i?5$+ZF0~vw8RF_76!DGmQyUJWZxade8BUp}2Ps+^c6Y6vYmX^O z4@>ZvEn5rk^~2E?JRd7Lzhc8Em4u!>)*s~Hutv`1q>F?&?%)8XAX za;=jqW%1*(%MRL;kcc4*qlY4$zK66pzI_IkTs?NU=NfyV^;~@hc z)j5~+7&La8_)@D?UR;uxPkG>AwJ-uFJ+uHdhE8|>7Va*O?|bKOc&?S3skH&nY|~|Dsh@{lBknNENYyhbnbqMg*P?0=u{tf?neZR zDBapN%}JB@4wff1;Og0vV30+}e9~d{vASH@8It)(X>Sc8K8K-o^(s80B*~}9;u|io zUlrhC3hsaYoabF(lrYq&1u0aXDP&jP$tUh~s&I=_3XKN33ZCE-5CEsz`q>p<RSe%=9 zKT(2{Rfa=b96%B$`w%OIuPTVt@lG)52rh9{nnxCg$Us}(HRZz`L`1kFAk!% zw?uV@-#p`M{=*FY+2SD4^L&?31C$B|fq8WHzDq_gHSpV3cR-Ni9z-5z*en$#=6m=_iz@Wax6^Oh1UbuYq&@;y+q@K81C_4fz8SlG z9_e7a*xHEKdAQel->&!ZJ$np1lE7V}XezhqOSu<%o%_4}YQBFyiOSunY|HtHts6;w z03oL56rV?px!E|l&eydaIVXnTqKfBcK>@UB5Jj>MfidMP4 zJKK~eVcZQhLhAwv2*?s8r5JUkj7uX77l2Ibx*8Z<)S4z%Rtvv(g76ePK}DOnriCA8BRwZtpFnCI3 z$&E8TK)&i2adCW$pu(wW$fUrdk_y+A zOD0>$fnQyv#yjH`PZX7L6X(#z&V;#x>exRra(V6(_QUs?#HN>Kq_6vV=98uM9kx39 zGcKFvkML*Mc763Y3mt|s9HVYSb3;SG4 zPq~r!-^h*s6LNgX#QhC9q^UFD3`U@l1`sMyMPo=^K?DQKA`g}2EC-sf;(oAU#4(~S zNaK24X>b_es&g0=X3}GGJVZU6^|G((*`4bWiTSfMhkj#0+fl3vh@jt6xH2XDPWiGnyqvF9Hl zL!H`BiQz^avegvrhD4n??-RnZ-}TC{+x>wbUspbA2_c8N$9l>S6pYO4+t^4|hBvdu z?5dPL46gqD$i-a)>FVUJyx4}C_*l&$G; zdX(Rilzm^26{066c5d#%Uq{LTPNu6U&Vf>4V(>RZ5Mhm5Mb2O~wArdXe-%AHc3kq8YR(Cj3NSlW z`r^kcj*^i9`zM5*1WR9FfeHlXC-t`Z#+v@I87GA4NtN z{Bk`=J#ZGP%%MYtd;sNcHx{Qhh(mGCHmRU+qo($@?ix3RQM?>^F5YvQ!T@ExzW=TQ z1w|nq2GB1$s}Kec?sWQ=V^Tx%*hMWCh|yhrePNlD#{Tb*XsGFYRF*elU#0E6*fp(4 zC1;(Rt)pxdRmcP5>u~ZyP28)SDLAxVc3Vi%%8WtFda_M^lb2d2xWM74F+b{c zh!4a=-?SN0lWfC}%W)_ag%Q@$JL}hs{={|!a$$s0dC-^(j&FXEKjm%iloMXhJvFrt z*Vs-Q<=T<#*i;LVYrKcGCQT?1$&5(jh5(#Q zyb$vUpNzUWDaHxpwa8eBwqiR+FZcls2CHFXBYiFZb z@9NkSo=P(S2k! zPjOZRG}NxKzUjd3I$c-lsvpsEI_k~ocGgT*t4sda#<4x&=Enrp{Kv6b#xY{Ry0ozt zD?vz)x=F!Y{e*P^G>g!rTV%%zli!|#pxN(k*jhjiK*ad%PnrRD-a698xG4m|H+ zq-&b+Pd>fxT(}S}>-znUOQr;312F40{c<+hBE#J7s6{qE>SHClY2PtZm@O`ztya>< zY1{jWC!EKD!VT?JIaeXlLu}NB-AST>ZIhSJFq>jM&<2{JZaHuwuffNGjBoryb>O0q zw@B{!-GOA_SxXl<1va;jtPW)`&SK1*4sibp@G3-QRFPlc#{=S@0zBRSA;24ajbdqJ z6hzFv&dit@e;xe)-|?(if2SKCZ&HIKsmXbh6WS~A25z%beLA8&KzHHb*vCoBmJ^su)L_*J< zc$*qAZRCl+-xfh*HJ+E> z10({xp=b;wxjvc#{BQ|`#0?Q$$sReVA}eb#Ah0GZ`lc)_`nE32<~AtonzmxkBSYnu zKwIUOfx7Hj=w@?(2s|c6N5e(B?`o~>CV;!tBB(HM!Z1vvW%5B#mS4@CxGLQMqc@06 zxJJ0fDB8?jK01nFG9_b{(qv*LFKM!&YeX$yge6k$=*D}~IR)DhIx~5voQniUX8DMb zq^RmRYpf|LqId{ue%3On0n1YWF`%VK+}3FzVVF>L0sL9&<1`7P|IeO4Y? zTEY|abUnn-!!;AKlqtJj#Z#;5)wsKo?URvmnexQDLr0O;c{@!zGuswe;+UdsUpR=c zGqNE!fGe%kB29=aCTZ138l%aGIA!$J$|507AXIJKAlK0Xt+ z6ZhLRfv6SOhtZl%e{v#%4Hb%8+Tp@nJQ`797HuDYezy&sC`#WQ@;s_U+F(JK4qOI) zuD=CmzBOwr1i_HsW3&L6sa^rzBdR(k0DCq22RJgt4DZ;1u%D9@q>Wj8<(`iDu-Rbw ztM^*l@*R<)ahI^MWR;AG>7*fy#7b8iPf?{Yp;lkjhR!z##Xig>N+qsRhE+vVdt)Nu zutY;+cA&-9GH%Pr->qG8I8l~m9u=x=ZHb!lc2=ZfgOf=Nv7HA_X%PWQ!wkh2Eu<~Tsrt*##?(!%BjQdVSVO^< z0{r;RB}GY1%52Sb26ffHRU4Fe#5vM6P9x<9Dsv6vR*y-9B?(bm{=}_TmGpoAs`U+@!Q86SIbx8|Ed! zCY|OjNkEDqMQoRx${^grf#o?3OTq^*V#v-ONaiy^4-R2n2k-ANN}+$o+Uv}7rjfC8 zU>eJLHBZV2s6mat!(O$0hn{I9#}0!~DG4^kMS7T*#NAAIA;X7X_J1GIA*79_1PwqP z0~}KQBEm(|os|OJ_|Kj&^$!zh%eEnztT=Dy&6>wFKx!xKk);CpnaAXEM<4=r zT${;Ii%sH&CNt~tFO@6dp{bpgYa4E(B25Xs>(XHC37BJ#9snq#q(zNNlu&T11>c{O z#`ZBEDh4SL4!Ob3dO@XG%CG&)utTn>{pECJ=QK2{C#$Rg8{tPU_PLE{uvl^WkEcX| zPu4bfqIhG~kwOQN2SS{90trK{yFw-$Bc}7d485h)fP2R^{BHU%K3fQ$XJ7p%r1)W5 zGAhT=`>0*uUKUmoQZOcGztC#M$r|34Z^5?7NL#sK)TQ0SdXJVv03nWi zLH4U;pG#?JYIy1+i_MoGf4RnNx|dVO*Qm?-|CUwp_o(ZCRwVz$HU6c*L!#oQ%)Bhp z=VonXBhsIk=$nGRQfGCi(ZNsd3B{~S{M@=%SpQwSm!NY)c|CEbk;7)HnvbtTUw%%#** z;)76tm>VIDX`{vNg$ALoqL8I6)`eq$SQshSR~CY42B<39fvF+8*l83xN|0X}Xb<}T z%+kxk&pm}Ai)>FCqOCe65AGO@#Bi}PAbG%Ere=UTY2^wcdXKO<-;qtxYxN;&?v-75 zbvfOBcAGC%>nnaIq25yvR;YIEvbq6f*#_@7!^SK+hRnZGo5Wa6l8bD#nzaWSc3`Qv zGx{@YhWc9P>U)VcIa7-6(HEUU7k!8}R~~g9U;#DiG>rh&k35W=KKbH%wxwr$(CosONH*h$B>ZFOwhwr#6pznTBcJTvcF zGru)o&R*+$-TS^!Rd*FBRkYyhZF(1_9v7mGIr+iS80&-B%ykpM?z-G?lGU(d4#p`>bI52kj+N01`3Tm(NW93kTm7#FF?+l55nWk$-SDX9nF2r5AkI z%okC9FIzz@cPBRO;3AuT+t%gjVs+cs=UWRCRzz_nJtCbN$3VSX6sV4LL^2^wA)ygU z81Bgg+(Jhjm|=*Sh&ZH+iMWwWXh0B6U^{@=U&&!iGTVLRho|8V`jQXYxbXm#ML%l9i?Lk0xs40Pg&s1I%EErmXNki!9#b z3X@{rj#0x35mBbSO)a;6$QJj&@m2siTb*9IM(2Ear#Y)dkHH3=Mgxv23+=PlIGtGz zMw~iGGUam^;!$MADjRETu4z}IGNOL9I_8XVf@AVJqm*;iwUk9vc~2V_8ASbBnLJt2 zkF~-rCKhk)mm|;7#a2yK=tntOM;2RdJ$p3nPn&ksyOCWii*YP=9XV7&O^YMtV^718 z*Lz`dj5J2tglVQgD3{e=CwgqOMvYzd1{`(`QB;IRU0zHuPWk&pdSI=_%eb2wOhM~a zNXz%G)LNAv*qZas{mvovnrFU}Pjg6s!JW$?)6n^&mR#}neLB;VqRmq}lhCv)q4_x% znXJ5TI(80~yE^hH)<*u+82z}opg1QbcCy2{ul zC_YA>_WA)v?#)CgtVyA(%RBSma~EWc@1T1W{}jIZ6v8Qxb{QXc1{boR!*5q z)wkgpdbtG*E0`r)ZnM5Sk?OD1_kGVD83S>9TiqCU)h@IS zJbafdI&I2#%)yT-bp(CK=&d-t#bkJtb*RzBVK-Fw;*ThO%6X?+V6M-0&sh*#6A4Oe z#*MfC^|lacON&|1=pGg-u&K#xwss84bNil2h#*l&R>E9OGCV&I93{zYCPPCzffZ!o zy_DZ-VF$@=1%i{UCgr<+w^c@Md@9;H&!`4$;fw@YGO~HBo!`F|DvN- zvR7buZdxU=NTFS}gjr30ik9^1-Y=)JOQ3E+W`+p|3B(U1UZmJsgiapGexl465f&us znMOA`_VCNFUAy}y6}oJ$Gxb}okf44t>91`o=M+Ni$1UOb4NUcDC1Uwrp|9&cY|)O;%A^;0$Xs zmoa|3)GG;AN9BnvM4g5+#IPsQiQwxv8+mL&0nYKAiE<446&k!qRl)_1v%5sXOkw98 zfk=|#=x`1O2eA>PUXiT635reL9IcgjZR)eV^NQjgG!~3@Nkp0A}0C*bY@v3G)h&bV*K-RZUcAqfIUxC(*9=_ zosKr;N12V{*)jZ&%w-21_F9RoiBF1tOPsa-%vE%by8Tp#lg8dn6(UOZQ+HIT_W-=? zw!nGR_&ljj70F;#x5(S3Havi}`b$AtUdr)Fx7Qh>{c7*|S~bK*z_Pc#XQ%+#A<2D< zfSdA*+S(s?IT31iyfE7%_aWrG#_@VTI&>U)>LPxgr}9-eM)^?J+)&qD^lL(jE%EB- zAHxG7pt6T&yI(kH>%21tJe!<>z{OSywiXgOO)lQ%22 zvYW$3J$>3l7f$4I)NH4*u$DP2r~#+n$`#UO>Z0xD#?x3BqN_gIt2{xkQAhned9SF_ zXRwk1SGZBN7AbQ;+kTmo*>4#-F1ex4e~kv?c~mTh-(vyuKL!Jd{}V*_KU6T1|Nnpg z9k@$U*HzG7M*N&QB!WBzt`oq}bfMyA+p!WDa8U)9(E{Jk0YO&AF|66wl0YY`~YMaIVOx>H|}6D%x-do&`V}rn=h$F^pA9xFYQGO=R#n zN5L*wHnO=j9O->4rA0WWtzgBV{5(SIJPK57FtF2-LdP zlGe?3;m6@)LUu5dle>T;rkFeGo7O8+s|ZJW)X-2Az~R-9BSD^|zgA`nA}6#s!ANY2 z$5doAdMlC9qEMD{@y=Ho)*fkzQ`-h}chsICO)ecC5+Yhbp3GK(&a+7Y;5 zT(ju?LC$nCg8FY}ahhR6I?X)&PVEVs+9r1bt09>tg5{Mhnz`1{qta;~k&PEIHZuxjeL zmoZ1fdBpSF|G4WHod&H$@gX{pv5U&AUg6;7b|@AXpSqVDd8wm)0^8RM(nspkWg%mL z^Fyf=Qxx>QpE>tD`c{+;d%xPKz)u^!;ha5$bAmu_i*VFp-!E}mFKI_WOcDYj3PFk? zx4_AJmlc9Q&LpjVmvWDuZ94t^c|YKOiK}=H{kUKlFLTh%2!mR zGE}8$lGq{PkyOGFwPO2squSJ1i-uz(Z^%V!(hwz97R%JkN!_jO5cC+|Tzhq{QzNV^ z*OsU^;*-8V`_7H(gpqF#;ZY6g4unRgE>fO}C?a>|hmYM8t2q!j=9)%N_V0kmdl!At zSQd`LU;_uysAyFZTl3i@Fbv0(ETneyzb${`;ls*Hg$8zjdU!bd~@ppn9 z!0q({vsafz*I(m&&A0)OxcJ;I?N zkyry=;tM1Ci9V~_9G*vtzDDYan!+}G__(QAC7*-3p_dttL%WZs)l2C186=QKNq+Nx zO@$tDeCO&m?E&ea3$(xLGYlniMqH4&p~0ndy(y=bcXqc9=?QX?yEKnIIrFniA~Xj| zLIp*>ZrC=&l$34H0X+A0$Z*B;d-ME`m$S4+A8Vz!i9YXZ%l#@eUiTz?gk)y>HTfVOFqz} z!@NUY-v?6aIDAq_iE%yWONwrWY=1SkHMXL4Y`UP#ul&7+YF;k430T+q`Q(6(@>3-{ z01!63i!5x8Qi6y;yh1mXE1FrP~D5RacLHVAOYV&{( zX;fbFpwvDXdO!WzxOT~6-8_%iuB()C3Ny8)cUCktkJ8Z)d{m!FttjQ{b^Bnl%vBal zIP@*{ua%dH#YP7R$n4cf?3a%0Dc+*Iir|$5g)tjq9S^{e4KSx7O-rHkCbrk)FO{-} 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�f#)5F{Hxyrc!4$O&gkOL}qw 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%0A5i%qjRz7Z0tR;E0NETJwv(85V^qp;G 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≥`O#E2B83+3#IVZa^$-V8SBCD<_=iR8C}$D|h{|(i76G(yU$CV`y;rQF^b%m! zL$lL=s%2BhOy3+t;hce6L88jc=T!!S;GV+-aLXYk5l(=|z1lvVf(Bp3=a$}Z{PilA z7?va7!U1zw=zaj2N_F8IWd$MQ{%iQ$>Q5rb}~ z#Gsu6(N4OFNh&1;%W3XuQ`dLPfa&N@)Gi~3D~wsV3_aHG3E+=nrJ>EPS6&3K9bl>2 z$P>ry>xGW6!&nz!(}?L{WUM(j1;RkHy43?H4x`86Wcj{zZmIHX$F zChaBx_9Z^57FjAwK`X28`g-*SvQ_adJ}TdbaAzzR0vEF*&2>_HdEwN^GdJRkUyDR+KB} z&JH$a+};1az8&uMLPOc2K^wZMg*qmup(8SPNbL$xcYx9eRiBm;pdU||^w#4rUWBUs zjnqVT(T-I&p!r*MTRX#}lEa%RONA*cHD)(xXw17ouq+L)i2B>@)yj$-A zjm-(*t-AC22CGfc2-rR_Q0YI}!sM~j9Rr(~IB7mV7pu8yDLAg+qsIGoxC)*5#USOm zU#Rh*32f)R7Y+wC-q#`osLfHP4A-NCPDky_uU|6X4$mLj<&%zTFMw`_Y(Hs>xGQk* zTOZ)BgvF)J@7qzDLs>FaE+;+;2XqTqMVh%(xQjHj&@yToHhkU?3@A}x7j8P#O~7DH zI1vnLvsvYuu!9Mf=}Jv*7p(wTIGWk_G#+7ul#_DW&!jbx>X;TS=NX#B`0%p-p}mvQ zUb?RJixFZo&yVjt6xGHSW>uuv9RhV|%Ypo4D^Fnpz0B)S%DQ3oy-lm5>C^ zy8h#oEe*~hM*INtnp(h3y(K_}p}|fg#;;)&{ubjngWi1oGg%&+BaII^H#SH`!`q_a z6#PklIdDPDF}ZMsx%1KTvS>MVONx(h0-V$I?W;6eBkA65Z`}K( zQ}CST|5LZe`lDEsr#d)Oz5i9i7dk%kx)lElMLS$Va@jY0!W&6o;R1c?=0Cj`0KYo$ zX`uBnPMj_ilumc2iU?*hF!Qa<@dR&SQa92BH{|DKZ0lu<>e3s{uhv%d0jZvY+#S87H`-lxCo5^Zs#a z=~kFa*C7!a!FXekz*d&VtyagXvWpljBuzubv%Zl4)mQ``rb{;0Nb&P+rcATN`K-A*-j5jEmEVxMIo`W+`qjtXEA_phV*H{fzYK+fNNUg zkl9Zc$ElUoZFA%?A4n@3nEZ&eQt^t1!x>uo;sm|n$o;Mb_$;lA*-`GLu48~>Va!`bX~ISJCLJ*i_0-6G_}+h)=1DP z8@sQ({f;(=0WMuS&RPy!JJBzTf8{ztB*>=+L(H@UPT&0VnX^O|cr)Z?5X>TV3UoekQw z6(2pyZFf+f*iUOPFZs<(#(3pX53Cck@q5htx3If(i?#2NJdeRX4+=Fxrh@=Ur!+^*&gT;GKAvFuHss^}Z_@U+KdNGhbm|!#JS~Ha z`}@2rw*kA;R<%ZhXJZROU9iZrGSJEmHcYtk;|GW!(P18By(ojK>4hu|>jeVQm4rr5 zCZ@5uwgZBpNqoI8N%7c9UnOZ#6pV9H|Korm5zH@pjgOLicg1-Uj^$|h$D3haq8DK> zSzUGj&xU!9D2Dqv>cIdyWEBU?l{F1&#zmwoCDCJ#m(dOEUJi?Ppn? z&}@(%-EHoB>J$mP7i8cTD|?=Q!E%=6S`mGr>3q+gJ4M4$vYvw)c3=h9Dq{-Mt;Ldm zoWfTxk~5}Y{CFhYxXgq*=}zXTN1B)l57Hsz$0>QQ^RLoy1A-uj^4Y^)elG*dDG#;r z{e`Pt06PpjP}l%6NVW;Jif#nS2vmbA@ZwgKP3%(Wg zK`!T4g*7`M5HM$3yS31S@7bd!?EUP@WZe1{R>f9cYKs>ichL)wf8nE$DMeHud71nr z@7{Y@8)LN|A;~JFm2Zm*A;YwWo}3Fkbz4qum<3Ioj*p&R4|7w;)C3x$@D!oGF9%(7 zPm|gk$Q?2L=+^31B?)w8$-Zq^Xe@hS!+?oKCA+Y)5HuL}R2edh+k)>_LZUbDQE$uB zT?mQo4nL-m)#|qoex>OG}GQ4e^ zz%f19HtIZZC&;CmgGFmpM+TN-dP)~9s6+V_mvIiJXM6)0SdQu0-5{?9C9GXo#u2q> zzCJRr9Mf~fs~@WfLbW+OP!(GlvU#l` zcTPbHkq|D`=GQHSknElZ_u#4f%Wpa!hBhCElF`jh#ZVbkO|UVVVJ_t~{CF;q6YB zSPVMV(%d~%(J`Nt+x%Uv``3G5VF=D|ucfP_Wl#lL+NJNK4bK!uGA33E`r}CQtwE31 zk7J@B^2<C=`Bk5JVNyARCxC_eIo3L96s_4oM zu6Dm_a%D6a&mGvgIui$~LULxw>0#Gf&4O$v0GDoOat=|){J4Eq3zb(0(L7`Ux-6if zXF9ot3TbRd-JIrkAK#&WC@|MRBsGcsnmbI4`|$=C2l;J{L$}HTH3DNuXJYdaLS%M- zfV*C3&KBQ+VoEOSfl3o{wvU!UHQ&-=r*m9}JMq0-Lm}y(AQc)BnK;2&28%i8ZMQYL zJKAu}og}P%G=>oPgESNR;fKoidRA$V<7kwtQ^N)CNV@ER%xDf-)+x^LaNwh}O+BP+ z!7d=xK@dW+4z$K>!EFCfp1E$T-@E^e0bz;o)Pi};lHyQ?t#W=^R+gT2+F`Y*H&+#w zyIS1)J7E&LtXmFRM31B^Es{ai1nEpYd8rH4w#>e808&_tCesPfb+HsU6EvFu+~)5* z^7V<%X!=Hn2{2-%vkc-1kW@G6AghXT4vJ|v0ai;hp&x1!K<6Db;t6CHfaRM`fNJZV z;o(exS7ioOd7-$3CvTC0|2P5oOZdNsHm|J-TTvgjf=+UI~N#mOl-GCPTwnJvDMY$PPKMZ`#pLA$;^gtNq0YQ_6d&AJz8aM+5{|3$3qxD#Px5zqIBrfOJK>Yv6bKPuZhF*gh)lebHo8z4btIY_Dgk z3b5tvVdeH_x%0e*GhSH9(0Cszu0J;17)Y=BUjrX%7n%~=W1^q|8h zXA!9U!ZGOqYYk~EvH1m7RO*3LJuhM-#W{t#GkyA+zp9}>tR@ugPp?bPGH6uu5}&>C z-MkHK?1F3yBE1inon}J`QfBMalR5^MbIp4RY^;<8-FSIi6SJzRa3{CFX0W$3`|wJ;V`Dm`zBk<}*Nm$#4o!&34e zLn?Gz7kft*nMJhKM>eKjZ22<~PG7Lmh(PDNVkV|JpVZ)t(8VX zS@9^k2H$=lKvoxfo$yU1Tcf$p@KLAa>O%!!WXa%_jwEY+NmRZ^tt)H756A1-SZnlp z7E}KZAKk5d|5%0~eOVUsB%iFhUzsQ1Z>M-v`tyTFmz*BheIW*5r>8E@oZ!Kn5GG1J zJ<_SXa(AY@%n%J{cnVa{yrn<7QwEz!I>AHIoZzwC-VpX^MEv8hc2EMACrgk1YrV@T z6Q@(zzccE801bO;Yk&Kp z`B&&eXfFF#w)1Am7>|{Y^ITlDR~Nszf<7&WZnuP`N&nfDYG7M*DU0#3`%~FY(bN z>KZkiW#Dw;XqD7~S25rd5GSJ1sLM5_C~TKNgdIse7yXQxnD_Xods(hlMp!tVNm|xp z1(TN}&6(QrG}y9=%~{%o;4{oSVCPzN)gJ9FMH661j@OyA?4@ooQ+%GR)!Kq76PTz$ z3#co_2c4`f^VP5aj?-V`9*wHw|Qnq*OcV<@Bjc=U8b+I)NHA%>W5Uv#dTaFER8~ z9K=!w;PlXEVjBUlzb*=|^5Oz7`A;+w?jwecu$Xz`iNUqtWlJOXIT;!dS#Q zOA(YYIwcfd%(QERp(~ccbmlB#Uvqg`F9)1t6p{7n5Y)PbE)Jf$a>HgDALhBuHa7+B zvt#C%lmRW5dj$n*E0^5%*Lb)ugE14Uk-nZ9s0^9Dl|bN!6Q**1S~JgW3}i2i1wG>0 z{EaedkS;M%+f&!t*b|4~0fwG<@lja@zLUZhdqGdq@X=WMixCpg%Ak`bb^YfdM*KFU zP?1QX-*-Y#WwM&LG#QHE<_OiW^SgD$B;NYFEXp4))a5hSY{YPdCrSD(f%ASB11Mcm^L2W!#N%Fd@oqY;dFB+I+xUgO4iG`kCsOyeX8s`tMhn zn-c{Ur3ad>vz1Y;`OQS1lv}*^?vq44a8Vo7E?qWZt}?ctNf!+VO|RvZd(L-0`<=}Y z=o@^rxiuGZAn_hHW>imPekQW*3_D3sZtmnlb;CR$-0k@2n%QWPI(9%`G+Y_je_!B^ zl8^&SmY|K^x0nZvDjWTilC^Q+J{?+U4bgGDMtkl*a4sLLRk=#`n)cOlE_RH*XR>)U zR&H;VuxGOiW6TQU3QIkry)(C}V`@Sod!tr}zb-M#q))(-uS_zr{``51pm=!k$u0(0 zaJK|WkT%L>3}aqJv@-ttIz=-NK_`mmw-4kO{#6zqs;&%P?9tfgJ(y<0aif9!$A@IW zm62C1G!57ZncsC#@a0D(kgd-hDq{yGH}AqL3ss_yuG{hK{(I@*ZNzy>n<6%;$sfxY9M~9>5lbqCxS?(z2&>W{FXQ5(OUts|s0;iPvL%kmHv3<3P`l$5bRBpCM zrfYLwp~y*F+4Uzz^d6kM(0 zhM^UOe*}E| zpAmN96qV?d?PjwRXnj-2od%7^7Ephls$?#@Zfzy>?ac0h7Tt#NvMLK=z~Nw&RqTDpwH|ISSU&(uukJq6^e49 z;TE%8Y_E2f-{xDALE0p2H92#uY^x%}217{GpsIoBMEcJ%oMqbWRBas)uxNt90{wk( z!V`nsGQI(Q`PB7jQ&6(^?CJQ-DwiQzPP)+Sh&4Bhp?j>zGgUO-in2UH`9=IyFw_s= z2hkCF7iycEDnWR1q;;T#9NK&D;!H3jxCU<*bnj7Fm7_IsI1-a&Xc9N9dCsnMJw+w7Qf7n&EJJneEGyh&Exeyj(6CBu~>FR%h|ovDz9sLzK$EFMn{UT28o|XP{oxxSxnoXEECn zaW`UzcYJUG-584zX-6h^{Uj#|kO^v5u;?ITbaI?7OxM?ZX-a*iZ2xRtL>t6eTJ*K= zh}`Cojgg@}AAJ(Ze;Mp%fu2oTcET{A516*p1!Nz!fVyil9}_QgBj7 zcFvoyj9tRfIZ$j{>nufW<*`WYwCz{+Fyj)e&s0z?HaJVcamWgm^-jr)bBHxK{G`iH zDrF~gCODr3v ztYD(cZrPgxCYzhZ?noID%@1RV4ge~&tvTI@@i_%If?A0$Z#lyvI10G9;rE3syjuz# zq1(f3_hcw+%I0tEXNWUuxmUfueiu`Ll?q~K-ZZl0e%~1$WgS~QIxJ@l^y_yBs~LKe z{`37`a_F{^@smECiO~LZnaxrbyrwz3(T|+tRPIy$gI=|_qazi;(KNk7`0MUt8GM_= zV;dps6yiiDYJD^3*e{Tt0q3_=5Ay#l#b$kaAWUbIq;ju{xn8~L3Z4|K7}WLl{6~hz z8t=AsN|~fhiR-!*m@`=m*l**P{p%EoxGxudmmFM+(JzUuFHOg8;^WxR zn~86AvCnY2^e??hI z3e4WQ?;N_xaxAHm6#H6@!=fQ71h1andj1ruo~M+3CxRNN5g?gFiep-?%!#A0FV7Ta zA4^);T#W;XL>?xys(bcNjI+;2Y98Ea!DviYSHzNOlxlc8Cy=8O6YY`v-kkbs5rlpZ z`faz~bm1Z=m_2DPi~foo>iM(pR%0&+`9b!+M2};-so`6;+UY0k7C!N5q<>1Myn-;Qck zoQ;WfoWy(@+kdu*SD8NR^dfCapu0ZU7t!v%9-v0wKOPBb@p1OOZJQ7cSD0fD9)uO| zGXq`i5MtlmVZ%O;Ph;g3n!E-D|JiZ|^X)w>a5&N08B6}B^t>ISZc6K|w=zS$&b@)d;x2{2EKa>LU**3vvlcE%b=b~LRME@$mt8-p6 zL?3m5;1)qS;n98a^QPlx(Me8>s#COaUx5ER%)_>yu)DYn=or z>LURiU)zJFNU}@fp7_Haec-%xk?bt~B!+|Da2(lJ0^OS21>ZtKNL6bdnEES(;|V?* zk^UIsPhW8{bdQP8%?+@syrHP$NssJy~*+nVxuB+8Q=_&GWxYYLsxwd z^z3jT=rTTOkTdAK%!PT{4x7g+;t%}BDSXa^sM?{f8>>{Ohpy7Ynwa4d_$(#u;|Q29 z>xSV7URhK#GL8H2BgC{9@rEEWE%uMhFqJ0Aq>pBt!Zfec-nrMehoZ3@5X3q^`8hdO zlA7PI+5Z+v>;&*-0H;ymk>k1G@s`X%FN92V{S&O`g~C1zE9ale(yqfWIh%jd0|Y)N zW{5^(;TDqC?|nXg706h^Ck_5hoTN%B)2sH&mJdo|y@K#ONv~%8s7erQ6gGbU%}jH~ z0dobungqM|6jf{?vgc2UB_CiM+F;8-^(l0!1ag89-1m!VJ=i_-1rP~6YMee(72KRG zC?oi4i3hr{3v5QPV3+;LPutlUVbPeGg&oV?!>1xESAGJNO+O)ocQaRxGQ=c5Upfpk z%*qU=QVu?Pk@=s)X6dM{CBhE-dro}PA03WBGpL%(T&UUvA47@|e57wgEq0-P7xa)W zpoYcj;MUVS8BOVy?QT{d5WT`j7tm8nxkPcss92=&x5h8=!FuebWi>WH8UDsc4M3me zVsv%vm}aFsI$>cO0dI+VdqY-;vDqP=Ie9~!q{__WYgk^dE0#82qScLl$^eOmQ8QMa zKeIgHcIFP?%MQJ!9>?5`Vm^OeoGwWhVhHH3PikQ_#wst<0}A(vd5M0+V7R?Wf7)(# z4xbl6)&Jx>jukbS1I?wUR%^D18Ei+~>Z3CG*r0ERgJU%$ML7y=Q{k{q4Rww~LmO(@ zsaRbHj+eMk!wLMe!heZLUY4Ab2z|UxJUxn+o^dk~9PAwux)`k6={yH-M0#cS&$}CA z-5pF+r$+6TV-fda=#69b+1p0#Fd6C5&(b||__nN0G0!h|eh!Gmyg+$wyDJw>_GOI6 z>|dITDhjTv-g=*BTV{066DbJvNTA~34AR;(o!#?Lqd(T?!eo|a8V((y_lp)Cm7{O1 z>#vW(4P|XYFMX6)#ElQ#2`UAmq3EvnVTN$y1Wm4>jpZS;q~edHM(@U z$z*t?-Ix}*79Bc+k1lhSPN^|{I$FwB^?hpRiLB~IKCBXS26&!UMYmZbv*{2Ik88r3 zzi)vj2WA@e3d*13@zVpJ;XJPvbU9Zu2(32`Z>Zq(SJg=@3MNIgW8D4O zSD|Ap&8ricKqc;EkO#9&aBMapFr3h5>xWjyle5p>^Oy6G@Eyc6oTJbt} zFpBI}JI&a<_OCjR6h&J8x-Z#P36|$X2deTLbqZSwffQAy`!x?}pcCv>8GoXiz25Pu z^roofIIYR6z1C##v;HGJ0w}guy9!nMxjGm}g0UH4{P01YF|elr7qXq@jN3Ev>3#^5 zg}Le0cTT2!Jijf<*2@5s$!Kzx(*OC8O{dU3R{gvw>E`Jy>Xgp1t?XW*E_*to73^6n z!sePyoz12($gOggxJt^hF<+sJ>~?kwLi_`66LCD^kCL?!JImUnW*`47nCC?iSgb)< z8|QXlH754ddzsVbt#=Rw&z(M@?@Mf0=*Fvm4FRidbXu5mMcQfOk~uN=HzPy-#Ix8ga|_r9jlcfF zIegT}w`hcgQ=}IS*31mf3spwl3%dxy!mp%Bg()I?|GnFh)iPR*1PAJ?7icVC=-oHo z1E)u^@M;qUCFZi#A7A*x`jF+SyftsLkb zc@R9Tj3gb8%WVWazR9evRG6+$vfiX)ol-_`d*D0I7?|Kck#J4X|7)v?&Nk3K(b@!V zKI8K~YZiS8D|Q=SATcxhqMSk3SVtt-nAFUOj;Xlc2d@@QW_4(WqhmDxEM6x?t1PRS zW974!!${-@Gz~fH;#6V%P&zSEAE!^^T!QNQ>aovhc)4FpvOn0qVRQgDFC}5RI5_Qn zb!|`1UKq;5Fr!ULAFlnS zjF<@9Y2HDgc1y6)U_Sc5pEmc&oPW=YMXY%^{?IY7&4A)#Fh2R&^iaSS4ocw&U%ps9 z^cc{Z1DiTH7ayzOTIySh6Y!%vCO_6=ppmj>X9BYQEd{SE`y*w>z0#w_hah_z4m|LW z2o|e}A<0?MkBnY;ZU;ov0EG1Ld-f{$4}T<=t7jfA9H06*xUPjuG&*b9&`GPgo`7|1i`6pXesa@Mg(xzbP_XP4ir^ zmbWyYLOClg{~mP@u$O<^!i3OMg9X_Il#S>7*2U!x ztQ0*d+L(vKVy(@@E*;qBhRBoLyJyfW_JqkdFixRFbfNCfGH76Z+i6YaLR!prq1=tm zWG#-atQ(8!*GXe_Xb<9}XGlXloMz{Q#>RH*m2CuiHWwc~{w(CB!U2P>$2|@H^KobQ z&kNN+3*6vhP+#Dg8g^1j0_vc~2%O|=`j=bULaTkD)pX}#@>Xd$yG&)NJ|n=t)9mE0 z>Xjr%T*d?fJm9-+Yi1gYC~El(IdL0 z&^1ya!9{~a>$LI2#RL1Cz3fB%hwk#g{n{jZ1$x#*1sQU(O+w{X2V7je)Pz=7#Te7b zV{U^yw#H&g#8m4q{v7Ow5nwTX>f_%_aDvKPxg)i%<)6d~_W$jGKHB62Iwx&*z?+mH ze<0s=K(CeL1Ue^2cK^9lO$#8i#9S(w)5%VtbL>xnRes)8VPWgR!qSB`rJo8q6jLyN za}T>bWILwSpZK7jpZvTYzysErqI!9S>)0<*eefLLolB?zwPcw+)Gf(}6tY)7Z{0(Z^W(<*p7kZWD+oh#3gVP8DN?oQ2!zA%#yvzCR zf4n`y6=&gCR;ZNz8158}vXo-qKAg#Nh1q74ZrCHO5Tx3(ceN@BD`00uR|!vO6DFLPjG*K+hX`BA zwNf;~DR4i>*VUP|XL(FiQn|NCq03AF&nbPj?Z9^MeyqLwvvI2vB+A3EEA#B5TBtsr z7_#%QkKB?1x2smB%+mMo5(QgeclbBTuu&sA>8=zDUs?05t9fK6jDA6w259n)oT}rtRGtb`J*BpKL1DZrH zTx`he6ui~P3N#;DD|6L7Rj(S$qS=i>r(Dqmoa3_fiLYG0oa>cR8Z%>GQG1`o(^ZPg zPm7(XiDLq@rkuIB0Ha<6`x-j(%gZ=}uCcHvi|c2PuFD5vXm)^zdI4+Pq)2?@a1s!Q z>g>w+)!c>|$HJeRKiEF_Gpe!_zB264Dn0Y;!t(G2A6@nJ?ZmLQf=)uiy(3@G#jgO( zo_3?LrIGD<@V3n!oG;s-medUv@fZ1doBO_OR~pBmjY`^^sQVrGWC$Z#*HMv^ceT&% zIp3fYmodb&Bi*Bf*g?7^E!%b5LaR2hiO7Bm|8oz!Bs3QGkZ#0V>4ao9@bDyUQZi>Y zR8Nf!tOfA*4&b$WNr8)69{<#{Hr9KWy&C&n_}<<^aF%XjdE*1oB#H63JLCFFDxlt~hjQNcE`mshCew@6#H^){Dcg`se@#4Z!) z^iXB+cyql{FSvdfT;$%dUzVA{S&d%Ln$nKVypkAhx@L!rlBZBM9Ls-Q9G(Uhs*Kf+ z#?U{E7Gmq8y{u=dp1qPB;}d0bU0v!5vAAPksmy~WsNq@y2khn*NB2FqOv{uE3*ib2 zK_ig6rbvQYtHlO#9&!0D=il9idhqXbS??Mp|0h`8VcdQj+M}K^m$19|-&V>7W zy7X+Z^pJXxE?Uoj%A@xWfj(u>vl8$!XkKvn4YKSO^-5<{o*4Cuy?i|$i2rD*q`@%<*8Kq^UZ~P*A{`KF@#2QkGlUROXB<#s-DTEVnIkT5>jjm_Vk~A z`#y(NS;Z%4W_hvaB3OWz_VMKb=h#Ym7EIE=kT> zOv{-RIv!m-0Kw8-*7N&L5(XMn)aLsa4@ZqwVX6+&Qd3)QOwp?kuOcccIk}Ze>-k9d~}6 zJd~O6np6^kP+ozS-=dvghd^L#Z50B zS&aZ2y;Oh&6~NCnXz4iO00r_SaIZxO1cu$eAewb@a>`Fwv3ih2sxh3=Ua)fEw# z+brAw*N#5DFdv%!0G}Tb$ff!s&54*@%N&NRcBm8&#>_?| z(XA}Wb;mqLw^(^An$J}vLW)j;qsO7f+m#m@T{~rtXk8ow;R@MHfLn%G{xEBibFM=p#B<#^jc%wY@et8+Z+?B8cD z2B8F8HJWr8)LFz~Nfopu5(OCz>mUz`%V5`KsHSFg9(PfR|=a)ij7W zZPQ)sq>YOh(!vi~7K2O)YL^!qh3GnSSi!uAO3uwEw=xxfhfZ9BW7V4270(aYPWtX*Gb zX^oz~fy>g4^fYN*hN(2ZI15frU}MeRO|mH#FJru>>+10xp|Ha+*7R`Fe`Chmz{vp2 zK701NEo^4M;8QO!_a+gU#mrkzLxqRN{r9i_ItATf3Pc&)wyHANWF=%+H~&f6HdvGm zaMS5I$NOJI3^wP%a$iPS_u9{I@Z&frLLhp8DgMb%;oSvYf&wCZJOYE8c?J0d2Q~`` ekMIm?7TPKsln2|ktn0ECT%F0~2L698F8>F6J!YE# literal 0 HcmV?d00001 diff --git a/routing-in-play/project/build.properties b/routing-in-play/project/build.properties new file mode 100644 index 0000000000..6d22e3f2d1 --- /dev/null +++ b/routing-in-play/project/build.properties @@ -0,0 +1,4 @@ +#Activator-generated Properties +#Fri Sep 30 14:25:10 EAT 2016 +template.uuid=26c759a5-daf0-4e02-bcfa-ac69725267c0 +sbt.version=0.13.11 diff --git a/routing-in-play/project/plugins.sbt b/routing-in-play/project/plugins.sbt new file mode 100644 index 0000000000..e8e7f602f7 --- /dev/null +++ b/routing-in-play/project/plugins.sbt @@ -0,0 +1,21 @@ +// The Play plugin +addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.8") + +// Web plugins +addSbtPlugin("com.typesafe.sbt" % "sbt-coffeescript" % "1.0.0") +addSbtPlugin("com.typesafe.sbt" % "sbt-less" % "1.1.0") +addSbtPlugin("com.typesafe.sbt" % "sbt-jshint" % "1.0.4") +addSbtPlugin("com.typesafe.sbt" % "sbt-rjs" % "1.0.8") +addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.1") +addSbtPlugin("com.typesafe.sbt" % "sbt-mocha" % "1.1.0") +addSbtPlugin("org.irundaia.sbt" % "sbt-sassify" % "1.4.6") + +// Play enhancer - this automatically generates getters/setters for public fields +// and rewrites accessors of these fields to use the getters/setters. Remove this +// plugin if you prefer not to have this feature, or disable on a per project +// basis using disablePlugins(PlayEnhancer) in your build.sbt +addSbtPlugin("com.typesafe.sbt" % "sbt-play-enhancer" % "1.1.0") + +// Play Ebean support, to enable, uncomment this line, and enable in your build.sbt using +// enablePlugins(PlayEbean). +// addSbtPlugin("com.typesafe.sbt" % "sbt-play-ebean" % "3.0.2") diff --git a/routing-in-play/public/images/favicon.png b/routing-in-play/public/images/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..c7d92d2ae47434d9a61c90bc205e099b673b9dd5 GIT binary patch literal 687 zcmV;g0#N;lP)ezT{T_ZJ?}AL z5NC{NW(ESID=>(O3&Eg8 zmA9J&6c`h4_f6L;=bU>_H8aNG`kfvCj9zomNt)?O;rzWqZs0LEt%1WB218%1fo9uB zsW^yhBR7C(mqN%GEK9&msg0~ zWY?#bf4q8G-~2KttQZ($odJvy&_-~f?9*ThK@fwR$U^1)p*8=_+^3BXx0$i1BC8XC zr21u6D5nVK&^!dOAw&|1E;qC3uFNj3*Jj#&%Oje@0D-nhfmM*o%^5f}-pxQ07(95H z3|LoV>V19w#rLgmRmtVy9!T3M3FUE3><0T8&b3yEsWcLW`0(=1+qsqc(k(ymBLK0h zK!6(6$7MX~M`-QA2$wk7n(7hhkJ}4Rwi-Vd(_ZFX1Yk7TXuB0IJYpo@kLb2G8m)E{ z`9v=!hi}fOytKckfN^C@6+Z*+MVI9-W_p@_3yyR#UYc0FTpD}i#k>c!wYCS)4v@E$ zchZCo=zV@)`v^$;V18ixdjFMY#q^2$wEX%{f(XD8POnsn$bpbClpC@hPxjzyO>pY|*pF3UU2tYcCN?rUk{Sskej70Mmu9vPwMYhO1m{AxAt(zqDT|0jP7FaX=6 V`?~}E4H^Id002ovPDHLkV1hC)G==~G literal 0 HcmV?d00001 diff --git a/routing-in-play/public/javascripts/hello.js b/routing-in-play/public/javascripts/hello.js new file mode 100644 index 0000000000..02ee13c7ca --- /dev/null +++ b/routing-in-play/public/javascripts/hello.js @@ -0,0 +1,3 @@ +if (window.console) { + console.log("Welcome to your Play application's JavaScript!"); +} diff --git a/routing-in-play/public/stylesheets/main.css b/routing-in-play/public/stylesheets/main.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/routing-in-play/test/ApplicationTest.java b/routing-in-play/test/ApplicationTest.java new file mode 100644 index 0000000000..3d7c4875aa --- /dev/null +++ b/routing-in-play/test/ApplicationTest.java @@ -0,0 +1,45 @@ +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import com.fasterxml.jackson.databind.JsonNode; +import org.junit.*; + +import play.mvc.*; +import play.test.*; +import play.data.DynamicForm; +import play.data.validation.ValidationError; +import play.data.validation.Constraints.RequiredValidator; +import play.i18n.Lang; +import play.libs.F; +import play.libs.F.*; +import play.twirl.api.Content; + +import static play.test.Helpers.*; +import static org.junit.Assert.*; + + +/** + * + * Simple (JUnit) tests that can call all parts of a play app. + * If you are interested in mocking a whole application, see the wiki for more details. + * + */ +public class ApplicationTest { + + @Test + public void simpleCheck() { + int a = 1 + 1; + assertEquals(2, a); + } + + @Test + public void renderTemplate() { + Content html = views.html.index.render("Your new application is ready."); + assertEquals("text/html", html.contentType()); + assertTrue(html.body().contains("Your new application is ready.")); + } + + +} diff --git a/routing-in-play/test/IntegrationTest.java b/routing-in-play/test/IntegrationTest.java new file mode 100644 index 0000000000..c53c71e124 --- /dev/null +++ b/routing-in-play/test/IntegrationTest.java @@ -0,0 +1,25 @@ +import org.junit.*; + +import play.mvc.*; +import play.test.*; + +import static play.test.Helpers.*; +import static org.junit.Assert.*; + +import static org.fluentlenium.core.filter.FilterConstructor.*; + +public class IntegrationTest { + + /** + * add your integration test here + * in this example we just check if the welcome page is being shown + */ + @Test + public void test() { + running(testServer(3333, fakeApplication(inMemoryDatabase())), HTMLUNIT, browser -> { + browser.goTo("http://localhost:3333"); + assertTrue(browser.pageSource().contains("Your new application is ready.")); + }); + } + +} From ee3db428800813821a5c42a2279018d40c906f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 4 Oct 2016 07:53:52 +0200 Subject: [PATCH 021/309] Add more examples (#712) * 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. * Add example for FileNotFoundException mini-article. * Add more examples. * Change examples to tests. --- .../FileNotFoundExceptionExample.java | 20 ------ .../exceptions/FileNotFoundExceptionTest.java | 64 +++++++++++++++++++ 2 files changed, 64 insertions(+), 20 deletions(-) delete mode 100644 core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java create mode 100644 core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java diff --git a/core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java b/core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java deleted file mode 100644 index 2ac4e49869..0000000000 --- a/core-java/src/main/java/com/baeldung/core/exceptions/FileNotFoundExceptionExample.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.core.exceptions; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; - -public class FileNotFoundExceptionExample { - - public static void main(String[] args) throws IOException { - BufferedReader rd = null; - try { - rd = new BufferedReader(new FileReader(new File("notExisting"))); - rd.readLine(); - } catch (FileNotFoundException ex) { - ex.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java new file mode 100644 index 0000000000..9180edfe81 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java @@ -0,0 +1,64 @@ +package org.baeldung.core.exceptions; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; + +import org.apache.log4j.Logger; +import org.junit.Test; + +public class FileNotFoundExceptionTest { + + private static final Logger LOG = Logger.getLogger(FileNotFoundExceptionTest.class); + + private String fileName = Double.toString(Math.random()); + + @Test(expected = BusinessException.class) + public void raiseBusinessSpecificException() throws IOException { + try { + readFailingFile(); + } catch (FileNotFoundException ex) { + throw new BusinessException("BusinessException: necessary file was not present.", ex); + } + } + + @Test + public void createFile() throws IOException { + try { + readFailingFile(); + } catch (FileNotFoundException ex) { + try { + new File(fileName).createNewFile(); + readFailingFile(); + System.out.println("File was created and read."); + } catch (IOException ioe) { + throw new RuntimeException("BusinessException: even creation is not possible.", ioe); + } + } + } + + @Test + public void logError() throws IOException { + try { + readFailingFile(); + } catch (FileNotFoundException ex) { + LOG.error("Optional file " + fileName + " was not found.", ex); + System.out.println("File was logged."); + } + } + + protected void readFailingFile() throws IOException { + BufferedReader rd = null; + rd = new BufferedReader(new FileReader(new File(fileName))); + rd.readLine(); + // no need to close file + } + + class BusinessException extends RuntimeException { + public BusinessException(String string, FileNotFoundException ex) { + super(string, ex); + } + } +} From f63ebcf854db7ed42250f20979cf296a288832ca Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Tue, 4 Oct 2016 10:49:07 +0200 Subject: [PATCH 022/309] Improvement to file uploading --- .../java/org/baeldung/okhttp/OkHttpFileUploadingTest.java | 8 ++++---- .../test/java/org/baeldung/okhttp/OkHttpPostingTest.java | 4 ++-- okhttp/src/test/resources/{test.in => test.txt} | 0 3 files changed, 6 insertions(+), 6 deletions(-) rename okhttp/src/test/resources/{test.in => test.txt} (100%) diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java index 6c43af6778..32457fc11b 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java @@ -29,8 +29,8 @@ public class OkHttpFileUploadingTest { RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .addFormDataPart("file", "file.txt", + RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) .build(); Request request = new Request.Builder() @@ -51,8 +51,8 @@ public class OkHttpFileUploadingTest { RequestBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .addFormDataPart("file", "file.txt", + RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) .build(); diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java index cdb7f2ac8d..1ba2d517c5 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java @@ -92,8 +92,8 @@ public class OkHttpPostingTest { .setType(MultipartBody.FORM) .addFormDataPart("username", "test") .addFormDataPart("password", "test") - .addFormDataPart("file", "file.ext", - RequestBody.create(MediaType.parse("image/png"), new File("src/test/resources/test.in"))) + .addFormDataPart("file", "file.txt", + RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) .build(); Request request = new Request.Builder() diff --git a/okhttp/src/test/resources/test.in b/okhttp/src/test/resources/test.txt similarity index 100% rename from okhttp/src/test/resources/test.in rename to okhttp/src/test/resources/test.txt From 3be90ef764e92fad6997c5f0e06736bff070889e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 4 Oct 2016 15:10:18 +0200 Subject: [PATCH 023/309] Update pom.xml From 87314b566eaab321c92b7950e3066b9cfe9d169a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 4 Oct 2016 15:11:31 +0200 Subject: [PATCH 024/309] Removed new line at end of file From 08c31ec84bfad7b558faffbcfd5775aa71361b3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Garc=C3=ADa=20Heredero?= Date: Tue, 4 Oct 2016 15:16:50 +0200 Subject: [PATCH 025/309] Update pom.xml --- spring-mvc-java/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 4faea93caa..264185f05b 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -253,3 +253,4 @@ + From 4a19a6ba88144cf52bd1ceaf040df1d2633ebc8a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 17:24:46 +0200 Subject: [PATCH 026/309] Simplify StudentStore --- play-framework/student-api/app/models/StudentStore.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/student-api/app/models/StudentStore.java index 01b565a22e..e665de399a 100644 --- a/play-framework/student-api/app/models/StudentStore.java +++ b/play-framework/student-api/app/models/StudentStore.java @@ -40,11 +40,6 @@ public class StudentStore { } public boolean deleteStudent(int id) { - Student student=students.remove(id); - if (student == null) - return false; - else - return true; - + return students.remove(id) != null; } } \ No newline at end of file From 1ecb726d7e068b520bc47808253cbaea7db7af96 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 17:29:49 +0200 Subject: [PATCH 027/309] Refactor StudentStore --- play-framework/student-api/app/models/StudentStore.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/student-api/app/models/StudentStore.java index e665de399a..1ebc14ffab 100644 --- a/play-framework/student-api/app/models/StudentStore.java +++ b/play-framework/student-api/app/models/StudentStore.java @@ -1,7 +1,7 @@ package models; import java.util.ArrayList; import java.util.HashMap; -import java.util.List; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -27,7 +27,7 @@ public class StudentStore { } public Set getAllStudents() { - return (Set)students.values(); + return new HashSet<>(students.values()); } public Student updateStudent(Student student) { From 0dc8119722702ea8f41f94a68673da0298351f7d Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 17:54:59 +0200 Subject: [PATCH 028/309] Refactor Play example --- .../app/controllers/AsyncController.java | 26 +++--- .../app/controllers/StudentController.java | 93 ++++++++++--------- .../student-api/app/models/StudentStore.java | 9 +- play-framework/student-api/app/util/Util.java | 24 ++--- 4 files changed, 82 insertions(+), 70 deletions(-) diff --git a/play-framework/student-api/app/controllers/AsyncController.java b/play-framework/student-api/app/controllers/AsyncController.java index 33cd112837..92c84bb755 100644 --- a/play-framework/student-api/app/controllers/AsyncController.java +++ b/play-framework/student-api/app/controllers/AsyncController.java @@ -1,13 +1,17 @@ package controllers; import akka.actor.ActorSystem; + import javax.inject.*; + import play.*; import play.mvc.*; + import java.util.concurrent.Executor; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.TimeUnit; + import scala.concurrent.duration.Duration; import scala.concurrent.ExecutionContextExecutor; @@ -17,11 +21,11 @@ import scala.concurrent.ExecutionContextExecutor; * asynchronously delay sending a response for 1 second. * * @param actorSystem We need the {@link ActorSystem}'s - * {@link Scheduler} to run code after a delay. - * @param exec We need a Java {@link Executor} to apply the result - * of the {@link CompletableFuture} and a Scala - * {@link ExecutionContext} so we can use the Akka {@link Scheduler}. - * An {@link ExecutionContextExecutor} implements both interfaces. + * {@link Scheduler} to run code after a delay. + * @param exec We need a Java {@link Executor} to apply the result + * of the {@link CompletableFuture} and a Scala + * {@link ExecutionContext} so we can use the Akka {@link Scheduler}. + * An {@link ExecutionContextExecutor} implements both interfaces. */ @Singleton public class AsyncController extends Controller { @@ -31,14 +35,14 @@ public class AsyncController extends Controller { @Inject public AsyncController(ActorSystem actorSystem, ExecutionContextExecutor exec) { - this.actorSystem = actorSystem; - this.exec = exec; + this.actorSystem = actorSystem; + this.exec = exec; } /** * An action that returns a plain text message after a delay * of 1 second. - * + *

    * The configuration in the routes file means that this method * will be called when the application receives a GET request with * a path of /message. @@ -50,9 +54,9 @@ public class AsyncController extends Controller { private CompletionStage getFutureMessage(long time, TimeUnit timeUnit) { CompletableFuture future = new CompletableFuture<>(); actorSystem.scheduler().scheduleOnce( - Duration.create(time, timeUnit), - () -> future.complete("Hi!"), - exec + Duration.create(time, timeUnit), + () -> future.complete("Hi!"), + exec ); return future; } diff --git a/play-framework/student-api/app/controllers/StudentController.java b/play-framework/student-api/app/controllers/StudentController.java index 08318733b5..8b759b9598 100644 --- a/play-framework/student-api/app/controllers/StudentController.java +++ b/play-framework/student-api/app/controllers/StudentController.java @@ -1,56 +1,63 @@ package controllers; -import models.*; -import util.*; -import play.mvc.*; -import play.libs.Json; -import play.libs.Json.*; -import com.fasterxml.jackson.databind.JsonNode; + +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import java.util.List; +import models.Student; +import models.StudentStore; +import play.libs.Json; +import play.mvc.Controller; +import play.mvc.Result; +import util.Util; + +import java.util.Set; public class StudentController extends Controller { public Result create() { - JsonNode json = request().body().asJson(); - if(json == null) - return badRequest(Util.createResponse("Expecting Json data",false)); - Student student=StudentStore.getInstance().addStudent((Student)Json.fromJson(json,Student.class)); - JsonNode jsonObject=Json.toJson(student); - return created(Util.createResponse(jsonObject,true)); - } - public Result update() { JsonNode json = request().body().asJson(); - if(json == null) - return badRequest(Util.createResponse("Expecting Json data",false)); - Student student=StudentStore.getInstance().updateStudent((Student)Json.fromJson(json,Student.class)); - if(student==null){ - return notFound(Util.createResponse("Student not found",false)); - } - - JsonNode jsonObject=Json.toJson(student); - return ok(Util.createResponse(jsonObject,true)); + if (json == null) { + return badRequest(Util.createResponse("Expecting Json data", false)); + } + Student student = StudentStore.getInstance().addStudent(Json.fromJson(json, Student.class)); + JsonNode jsonObject = Json.toJson(student); + return created(Util.createResponse(jsonObject, true)); } - public Result retrieve(int id) { - Student student=StudentStore.getInstance().getStudent(id); - if(student==null){ - return notFound(Util.createResponse("Student with id:"+id+" not found",false)); - } - JsonNode jsonObjects=Json.toJson(student); - return ok(Util.createResponse(jsonObjects,true)); - } - public Result listStudents() { - Set result=StudentStore.getInstance().getAllStudents(); - ObjectMapper mapper = new ObjectMapper(); - JsonNode jsonData=mapper.convertValue(result, JsonNode.class); - return ok(Util.createResponse(jsonData,true)); + public Result update() { + JsonNode json = request().body().asJson(); + if (json == null) { + return badRequest(Util.createResponse("Expecting Json data", false)); + } + Student student = StudentStore.getInstance().updateStudent(Json.fromJson(json, Student.class)); + if (student == null) { + return notFound(Util.createResponse("Student not found", false)); + } + + JsonNode jsonObject = Json.toJson(student); + return ok(Util.createResponse(jsonObject, true)); + } + + public Result retrieve(int id) { + if (StudentStore.getInstance().getStudent(id) == null) { + return notFound(Util.createResponse("Student with id:" + id + " not found", false)); + } + JsonNode jsonObjects = Json.toJson(StudentStore.getInstance().getStudent(id)); + return ok(Util.createResponse(jsonObjects, true)); + } + + public Result listStudents() { + Set result = StudentStore.getInstance().getAllStudents(); + ObjectMapper mapper = new ObjectMapper(); + + JsonNode jsonData = mapper.convertValue(result, JsonNode.class); + return ok(Util.createResponse(jsonData, true)); } - public Result delete(int id) { - boolean status=StudentStore.getInstance().deleteStudent(id); - if(!status){ - return notFound(Util.createResponse("Student with id:"+id+" not found",false)); - } - return ok(Util.createResponse("Student with id:"+id+" deleted",true)); + + public Result delete(int id) { + if (!StudentStore.getInstance().deleteStudent(id)) { + return notFound(Util.createResponse("Student with id:" + id + " not found", false)); + } + return ok(Util.createResponse("Student with id:" + id + " deleted", true)); } } diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/student-api/app/models/StudentStore.java index 1ebc14ffab..add6a5dbd6 100644 --- a/play-framework/student-api/app/models/StudentStore.java +++ b/play-framework/student-api/app/models/StudentStore.java @@ -1,5 +1,5 @@ package models; -import java.util.ArrayList; + import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -10,13 +10,14 @@ public class StudentStore { private Map students = new HashMap<>(); public static StudentStore getInstance() { - if (instance == null) + if (instance == null) { instance = new StudentStore(); + } return instance; } public Student addStudent(Student student) { - int id = students.size() + 1; + int id = students.size(); student.setId(id); students.put(id, student); return student; @@ -31,7 +32,7 @@ public class StudentStore { } public Student updateStudent(Student student) { - int id=student.getId(); + int id = student.getId(); if (students.containsKey(id)) { students.put(id, student); return student; diff --git a/play-framework/student-api/app/util/Util.java b/play-framework/student-api/app/util/Util.java index 3718b50677..a853a4cb43 100644 --- a/play-framework/student-api/app/util/Util.java +++ b/play-framework/student-api/app/util/Util.java @@ -1,17 +1,17 @@ package util; -import com.fasterxml.jackson.databind.node.ObjectNode; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import play.libs.Json; -import play.libs.Json.*; -import com.fasterxml.jackson.databind.JsonNode; -public class Util{ - public static ObjectNode createResponse(Object response,boolean ok){ - ObjectNode result = Json.newObject(); - result.put("isSuccessfull", ok); - if(response instanceof String) - result.put("body",(String)response); - else result.put("body",(JsonNode)response); +public class Util { + public static ObjectNode createResponse(Object response, boolean ok) { + ObjectNode result = Json.newObject(); + result.put("isSuccessfull", ok); + if (response instanceof String) + result.put("body", (String) response); + else result.put("body", (JsonNode) response); - return result; - } + return result; + } } \ No newline at end of file From f12e6ee2d032e939dfbe212121248a5c90856c60 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 18:11:37 +0200 Subject: [PATCH 029/309] Refactor FileNotFoundException examples --- .../exceptions/FileNotFoundExceptionTest.java | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java index 9180edfe81..5675fe274e 100644 --- a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java +++ b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java @@ -1,14 +1,10 @@ package org.baeldung.core.exceptions; -import java.io.BufferedReader; -import java.io.File; -import java.io.FileNotFoundException; -import java.io.FileReader; -import java.io.IOException; - import org.apache.log4j.Logger; import org.junit.Test; +import java.io.*; + public class FileNotFoundExceptionTest { private static final Logger LOG = Logger.getLogger(FileNotFoundExceptionTest.class); @@ -49,15 +45,14 @@ public class FileNotFoundExceptionTest { } } - protected void readFailingFile() throws IOException { - BufferedReader rd = null; - rd = new BufferedReader(new FileReader(new File(fileName))); + private void readFailingFile() throws IOException { + BufferedReader rd = new BufferedReader(new FileReader(new File(fileName))); rd.readLine(); // no need to close file } - class BusinessException extends RuntimeException { - public BusinessException(String string, FileNotFoundException ex) { + private class BusinessException extends RuntimeException { + BusinessException(String string, FileNotFoundException ex) { super(string, ex); } } From 2ef8bc2a6812c6f72cc7443aa5919efd615e35ba Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 18:12:08 +0200 Subject: [PATCH 030/309] Remove souts --- .../org/baeldung/core/exceptions/FileNotFoundExceptionTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java index 5675fe274e..23be2200d3 100644 --- a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java +++ b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java @@ -28,7 +28,6 @@ public class FileNotFoundExceptionTest { try { new File(fileName).createNewFile(); readFailingFile(); - System.out.println("File was created and read."); } catch (IOException ioe) { throw new RuntimeException("BusinessException: even creation is not possible.", ioe); } @@ -41,7 +40,6 @@ public class FileNotFoundExceptionTest { readFailingFile(); } catch (FileNotFoundException ex) { LOG.error("Optional file " + fileName + " was not found.", ex); - System.out.println("File was logged."); } } From 36134289938ecb49b4fcd541d2e39a5096a1d25b Mon Sep 17 00:00:00 2001 From: pared Date: Tue, 4 Oct 2016 18:35:37 +0200 Subject: [PATCH 031/309] random element from list guide (#690) * random element from list guide * refactor * with removing * refactor + thread optimized index generation * refactor * final review refactor --- .../com/baeldung/RandomListElementTest.java | 58 ++++++++++++++++++- 1 file changed, 57 insertions(+), 1 deletion(-) diff --git a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java index 8143da5794..85aaddbca8 100644 --- a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java +++ b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java @@ -3,15 +3,71 @@ package com.baeldung; import org.junit.Test; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; public class RandomListElementTest { @Test - public void givenList_whenRandomNumberChosen_shouldReturnARandomElement() { + public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingRandom() { List givenList = Arrays.asList(1, 2, 3); Random rand = new Random(); + givenList.get(rand.nextInt(givenList.size())); } + + @Test + public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingMathRandom() { + List givenList = Arrays.asList(1, 2, 3); + + givenList.get((int)(Math.random() * givenList.size())); + } + + @Test + public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat() { + Random rand = new Random(); + List givenList = Arrays.asList("one", "two", "three", "four"); + + int numberOfElements = 2; + + for (int i = 0; i < numberOfElements; i++) { + int randomIndex = rand.nextInt(givenList.size()); + givenList.get(randomIndex); + } + } + + @Test + public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() { + Random rand = new Random(); + List givenList = Arrays.asList("one", "two", "three", "four"); + + int numberOfElements = 2; + + for (int i = 0; i < numberOfElements; i++) { + int randomIndex = rand.nextInt(givenList.size()); + givenList.get(randomIndex); + givenList.remove(randomIndex); + } + } + + @Test + public void givenList_whenSeriesLengthChosen_shouldReturnRandomSeries() { + List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); + Collections.shuffle(givenList); + + int randomSeriesLength = 3; + + givenList.subList(0, randomSeriesLength - 1); + } + + @Test + public void givenList_whenRandomIndexChosen_shouldReturnElementThreadSafely() { + List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); + int randomIndex = ThreadLocalRandom.current().nextInt(10); + + givenList.get(randomIndex); + } + } From 1dd86be0ca429f84ca06dc5a0a2ce349d624dfd3 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 4 Oct 2016 19:16:35 +0200 Subject: [PATCH 032/309] Add module --- .../baeldung/okhttp/ProgressRequestWrapper.java | 14 ++++---------- pom.xml | 1 + 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java index 42df4ac1ee..6a98f8d20a 100644 --- a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java +++ b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java @@ -1,16 +1,11 @@ package org.baeldung.okhttp; -import okhttp3.RequestBody; import okhttp3.MediaType; +import okhttp3.RequestBody; +import okio.*; import java.io.IOException; -import okio.Buffer; -import okio.BufferedSink; -import okio.ForwardingSink; -import okio.Okio; -import okio.Sink; - public class ProgressRequestWrapper extends RequestBody { protected RequestBody delegate; @@ -65,9 +60,8 @@ public class ProgressRequestWrapper extends RequestBody { } - public static interface ProgressListener { - - public void onRequestProgress(long bytesWritten, long contentLength); + public interface ProgressListener { + void onRequestProgress(long bytesWritten, long contentLength); } } diff --git a/pom.xml b/pom.xml index 07d1d2bf65..6a83fe026e 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,7 @@ rest-assured rest-testing resteasy + okhttp spring-all spring-akka From d0c9040cb9ddfb2289655afb3bb77aa12fc72feb Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 5 Oct 2016 00:12:42 -0400 Subject: [PATCH 033/309] spring-jms new project --- spring-jms/pom.xml | 57 +++++++++++++++++++ .../src/com/baeldung/spring/jms/Employee.java | 19 +++++++ .../baeldung/spring/jms/SampleJMSExample.java | 17 ++++++ .../spring/jms/SampleJmsMessageSender.java | 32 +++++++++++ .../baeldung/spring/jms/SampleListener.java | 23 ++++++++ .../spring/jms/SampleMessageConverter.java | 29 ++++++++++ .../src/main/resources/applicationContext.xml | 30 ++++++++++ 7 files changed, 207 insertions(+) create mode 100644 spring-jms/pom.xml create mode 100644 spring-jms/src/com/baeldung/spring/jms/Employee.java create mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java create mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java create mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleListener.java create mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java create mode 100644 spring-jms/src/main/resources/applicationContext.xml diff --git a/spring-jms/pom.xml b/spring-jms/pom.xml new file mode 100644 index 0000000000..8f78469989 --- /dev/null +++ b/spring-jms/pom.xml @@ -0,0 +1,57 @@ + + 4.0.0 + com.baeldung + spring-jms + 0.0.1-SNAPSHOT + war + spring-jms + Introduction to Spring JMS + + + 4.3.2.RELEASE + 5.12.0 + + + + + + org.springframework + spring-jms + ${springframework.version} + + + + org.apache.activemq + activemq-all + ${activemq.version} + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.2 + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-war-plugin + 2.4 + + src/main/webapp + spring-jms + false + + + + + spring-jms + + \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/Employee.java b/spring-jms/src/com/baeldung/spring/jms/Employee.java new file mode 100644 index 0000000000..8b45607b38 --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/Employee.java @@ -0,0 +1,19 @@ +package com.baeldung.spring.jms; + +public class Employee { + private String name; + private Integer age; + public Employee(String name, Integer age) { + this.name = name; + this.age = age; + } + public String getName() { + return name; + } + public Integer getAge() { + return age; + } + public String toString() { + return "Person: name(" + name + "), age(" + age + ")"; + } +} diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java b/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java new file mode 100644 index 0000000000..bdde97b82d --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java @@ -0,0 +1,17 @@ +package com.baeldung.spring.jms; + +import java.net.URI; +import java.net.URISyntaxException; + +import org.apache.activemq.broker.BrokerFactory; +import org.apache.activemq.broker.BrokerService; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class SampleJMSExample { + public static void main(String[] args) throws URISyntaxException, Exception { + BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)")); + broker.start(); + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); + + } +} diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java new file mode 100644 index 0000000000..e3eccea03e --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -0,0 +1,32 @@ +package com.baeldung.spring.jms; + +import javax.jms.ConnectionFactory; +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.Queue; +import javax.jms.Session; + +import org.springframework.jms.core.JmsTemplate; +import org.springframework.jms.core.MessageCreator; + +public class SampleJmsMessageSender { + + private JmsTemplate jmsTemplate; + private Queue queue; + + public void setConnectionFactory(ConnectionFactory cf) { + this.jmsTemplate = new JmsTemplate(cf); + } + + public void setQueue(Queue queue) { + this.queue = queue; + } + + public void simpleSend() { + this.jmsTemplate.send(this.queue, new MessageCreator() { + public Message createMessage(Session session) throws JMSException { + return session.createTextMessage("hello queue world"); + } + }); + } +} \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/com/baeldung/spring/jms/SampleListener.java new file mode 100644 index 0000000000..466cac44a0 --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/SampleListener.java @@ -0,0 +1,23 @@ +package com.baeldung.spring.jms; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; + +public class SampleListener implements MessageListener { + + private String textMessage; + + public void onMessage(Message message) { + if (message instanceof TextMessage) { + try { + textMessage = ((TextMessage) message).getText(); + } catch (JMSException ex) { + throw new RuntimeException(ex); + } + } else { + throw new IllegalArgumentException("Message Error"); + } + } +} \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java new file mode 100644 index 0000000000..ff8767c78d --- /dev/null +++ b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java @@ -0,0 +1,29 @@ +package com.baeldung.spring.jms; + +import javax.jms.JMSException; +import javax.jms.MapMessage; +import javax.jms.Message; +import javax.jms.Session; + +import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.jms.support.converter.MessageConverter; + +public class SampleMessageConverter implements MessageConverter{ + + public Message toMessage(Object object, Session session) + throws JMSException, MessageConversionException { + Employee person = (Employee) object; + MapMessage message = session.createMapMessage(); + message.setString("name", person.getName()); + message.setInt("age", person.getAge()); + return message; + } + + public Object fromMessage(Message message) throws JMSException, + MessageConversionException { + MapMessage mapMessage = (MapMessage) message; + Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); + return person; + } + +} diff --git a/spring-jms/src/main/resources/applicationContext.xml b/spring-jms/src/main/resources/applicationContext.xml new file mode 100644 index 0000000000..c15289763f --- /dev/null +++ b/spring-jms/src/main/resources/applicationContext.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From ee9f0336b54030124a6937d828755a609dff9314 Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 5 Oct 2016 00:14:21 -0400 Subject: [PATCH 034/309] Updated indentation --- .../spring/jms/SampleMessageConverter.java | 28 +++++++++---------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java index ff8767c78d..856e0e9e49 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java +++ b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java @@ -8,22 +8,20 @@ import javax.jms.Session; import org.springframework.jms.support.converter.MessageConversionException; import org.springframework.jms.support.converter.MessageConverter; -public class SampleMessageConverter implements MessageConverter{ +public class SampleMessageConverter implements MessageConverter { - public Message toMessage(Object object, Session session) - throws JMSException, MessageConversionException { - Employee person = (Employee) object; - MapMessage message = session.createMapMessage(); - message.setString("name", person.getName()); - message.setInt("age", person.getAge()); - return message; - } + public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { + Employee person = (Employee) object; + MapMessage message = session.createMapMessage(); + message.setString("name", person.getName()); + message.setInt("age", person.getAge()); + return message; + } - public Object fromMessage(Message message) throws JMSException, - MessageConversionException { - MapMessage mapMessage = (MapMessage) message; - Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); - return person; - } + public Object fromMessage(Message message) throws JMSException, MessageConversionException { + MapMessage mapMessage = (MapMessage) message; + Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); + return person; + } } From 2010fd9a87c2b71387300b4c94b081a8f9f0371a Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 5 Oct 2016 00:14:59 -0400 Subject: [PATCH 035/309] Updated indentation --- .../src/com/baeldung/spring/jms/Employee.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/Employee.java b/spring-jms/src/com/baeldung/spring/jms/Employee.java index 8b45607b38..a0346c4291 100644 --- a/spring-jms/src/com/baeldung/spring/jms/Employee.java +++ b/spring-jms/src/com/baeldung/spring/jms/Employee.java @@ -3,17 +3,21 @@ package com.baeldung.spring.jms; public class Employee { private String name; private Integer age; + public Employee(String name, Integer age) { - this.name = name; - this.age = age; + this.name = name; + this.age = age; } + public String getName() { - return name; + return name; } + public Integer getAge() { - return age; + return age; } + public String toString() { - return "Person: name(" + name + "), age(" + age + ")"; + return "Person: name(" + name + "), age(" + age + ")"; } } From 28a0a5c80e7f240bf674b7a9189dcffc4f688969 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:08:12 +0200 Subject: [PATCH 036/309] BAEL-39 - removing the commented deps --- log4j/pom.xml | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/log4j/pom.xml b/log4j/pom.xml index 586769aa71..1081513dcf 100644 --- a/log4j/pom.xml +++ b/log4j/pom.xml @@ -15,13 +15,6 @@ log4j 1.2.17 - @@ -40,13 +33,6 @@ disruptor 3.3.4 - @@ -54,14 +40,6 @@ logback-classic 1.1.7 - - From db25745f05072df2d75152a7a35f6b684ccb1945 Mon Sep 17 00:00:00 2001 From: Sunil Gulabani Date: Tue, 4 Oct 2016 09:40:43 +0200 Subject: [PATCH 037/309] BAEL-255 - adding additional read file methods --- .../com/baeldung/file/FileOperationsTest.java | 122 ++++++++++++++---- 1 file changed, 94 insertions(+), 28 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index b1476b6360..9f0781ca02 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -1,17 +1,24 @@ package com.baeldung.file; -import org.hamcrest.Matchers; -import org.junit.Assert; -import org.junit.Test; - import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.function.Consumer; +import java.util.stream.Stream; -import static org.hamcrest.CoreMatchers.containsString; +import org.apache.commons.io.FileUtils; +import org.hamcrest.CoreMatchers; +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Test; public class FileOperationsTest { @@ -20,34 +27,22 @@ public class FileOperationsTest { String expectedData = "Hello World from fileTest.txt!!!"; ClassLoader classLoader = getClass().getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream("fileTest.txt"); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + InputStream inputStream = new FileInputStream(file); String data = readFromInputStream(inputStream); - - Assert.assertThat(data, containsString(expectedData)); -} - - @Test - public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; - - Class clazz = FileOperationsTest.class; - InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); - String data = readFromInputStream(inputStream); - - Assert.assertThat(data, containsString(expectedData)); + + Assert.assertEquals(expectedData, data.trim()); } @Test - public void givenURLName_whenUsingURL_thenFileData() throws IOException { - String expectedData = "Baeldung"; - - URL urlObject = new URL("http://www.baeldung.com/"); - URLConnection urlConnection = urlObject.openConnection(); - - InputStream inputStream = urlConnection.getInputStream(); + public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest_2.txt!!!"; + + Class clazz = FileOperationsTest.class; + InputStream inputStream = clazz.getResourceAsStream("/fileTest_2.txt"); String data = readFromInputStream(inputStream); - Assert.assertThat(data, containsString(expectedData)); + Assert.assertEquals(expectedData, data.trim()); } @Test @@ -58,9 +53,80 @@ public class FileOperationsTest { InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt"); String data = readFromInputStream(inputStream); - Assert.assertThat(data, containsString(expectedData)); + Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); } + /*@Test + public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { + String expectedData = "BSD License"; + + Class clazz = Matchers.class; + ClassLoader classLoader = clazz.getClassLoader(); + InputStream inputStream = classLoader.getResourceAsStream("LICENSE.txt"); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + }*/ + + @Test + public void givenURLName_whenUsingURL_thenFileData() throws IOException { + String expectedData = "Baeldung"; + + URL urlObject = new URL("http://www.baeldung.com/"); + + URLConnection urlConnection = urlObject.openConnection(); + + InputStream inputStream = urlConnection.getInputStream(); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + } + + @Test + public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + String data = FileUtils.readFileToString(file); + + Assert.assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + Path path = Paths.get(file.getAbsolutePath()); + + byte[] fileBytes = Files.readAllBytes(path); + String data = new String(fileBytes); + + Assert.assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + Path path = Paths.get(file.getAbsolutePath()); + + StringBuilder data = new StringBuilder(); + Stream lines = Files.lines(path); + lines.forEach(new Consumer() { + @Override + public void accept(String line) { + data.append(line).append("\n"); + } + }); + + Assert.assertEquals(expectedData, data.toString().trim()); + } + private String readFromInputStream(InputStream inputStream) throws IOException { InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); From ece6eab71912ba3e3dbee12ce97811dd324deb24 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:16:32 +0200 Subject: [PATCH 038/309] BAEL-255 - minor changes --- .../java/com/baeldung/file/FileOperationsTest.java | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 9f0781ca02..fc54055be7 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -56,18 +56,6 @@ public class FileOperationsTest { Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); } - /*@Test - public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { - String expectedData = "BSD License"; - - Class clazz = Matchers.class; - ClassLoader classLoader = clazz.getClassLoader(); - InputStream inputStream = classLoader.getResourceAsStream("LICENSE.txt"); - String data = readFromInputStream(inputStream); - - Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); - }*/ - @Test public void givenURLName_whenUsingURL_thenFileData() throws IOException { String expectedData = "Baeldung"; From 7b587286a49d803150380a428e2365a2214160d8 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:23:26 +0200 Subject: [PATCH 039/309] BAEL-255 - adding test file --- core-java-8/src/main/resources/fileTest_2.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 core-java-8/src/main/resources/fileTest_2.txt diff --git a/core-java-8/src/main/resources/fileTest_2.txt b/core-java-8/src/main/resources/fileTest_2.txt new file mode 100644 index 0000000000..454301d4f3 --- /dev/null +++ b/core-java-8/src/main/resources/fileTest_2.txt @@ -0,0 +1 @@ +Hello World from fileTest_2.txt!!! \ No newline at end of file From ea39b9cacf9a72825a0deb182a1d7abcebba65d0 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:24:26 +0200 Subject: [PATCH 040/309] BAEL-255 - minor changes --- core-java-8/src/main/resources/fileTest_2.txt | 1 - .../src/test/java/com/baeldung/file/FileOperationsTest.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) delete mode 100644 core-java-8/src/main/resources/fileTest_2.txt diff --git a/core-java-8/src/main/resources/fileTest_2.txt b/core-java-8/src/main/resources/fileTest_2.txt deleted file mode 100644 index 454301d4f3..0000000000 --- a/core-java-8/src/main/resources/fileTest_2.txt +++ /dev/null @@ -1 +0,0 @@ -Hello World from fileTest_2.txt!!! \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index fc54055be7..1dd1be7808 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -36,10 +36,10 @@ public class FileOperationsTest { @Test public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest_2.txt!!!"; + String expectedData = "Hello World from fileTest.txt!!!"; Class clazz = FileOperationsTest.class; - InputStream inputStream = clazz.getResourceAsStream("/fileTest_2.txt"); + InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); String data = readFromInputStream(inputStream); Assert.assertEquals(expectedData, data.trim()); From 05c685941257084244ac57b811ba7e6880380703 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 5 Oct 2016 07:34:29 +0200 Subject: [PATCH 041/309] BAEL-297 - passed list as a constructor creation. Array.aslist returns a fixed lenght list and throws exception on remove --- .../src/test/java/com/baeldung/RandomListElementTest.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java index 85aaddbca8..540a8c0af9 100644 --- a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java +++ b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java @@ -2,10 +2,7 @@ package com.baeldung; import org.junit.Test; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Random; +import java.util.*; import java.util.concurrent.ThreadLocalRandom; public class RandomListElementTest { @@ -41,7 +38,7 @@ public class RandomListElementTest { @Test public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() { Random rand = new Random(); - List givenList = Arrays.asList("one", "two", "three", "four"); + List givenList = new LinkedList<>(Arrays.asList("one", "two", "three", "four")); int numberOfElements = 2; From 8ec4c8c265d7c67a5ea5748de2d916a5e463f39a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 5 Oct 2016 07:50:21 +0200 Subject: [PATCH 042/309] Refactor --- .../src/test/java/com/baeldung/RandomListElementTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java index 540a8c0af9..c6d4ded104 100644 --- a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java +++ b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java @@ -1,5 +1,6 @@ package com.baeldung; +import com.google.common.collect.Lists; import org.junit.Test; import java.util.*; @@ -38,7 +39,7 @@ public class RandomListElementTest { @Test public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() { Random rand = new Random(); - List givenList = new LinkedList<>(Arrays.asList("one", "two", "three", "four")); + List givenList = Lists.newArrayList("one", "two", "three", "four"); int numberOfElements = 2; @@ -62,7 +63,7 @@ public class RandomListElementTest { @Test public void givenList_whenRandomIndexChosen_shouldReturnElementThreadSafely() { List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); - int randomIndex = ThreadLocalRandom.current().nextInt(10); + int randomIndex = ThreadLocalRandom.current().nextInt(10) % givenList.size(); givenList.get(randomIndex); } From 03dbd93be250f1bc2bdb9dd8709828a1ae9adef1 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Wed, 5 Oct 2016 22:35:11 +0300 Subject: [PATCH 043/309] custom user repository and test --- .../WebContent/META-INF/MANIFEST.MF | 3 + spring-security-custom-permission/derby.log | 13 ++ spring-security-custom-permission/pom.xml | 42 +++++ .../baeldung/config/PersistenceConfig.java | 87 +++++++++++ .../org/baeldung/config/SecurityConfig.java | 19 +++ .../persistence/dao/MyUserRepository.java | 146 ++++++++++++++++++ .../persistence/dao/UserRepository.java | 2 + .../org/baeldung/persistence/model/User.java | 2 + .../resources/persistence-derby.properties | 12 ++ .../web/CustomUserDetailsServiceTest.java | 83 ++++++++++ 10 files changed, 409 insertions(+) create mode 100644 spring-security-custom-permission/WebContent/META-INF/MANIFEST.MF create mode 100644 spring-security-custom-permission/derby.log create mode 100644 spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java create mode 100644 spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/MyUserRepository.java create mode 100644 spring-security-custom-permission/src/main/resources/persistence-derby.properties create mode 100644 spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java diff --git a/spring-security-custom-permission/WebContent/META-INF/MANIFEST.MF b/spring-security-custom-permission/WebContent/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..254272e1c0 --- /dev/null +++ b/spring-security-custom-permission/WebContent/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Class-Path: + diff --git a/spring-security-custom-permission/derby.log b/spring-security-custom-permission/derby.log new file mode 100644 index 0000000000..3c0968fa9c --- /dev/null +++ b/spring-security-custom-permission/derby.log @@ -0,0 +1,13 @@ +---------------------------------------------------------------- +Wed Oct 05 21:59:32 EEST 2016: +Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance a816c00e-0157-9637-0b63-000000c038f0 +on database directory memory:C:\Users\lore\Documents\workspace-articles\spring-security-custom-permission\spring_custom_user_service with class loader sun.misc.Launcher$AppClassLoader@6433a2 +Loaded from file:/C:/Users/lore/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar +java.vendor=Oracle Corporation +java.runtime.version=1.8.0_77-b03 +user.dir=C:\Users\lore\Documents\workspace-articles\spring-security-custom-permission +os.name=Windows 7 +os.arch=x86 +os.version=6.1 +derby.system.home=null +Database Class Loader started - derby.database.classpath='' diff --git a/spring-security-custom-permission/pom.xml b/spring-security-custom-permission/pom.xml index 6f460f1751..d036975107 100644 --- a/spring-security-custom-permission/pom.xml +++ b/spring-security-custom-permission/pom.xml @@ -86,6 +86,48 @@ + + + org.springframework + spring-test + test + + + + org.apache.derby + derby + 10.12.1.1 + + + org.apache.derby + derbyclient + 10.12.1.1 + + + org.apache.derby + derbynet + 10.12.1.1 + + + org.apache.derby + derbytools + 10.12.1.1 + + + taglibs + standard + 1.1.2 + + + org.springframework.security + spring-security-taglibs + 4.1.3.RELEASE + + + javax.servlet.jsp.jstl + jstl-api + 1.2 + diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java new file mode 100644 index 0000000000..cd7caa5fd1 --- /dev/null +++ b/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java @@ -0,0 +1,87 @@ +package org.baeldung.config; + +import java.util.Properties; + +import javax.persistence.EntityManagerFactory; +import javax.sql.DataSource; + +import org.baeldung.persistence.dao.MyUserRepository; +import org.baeldung.persistence.dao.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.env.Environment; +import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.orm.jpa.JpaTransactionManager; +import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; +import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +@Configuration +@EnableTransactionManagement +@PropertySource({ "classpath:persistence-derby.properties" }) +public class PersistenceConfig { + + @Autowired + private Environment env; + + public PersistenceConfig() { + super(); + } + + // beans + + @Bean + public LocalContainerEntityManagerFactoryBean myEmf() { + final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); + em.setDataSource(dataSource()); + em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); + + final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); + em.setJpaVendorAdapter(vendorAdapter); + em.setJpaProperties(additionalProperties()); + + return em; + } + + @Bean + public DataSource dataSource() { + final DriverManagerDataSource dataSource = new DriverManagerDataSource(); + dataSource.setDriverClassName(env.getProperty("jdbc.driverClassName")); + dataSource.setUrl(env.getProperty("jdbc.url")); + dataSource.setUsername(env.getProperty("jdbc.user")); + dataSource.setPassword(env.getProperty("jdbc.pass")); + + return dataSource; + } + + @Bean + public PlatformTransactionManager transactionManager(final EntityManagerFactory emf) { + final JpaTransactionManager transactionManager = new JpaTransactionManager(); + transactionManager.setEntityManagerFactory(emf); + return transactionManager; + } + + @Bean + public PersistenceExceptionTranslationPostProcessor exceptionTranslation() { + return new PersistenceExceptionTranslationPostProcessor(); + } + + final Properties additionalProperties() { + final Properties hibernateProperties = new Properties(); + hibernateProperties.setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto")); + hibernateProperties.setProperty("hibernate.dialect", env.getProperty("hibernate.dialect")); + hibernateProperties.setProperty("hibernate.cache.use_second_level_cache", env.getProperty("hibernate.cache.use_second_level_cache")); + hibernateProperties.setProperty("hibernate.cache.use_query_cache", env.getProperty("hibernate.cache.use_query_cache")); + // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true"); + return hibernateProperties; + } + + @Bean + public UserRepository userRepository(){ + return new MyUserRepository(); + } +} \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java index b365744bea..21b81741ee 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java @@ -1,14 +1,20 @@ package org.baeldung.config; +import org.baeldung.persistence.dao.MyUserRepository; +import org.baeldung.persistence.dao.UserRepository; import org.baeldung.security.MyUserDetailsService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; +import org.springframework.security.authentication.dao.DaoAuthenticationProvider; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; 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; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; @Configuration @EnableWebSecurity @@ -40,4 +46,17 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { ; // @formatter:on } + + @Bean + public DaoAuthenticationProvider authenticationProvider() { + final DaoAuthenticationProvider authProvider = new DaoAuthenticationProvider(); + authProvider.setUserDetailsService(userDetailsService); + authProvider.setPasswordEncoder(encoder()); + return authProvider; + } + + @Bean + public PasswordEncoder encoder() { + return new BCryptPasswordEncoder(11); + } } \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/MyUserRepository.java b/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/MyUserRepository.java new file mode 100644 index 0000000000..ee290a0c35 --- /dev/null +++ b/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/MyUserRepository.java @@ -0,0 +1,146 @@ +package org.baeldung.persistence.dao; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.Query; + +import org.baeldung.persistence.model.User; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Sort; +import org.springframework.transaction.annotation.Transactional; + +@Transactional +public class MyUserRepository implements UserRepository { + + @PersistenceContext + private EntityManager entityManager; + + @Override + public List findAll() { + // TODO Auto-generated method stub + return null; + } + + @Override + public List findAll(Sort sort) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List findAll(Iterable ids) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List save(Iterable entities) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void flush() { + // TODO Auto-generated method stub + + } + + @Override + public S saveAndFlush(S entity) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void deleteInBatch(Iterable entities) { + // TODO Auto-generated method stub + + } + + @Override + public void deleteAllInBatch() { + // TODO Auto-generated method stub + + } + + @Override + public User getOne(Long id) { + // TODO Auto-generated method stub + return null; + } + + @Override + public Page findAll(Pageable arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + public long count() { + // TODO Auto-generated method stub + return 0; + } + + @Override + public void delete(Long arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void delete(User arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void delete(Iterable arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void deleteAll() { + // TODO Auto-generated method stub + + } + + @Override + public boolean exists(Long arg0) { + // TODO Auto-generated method stub + return false; + } + + @Override + public User findOne(Long arg0) { + // TODO Auto-generated method stub + return null; + } + + @Override + public S save(S user) { + entityManager.persist(user); + return user; + } + + @Override + public User findByUsername(String username) { + Query query = entityManager.createQuery("from User where username=:username", User.class); + query.setParameter("username", username); + List result = query.getResultList(); + if (result != null && result.size() > 0) { + return result.get(0); + } else + return null; + } + + public void removeUserByUsername(String username) { + final Query query = entityManager.createQuery("delete from User where username=:username"); + query.setParameter("username", username); + query.executeUpdate(); + } + +} diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/UserRepository.java b/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/UserRepository.java index 679dd6c363..8b4e20d146 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/UserRepository.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/UserRepository.java @@ -6,5 +6,7 @@ import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository { User findByUsername(final String username); + + void removeUserByUsername(String username); } diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/persistence/model/User.java b/spring-security-custom-permission/src/main/java/org/baeldung/persistence/model/User.java index 112d502105..67f18c1398 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/persistence/model/User.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/persistence/model/User.java @@ -12,8 +12,10 @@ import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.ManyToOne; +import javax.persistence.Table; @Entity +@Table(name="user_table") public class User { @Id diff --git a/spring-security-custom-permission/src/main/resources/persistence-derby.properties b/spring-security-custom-permission/src/main/resources/persistence-derby.properties new file mode 100644 index 0000000000..e808fdc288 --- /dev/null +++ b/spring-security-custom-permission/src/main/resources/persistence-derby.properties @@ -0,0 +1,12 @@ +# jdbc.X +jdbc.driverClassName=org.apache.derby.jdbc.EmbeddedDriver +jdbc.url=jdbc:derby:memory:spring_custom_user_service;create=true +jdbc.user=tutorialuser +jdbc.pass=tutorialpass + +# hibernate.X +hibernate.dialect=org.hibernate.dialect.DerbyDialect +hibernate.show_sql=false +hibernate.hbm2ddl.auto=create +hibernate.cache.use_second_level_cache=false +hibernate.cache.use_query_cache=false \ No newline at end of file diff --git a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java new file mode 100644 index 0000000000..390bd7c96c --- /dev/null +++ b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java @@ -0,0 +1,83 @@ +package org.baeldung.web; + +import org.baeldung.config.MvcConfig; +import org.baeldung.config.PersistenceConfig; +import org.baeldung.config.SecurityConfig; +import org.baeldung.persistence.dao.UserRepository; +import org.baeldung.persistence.model.User; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.security.authentication.AuthenticationProvider; +import org.springframework.security.authentication.BadCredentialsException; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.Authentication; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import static org.junit.Assert.*; + +import java.util.logging.Level; +import java.util.logging.Logger; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = { MvcConfig.class, SecurityConfig.class, PersistenceConfig.class }) +@WebAppConfiguration +public class CustomUserDetailsServiceTest { + + private static final Logger LOG = Logger.getLogger("CustomUserDetailsServiceTest"); + + public static final String USERNAME = "user"; + public static final String PASSWORD = "pass"; + public static final String USERNAME2 = "user2"; + + @Autowired + UserRepository myUserRepository; + + @Autowired + AuthenticationProvider authenticationProvider; + + @Test + public void givenExistingUser_whenAuthenticate_thenRetrieveFromDb() { + try { + User user = new User(); + user.setUsername(USERNAME); + user.setPassword(PASSWORD); + + myUserRepository.save(user); + + UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(USERNAME, PASSWORD); + Authentication authentication = authenticationProvider.authenticate(auth); + + assertEquals(authentication.getName(), USERNAME); + + } catch (Exception exc) { + LOG.log(Level.SEVERE, "Error creating account"); + } finally { + myUserRepository.removeUserByUsername(USERNAME); + } + } + + @Test (expected = BadCredentialsException.class) + public void givenIncorrectUser_whenAuthenticate_thenBadCredentialsException() { + try { + User user = new User(); + user.setUsername(USERNAME); + user.setPassword(PASSWORD); + + try { + myUserRepository.save(user); + } + catch (Exception exc) { + LOG.log(Level.SEVERE, "Error creating account"); + } + + UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(USERNAME2, PASSWORD); + Authentication authentication = authenticationProvider.authenticate(auth); + } + finally { + myUserRepository.removeUserByUsername(USERNAME); + } + } + +} From ea6353917dac20a8b99c0cb37e0545932923f6dc Mon Sep 17 00:00:00 2001 From: Zeger Hendrikse Date: Wed, 5 Oct 2016 22:15:30 +0200 Subject: [PATCH 044/309] Fixed compilation errors --- .../com/baeldung/selenium/junit/TestSeleniumWithJUnit.java | 3 ++- .../com/baeldung/selenium/testng/TestSeleniumWithTestNG.java | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) 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 index dabb1e1988..f183a613e7 100644 --- 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 @@ -1,6 +1,7 @@ package test.java.com.baeldung.selenium.junit; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; import main.java.com.baeldung.selenium.SeleniumExample; import org.junit.After; @@ -25,7 +26,7 @@ public class TestSeleniumWithJUnit { @Test public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { String actualTitle = seleniumExample.getTitle(); - assertNotNull(actualTitle); + assertNotNull(actualTitle); 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 index 78ef8b8dfb..3c94f3d440 100644 --- 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 @@ -1,6 +1,7 @@ package test.java.com.baeldung.selenium.testng; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; import main.java.com.baeldung.selenium.SeleniumExample; import org.testng.annotations.AfterSuite; @@ -10,7 +11,7 @@ import org.testng.annotations.Test; public class TestSeleniumWithTestNG { private SeleniumExample seleniumExample; - private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; + private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; @BeforeSuite public void setUp() { @@ -25,7 +26,7 @@ public class TestSeleniumWithTestNG { @Test public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { String actualTitle = seleniumExample.getTitle(); - assertNotNull(actualTitle); + assertNotNull(actualTitle); assertEquals(actualTitle, expectedTitle); } } From 86637c2e64727f99b02c65aec53618edab8c3773 Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 10:59:29 +0300 Subject: [PATCH 045/309] Created README.MD --- annotations/readme.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 annotations/readme.md diff --git a/annotations/readme.md b/annotations/readme.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/annotations/readme.md @@ -0,0 +1 @@ + From 2a3dc93f63022cb862b3f477588be42a9f0bd86d Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:11:00 +0300 Subject: [PATCH 046/309] Created Readme.MD --- flyway-migration/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 flyway-migration/README.MD diff --git a/flyway-migration/README.MD b/flyway-migration/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/flyway-migration/README.MD @@ -0,0 +1 @@ + From 8a481af385cc0f49e314192fdaf147b64a3aacf2 Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:28:24 +0300 Subject: [PATCH 047/309] Created README.MD --- spring-cloud/spring-cloud-bootstrap/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 spring-cloud/spring-cloud-bootstrap/README.MD diff --git a/spring-cloud/spring-cloud-bootstrap/README.MD b/spring-cloud/spring-cloud-bootstrap/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/spring-cloud/spring-cloud-bootstrap/README.MD @@ -0,0 +1 @@ + From 98a6c937e3e8ad78929bd38ad20958ec682d98df Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:35:09 +0300 Subject: [PATCH 048/309] Created README.MD --- core-java-9/src/test/java/com/baeldung/java9/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 core-java-9/src/test/java/com/baeldung/java9/README.MD diff --git a/core-java-9/src/test/java/com/baeldung/java9/README.MD b/core-java-9/src/test/java/com/baeldung/java9/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/core-java-9/src/test/java/com/baeldung/java9/README.MD @@ -0,0 +1 @@ + From 3eca6e588e876ceaa52303877601a64a2b62fe89 Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:41:53 +0300 Subject: [PATCH 049/309] Created README.MD --- spring-cloud-data-flow/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 spring-cloud-data-flow/README.MD diff --git a/spring-cloud-data-flow/README.MD b/spring-cloud-data-flow/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/spring-cloud-data-flow/README.MD @@ -0,0 +1 @@ + From 454f0e50c596194cfae2ff1f64f2495ce71b3c13 Mon Sep 17 00:00:00 2001 From: maibin Date: Thu, 6 Oct 2016 10:51:23 +0200 Subject: [PATCH 050/309] Expression Utility Objects article (#724) * 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 * Thymeleaf Natural Processing and Inlining * Expression Utility Objects, Thymeleaf --- .../ExpressionUtilityObjectsController.java | 33 +++++++++++ .../main/webapp/WEB-INF/views/objects.html | 47 +++++++++++++++ ...xpressionUtilityObjectsControllerTest.java | 58 +++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsController.java create mode 100644 spring-thymeleaf/src/main/webapp/WEB-INF/views/objects.html create mode 100644 spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsController.java new file mode 100644 index 0000000000..f30b9b2078 --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsController.java @@ -0,0 +1,33 @@ +package com.baeldung.thymeleaf.controller; + +import java.util.Arrays; +import java.util.Calendar; +import java.util.Date; +import java.util.HashSet; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +/** + * Controller to test expression utility objects: dates, + * + */ +@Controller +public class ExpressionUtilityObjectsController { + + @RequestMapping(value = "/objects", method = RequestMethod.GET) + public String getDates(Model model) { + model.addAttribute("date", new Date()); + model.addAttribute("calendar", Calendar.getInstance()); + model.addAttribute("num", Math.random() * 10); + model.addAttribute("string", "new text"); + model.addAttribute("emptyString", ""); + model.addAttribute("nullString", null); + model.addAttribute("array", new int[] { 1, 3, 4, 5 }); + model.addAttribute("set", new HashSet(Arrays.asList(1, 3, 8))); + return "objects.html"; + } + +} diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/objects.html b/spring-thymeleaf/src/main/webapp/WEB-INF/views/objects.html new file mode 100644 index 0000000000..b2a23a7c0f --- /dev/null +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/views/objects.html @@ -0,0 +1,47 @@ + + + + +Expression utility objects + + +

    Date expression utility

    +

    +

    +

    +

    +

    + +

    Calendar expression utility

    +

    +

    +

    +

    +

    + +

    Numbers expression utility

    +

    +

    +

    + +

    +

    + +

    + +

    Calendar expression utility

    +

    +

    +

    +

    +

    +

    + +

    Aggregates expression utility

    +

    +

    +

    +

    + + \ No newline at end of file diff --git a/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java new file mode 100644 index 0000000000..f6a79b7570 --- /dev/null +++ b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java @@ -0,0 +1,58 @@ +package com.baeldung.thymeleaf.controller; + +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.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; + +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.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 ExpressionUtilityObjectsControllerTest { + + @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 testGetDates() throws Exception{ + mockMvc.perform(get("/objects").with(testUser()).with(csrf())).andExpect(status().isOk()).andExpect(view().name("objects.html")); + } + +} From 33d958284c2a6345eeb315eaa22c753b715e568f Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 11:58:32 +0300 Subject: [PATCH 051/309] Created README.MD --- spring-mvc-web-vs-initializer/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 spring-mvc-web-vs-initializer/README.MD diff --git a/spring-mvc-web-vs-initializer/README.MD b/spring-mvc-web-vs-initializer/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/spring-mvc-web-vs-initializer/README.MD @@ -0,0 +1 @@ + From 5caca8bd71742fa71c395169de20e0e9c178726d Mon Sep 17 00:00:00 2001 From: Catalin Date: Thu, 6 Oct 2016 12:06:50 +0300 Subject: [PATCH 052/309] Created Readme.MD --- spring-cloud/spring-cloud-hystrix/README.MD | 1 + 1 file changed, 1 insertion(+) create mode 100644 spring-cloud/spring-cloud-hystrix/README.MD diff --git a/spring-cloud/spring-cloud-hystrix/README.MD b/spring-cloud/spring-cloud-hystrix/README.MD new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/spring-cloud/spring-cloud-hystrix/README.MD @@ -0,0 +1 @@ + From 64d5a0386305c6bbd47955b5f1e9b770930f7c29 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Fri, 7 Oct 2016 10:39:07 +0200 Subject: [PATCH 053/309] Refactor spring-jms code samples --- pom.xml | 3 +- .../com/baeldung/spring/jms/Employee.java | 46 +++++++-------- .../baeldung/spring/jms/SampleJMSExample.java | 33 +++++------ .../spring/jms/SampleJmsMessageSender.java | 58 +++++++++---------- .../baeldung/spring/jms/SampleListener.java | 44 +++++++------- .../spring/jms/SampleMessageConverter.java | 53 +++++++++-------- 6 files changed, 116 insertions(+), 121 deletions(-) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/Employee.java (94%) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/SampleJMSExample.java (79%) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/SampleJmsMessageSender.java (73%) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/SampleListener.java (96%) rename spring-jms/src/{ => main/java}/com/baeldung/spring/jms/SampleMessageConverter.java (85%) diff --git a/pom.xml b/pom.xml index 6a83fe026e..5526c1e2a3 100644 --- a/pom.xml +++ b/pom.xml @@ -90,12 +90,13 @@ spring-hibernate3 spring-hibernate4 spring-jpa + spring-jms spring-katharsis spring-mockito spring-mvc-java spring-mvc-no-xml spring-mvc-xml - spring-mvc-tiles + spring-mvc-tiles spring-openid spring-protobuf spring-quartz diff --git a/spring-jms/src/com/baeldung/spring/jms/Employee.java b/spring-jms/src/main/java/com/baeldung/spring/jms/Employee.java similarity index 94% rename from spring-jms/src/com/baeldung/spring/jms/Employee.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/Employee.java index a0346c4291..4da02907a9 100644 --- a/spring-jms/src/com/baeldung/spring/jms/Employee.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/Employee.java @@ -1,23 +1,23 @@ -package com.baeldung.spring.jms; - -public class Employee { - private String name; - private Integer age; - - public Employee(String name, Integer age) { - this.name = name; - this.age = age; - } - - public String getName() { - return name; - } - - public Integer getAge() { - return age; - } - - public String toString() { - return "Person: name(" + name + "), age(" + age + ")"; - } -} +package com.baeldung.spring.jms; + +public class Employee { + private String name; + private Integer age; + + public Employee(String name, Integer age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public Integer getAge() { + return age; + } + + public String toString() { + return "Person: name(" + name + "), age(" + age + ")"; + } +} diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJMSExample.java similarity index 79% rename from spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/SampleJMSExample.java index bdde97b82d..a243bc1390 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJMSExample.java @@ -1,17 +1,16 @@ -package com.baeldung.spring.jms; - -import java.net.URI; -import java.net.URISyntaxException; - -import org.apache.activemq.broker.BrokerFactory; -import org.apache.activemq.broker.BrokerService; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class SampleJMSExample { - public static void main(String[] args) throws URISyntaxException, Exception { - BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)")); - broker.start(); - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); - - } -} +package com.baeldung.spring.jms; + +import org.apache.activemq.broker.BrokerFactory; +import org.apache.activemq.broker.BrokerService; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import java.net.URI; + +public class SampleJMSExample { + public static void main(String[] args) throws Exception { + BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)")); + broker.start(); + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); + + } +} diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java similarity index 73% rename from spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index e3eccea03e..865a1d4747 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -1,32 +1,28 @@ -package com.baeldung.spring.jms; - -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Queue; -import javax.jms.Session; - -import org.springframework.jms.core.JmsTemplate; -import org.springframework.jms.core.MessageCreator; - -public class SampleJmsMessageSender { - - private JmsTemplate jmsTemplate; - private Queue queue; - - public void setConnectionFactory(ConnectionFactory cf) { - this.jmsTemplate = new JmsTemplate(cf); - } - - public void setQueue(Queue queue) { - this.queue = queue; - } - - public void simpleSend() { - this.jmsTemplate.send(this.queue, new MessageCreator() { - public Message createMessage(Session session) throws JMSException { - return session.createTextMessage("hello queue world"); - } - }); - } +package com.baeldung.spring.jms; + +import org.springframework.jms.core.JmsTemplate; +import org.springframework.jms.core.MessageCreator; + +import javax.jms.*; + +public class SampleJmsMessageSender { + + private JmsTemplate jmsTemplate; + private Queue queue; + + public void createJmsTemplate(ConnectionFactory cf) { + this.jmsTemplate = new JmsTemplate(cf); + } + + public void setQueue(Queue queue) { + this.queue = queue; + } + + public void simpleSend() { + this.jmsTemplate.send(this.queue, new MessageCreator() { + public Message createMessage(Session session) throws JMSException { + return session.createTextMessage("hello queue world"); + } + }); + } } \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java similarity index 96% rename from spring-jms/src/com/baeldung/spring/jms/SampleListener.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java index 466cac44a0..0320870d88 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java @@ -1,23 +1,23 @@ -package com.baeldung.spring.jms; - -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageListener; -import javax.jms.TextMessage; - -public class SampleListener implements MessageListener { - - private String textMessage; - - public void onMessage(Message message) { - if (message instanceof TextMessage) { - try { - textMessage = ((TextMessage) message).getText(); - } catch (JMSException ex) { - throw new RuntimeException(ex); - } - } else { - throw new IllegalArgumentException("Message Error"); - } - } +package com.baeldung.spring.jms; + +import javax.jms.JMSException; +import javax.jms.Message; +import javax.jms.MessageListener; +import javax.jms.TextMessage; + +public class SampleListener implements MessageListener { + + private String textMessage; + + public void onMessage(Message message) { + if (message instanceof TextMessage) { + try { + textMessage = ((TextMessage) message).getText(); + } catch (JMSException ex) { + throw new RuntimeException(ex); + } + } else { + throw new IllegalArgumentException("Message Error"); + } + } } \ No newline at end of file diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java similarity index 85% rename from spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java rename to spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java index 856e0e9e49..6cfc588f13 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java @@ -1,27 +1,26 @@ -package com.baeldung.spring.jms; - -import javax.jms.JMSException; -import javax.jms.MapMessage; -import javax.jms.Message; -import javax.jms.Session; - -import org.springframework.jms.support.converter.MessageConversionException; -import org.springframework.jms.support.converter.MessageConverter; - -public class SampleMessageConverter implements MessageConverter { - - public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { - Employee person = (Employee) object; - MapMessage message = session.createMapMessage(); - message.setString("name", person.getName()); - message.setInt("age", person.getAge()); - return message; - } - - public Object fromMessage(Message message) throws JMSException, MessageConversionException { - MapMessage mapMessage = (MapMessage) message; - Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); - return person; - } - -} +package com.baeldung.spring.jms; + +import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.jms.support.converter.MessageConverter; + +import javax.jms.JMSException; +import javax.jms.MapMessage; +import javax.jms.Message; +import javax.jms.Session; + +public class SampleMessageConverter implements MessageConverter { + + public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { + Employee person = (Employee) object; + MapMessage message = session.createMapMessage(); + message.setString("name", person.getName()); + message.setInt("age", person.getAge()); + return message; + } + + public Object fromMessage(Message message) throws JMSException, MessageConversionException { + MapMessage mapMessage = (MapMessage) message; + return new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); + } + +} From e1abedf15e2b82d14795903e5f5c26fbeaea141a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Fri, 7 Oct 2016 12:03:53 +0200 Subject: [PATCH 054/309] Refactor RandomListElementTest --- .../test/java/com/baeldung/RandomListElementTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java index c6d4ded104..1918c801dc 100644 --- a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java +++ b/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java @@ -10,7 +10,7 @@ public class RandomListElementTest { @Test public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingRandom() { - List givenList = Arrays.asList(1, 2, 3); + List givenList = Lists.newArrayList(1, 2, 3); Random rand = new Random(); givenList.get(rand.nextInt(givenList.size())); @@ -18,7 +18,7 @@ public class RandomListElementTest { @Test public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingMathRandom() { - List givenList = Arrays.asList(1, 2, 3); + List givenList = Lists.newArrayList(1, 2, 3); givenList.get((int)(Math.random() * givenList.size())); } @@ -26,7 +26,7 @@ public class RandomListElementTest { @Test public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat() { Random rand = new Random(); - List givenList = Arrays.asList("one", "two", "three", "four"); + List givenList = Lists.newArrayList("one", "two", "three", "four"); int numberOfElements = 2; @@ -52,7 +52,7 @@ public class RandomListElementTest { @Test public void givenList_whenSeriesLengthChosen_shouldReturnRandomSeries() { - List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); + List givenList = Lists.newArrayList(1, 2, 3, 4, 5, 6); Collections.shuffle(givenList); int randomSeriesLength = 3; @@ -62,7 +62,7 @@ public class RandomListElementTest { @Test public void givenList_whenRandomIndexChosen_shouldReturnElementThreadSafely() { - List givenList = Arrays.asList(1, 2, 3, 4, 5, 6); + List givenList = Lists.newArrayList(1, 2, 3, 4, 5, 6); int randomIndex = ThreadLocalRandom.current().nextInt(10) % givenList.size(); givenList.get(randomIndex); From 4639d467053417321836b30a43903a7f501ba103 Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Fri, 7 Oct 2016 18:16:04 +0530 Subject: [PATCH 055/309] Modify test cases for About Page --- selenium-junit-testng/pom.xml | 4 +- .../baeldung/selenium/SeleniumExample.java | 39 ++++++++++++++++++- .../selenium/junit/TestSeleniumWithJUnit.java | 34 ++++++++++------ .../testng/TestSeleniumWithTestNG.java | 19 ++++++--- 4 files changed, 76 insertions(+), 20 deletions(-) diff --git a/selenium-junit-testng/pom.xml b/selenium-junit-testng/pom.xml index bf5a082fba..c6461816af 100644 --- a/selenium-junit-testng/pom.xml +++ b/selenium-junit-testng/pom.xml @@ -37,12 +37,12 @@ junit junit - 4.8.1 + 4.12 org.testng testng - 6.9.10 + 6.9.13.6 \ 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 index d8b248df81..7661354aab 100644 --- a/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java @@ -1,15 +1,22 @@ package main.java.com.baeldung.selenium; +import java.util.List; +import java.util.concurrent.TimeUnit; + +import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; public class SeleniumExample { private WebDriver webDriver; private String url = "http://www.baeldung.com/"; - + public SeleniumExample() { webDriver = new FirefoxDriver(); + webDriver.manage().window().maximize(); + webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); webDriver.get(url); } @@ -21,4 +28,34 @@ public class SeleniumExample { return webDriver.getTitle(); } + public void getAboutBaeldungPage() { + closeOverlay(); + clickAboutLink(); + clickAboutUsLink(); + } + + private void closeOverlay() { + List webElementList = webDriver.findElements(By.tagName("a")); + if (webElementList != null && !webElementList.isEmpty()) { + for (WebElement webElement : webElementList) { + if (webElement.getAttribute("title").equalsIgnoreCase("Close")) { + webElement.click(); + } + } + } + } + + private void clickAboutLink() { + webDriver.findElement(By.partialLinkText("About")).click(); + } + + private void clickAboutUsLink() { + webDriver.findElement(By.partialLinkText("About Baeldung.")).click(); + } + + public boolean isAuthorInformationAvailable() { + return webDriver + .findElement(By.xpath("//*[contains(text(), 'Eugen – an engineer')]")) + .isDisplayed(); + } } 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 index dabb1e1988..85c20f62a5 100644 --- 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 @@ -1,31 +1,41 @@ package test.java.com.baeldung.selenium.junit; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; import main.java.com.baeldung.selenium.SeleniumExample; -import org.junit.After; -import org.junit.Before; +import org.junit.AfterClass; +import org.junit.BeforeClass; import org.junit.Test; public class TestSeleniumWithJUnit { - private SeleniumExample seleniumExample; - private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; + private static SeleniumExample seleniumExample; + private String expecteTilteAboutBaeldungPage = "About Baeldung | Baeldung"; - @Before - public void setUp() { + @BeforeClass + public static void setUp() { seleniumExample = new SeleniumExample(); } - @After - public void tearDown() { + @AfterClass + public static void tearDown() { seleniumExample.closeWindow(); } @Test - public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { - String actualTitle = seleniumExample.getTitle(); - assertNotNull(actualTitle); - assertEquals(actualTitle, expectedTitle); + public void whenAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage() { + try { + seleniumExample.getAboutBaeldungPage(); + String actualTitle = seleniumExample.getTitle(); + assertNotNull(actualTitle); + assertEquals(actualTitle, expecteTilteAboutBaeldungPage); + assertTrue(seleniumExample.isAuthorInformationAvailable()); + } catch (Exception exception) { + exception.printStackTrace(); + seleniumExample.closeWindow(); + } } + } 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 index 78ef8b8dfb..40b0424820 100644 --- 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 @@ -1,6 +1,8 @@ package test.java.com.baeldung.selenium.testng; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; import main.java.com.baeldung.selenium.SeleniumExample; import org.testng.annotations.AfterSuite; @@ -10,7 +12,7 @@ import org.testng.annotations.Test; public class TestSeleniumWithTestNG { private SeleniumExample seleniumExample; - private String expectedTitle = "Baeldung | Java, Spring and Web Development tutorials"; + private String expecteTilteAboutBaeldungPage = "About Baeldung | Baeldung"; @BeforeSuite public void setUp() { @@ -23,9 +25,16 @@ public class TestSeleniumWithTestNG { } @Test - public void whenPageIsLoaded_thenTitleIsAsPerExpectation() { - String actualTitle = seleniumExample.getTitle(); - assertNotNull(actualTitle); - assertEquals(actualTitle, expectedTitle); + public void whenAboutBaeldungIsLoaded_thenAboutEugenIsMentionedOnPage() { + try { + seleniumExample.getAboutBaeldungPage(); + String actualTitle = seleniumExample.getTitle(); + assertNotNull(actualTitle); + assertEquals(actualTitle, expecteTilteAboutBaeldungPage); + assertTrue(seleniumExample.isAuthorInformationAvailable()); + } catch (Exception exception) { + exception.printStackTrace(); + seleniumExample.closeWindow(); + } } } From 61ea026ea9077be61114d4185f98a64dbe798a2e Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Fri, 7 Oct 2016 16:41:49 +0200 Subject: [PATCH 056/309] BAEL-225 - moving to lambda, additional improvements --- .../com/baeldung/file/FileOperationsTest.java | 37 +++++++------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 1dd1be7808..3752fc5b7f 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -1,25 +1,25 @@ package com.baeldung.file; +import org.apache.commons.io.FileUtils; +import org.hamcrest.CoreMatchers; +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Test; + import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.net.URISyntaxException; import java.net.URL; import java.net.URLConnection; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.function.Consumer; import java.util.stream.Stream; -import org.apache.commons.io.FileUtils; -import org.hamcrest.CoreMatchers; -import org.hamcrest.Matchers; -import org.junit.Assert; -import org.junit.Test; - public class FileOperationsTest { @Test @@ -82,12 +82,10 @@ public class FileOperationsTest { } @Test - public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException { + public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException, URISyntaxException { String expectedData = "Hello World from fileTest.txt!!!"; - - ClassLoader classLoader = getClass().getClassLoader(); - File file = new File(classLoader.getResource("fileTest.txt").getFile()); - Path path = Paths.get(file.getAbsolutePath()); + + Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); byte[] fileBytes = Files.readAllBytes(path); String data = new String(fileBytes); @@ -96,21 +94,14 @@ public class FileOperationsTest { } @Test - public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException { + public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, URISyntaxException { String expectedData = "Hello World from fileTest.txt!!!"; - - ClassLoader classLoader = getClass().getClassLoader(); - File file = new File(classLoader.getResource("fileTest.txt").getFile()); - Path path = Paths.get(file.getAbsolutePath()); + + Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); StringBuilder data = new StringBuilder(); Stream lines = Files.lines(path); - lines.forEach(new Consumer() { - @Override - public void accept(String line) { - data.append(line).append("\n"); - } - }); + lines.forEach(line -> data.append(line).append("\n")); Assert.assertEquals(expectedData, data.toString().trim()); } From a8b3f44a2fd25918d25d0237c27d2c77080f67e5 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Fri, 7 Oct 2016 17:31:28 +0200 Subject: [PATCH 057/309] Code improvement --- okhttp/pom.xml | 98 ++++++++++++------- .../okhttp/ProgressRequestWrapper.java | 10 +- .../okhttp/OkHttpFileUploadingTest.java | 4 +- .../org/baeldung/okhttp/OkHttpGetTest.java | 6 +- .../org/baeldung/okhttp/OkHttpHeaderTest.java | 4 +- .../org/baeldung/okhttp/OkHttpMiscTest.java | 54 +++++----- .../baeldung/okhttp/OkHttpPostingTest.java | 8 +- .../baeldung/okhttp/OkHttpRedirectTest.java | 2 +- 8 files changed, 111 insertions(+), 75 deletions(-) diff --git a/okhttp/pom.xml b/okhttp/pom.xml index ba5bcf9725..4d371f40b0 100644 --- a/okhttp/pom.xml +++ b/okhttp/pom.xml @@ -1,44 +1,76 @@ - - 4.0.0 - org.baeldung.okhttp - okhttp - 0.0.1-SNAPSHOT + + 4.0.0 + org.baeldung.okhttp + okhttp + 0.0.1-SNAPSHOT - + - - - com.squareup.okhttp3 - okhttp - ${com.squareup.okhttp3.version} - + - - - junit - junit - ${junit.version} - test - + + com.squareup.okhttp3 + okhttp + ${com.squareup.okhttp3.version} + - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + - + + org.slf4j + slf4j-api + ${org.slf4j.version} + - + + ch.qos.logback + logback-classic + ${logback.version} + - - 3.4.1 + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + - - 1.3 - 4.12 - + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + + + + junit + junit + ${junit.version} + test + + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + + + + + 3.4.1 + + + 1.7.13 + 1.1.3 + + + 1.3 + 4.12 + + diff --git a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java index 6a98f8d20a..255d10b98a 100644 --- a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java +++ b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java @@ -1,11 +1,16 @@ package org.baeldung.okhttp; -import okhttp3.MediaType; import okhttp3.RequestBody; -import okio.*; +import okhttp3.MediaType; import java.io.IOException; +import okio.Buffer; +import okio.BufferedSink; +import okio.ForwardingSink; +import okio.Okio; +import okio.Sink; + public class ProgressRequestWrapper extends RequestBody { protected RequestBody delegate; @@ -61,6 +66,7 @@ public class ProgressRequestWrapper extends RequestBody { } public interface ProgressListener { + void onRequestProgress(long bytesWritten, long contentLength); } diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java index 32457fc11b..77219b8e22 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java @@ -23,7 +23,7 @@ public class OkHttpFileUploadingTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; @Test - public void whenUploadFileUsingOkHttp_thenCorrect() throws IOException { + public void whenUploadFile_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -45,7 +45,7 @@ public class OkHttpFileUploadingTest { } @Test - public void whenGetUploadFileProgressUsingOkHttp_thenCorrect() throws IOException { + public void whenGetUploadFileProgress_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java index e8edff92df..de954e3dd7 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java @@ -19,7 +19,7 @@ public class OkHttpGetTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; @Test - public void whenGetRequestUsingOkHttp_thenCorrect() throws IOException { + public void whenGetRequest_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -34,7 +34,7 @@ public class OkHttpGetTest { } @Test - public void whenGetRequestWithQueryParameterUsingOkHttp_thenCorrect() throws IOException { + public void whenGetRequestWithQueryParameter_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -54,7 +54,7 @@ public class OkHttpGetTest { } @Test - public void whenAsynchronousGetRequestUsingOkHttp_thenCorrect() { + public void whenAsynchronousGetRequest_thenCorrect() { OkHttpClient client = new OkHttpClient(); diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java index 5b2e89eca8..958eeb51ce 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java @@ -14,7 +14,7 @@ public class OkHttpHeaderTest { private static final String SAMPLE_URL = "http://www.github.com"; @Test - public void whenSetHeaderUsingOkHttp_thenCorrect() throws IOException { + public void whenSetHeader_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -29,7 +29,7 @@ public class OkHttpHeaderTest { } @Test - public void whenSetDefaultHeaderUsingOkHttp_thenCorrect() throws IOException { + public void whenSetDefaultHeader_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new DefaultContentTypeInterceptor("application/json")) diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java index 829bafe8ef..b72b461158 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java @@ -7,6 +7,8 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import okhttp3.Cache; import okhttp3.Call; @@ -17,13 +19,12 @@ import okhttp3.Response; public class OkHttpMiscTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; + private static Logger logger = LoggerFactory.getLogger(OkHttpMiscTest.class); //@Test - public void whenSetRequestTimeoutUsingOkHttp_thenFail() throws IOException { + public void whenSetRequestTimeout_thenFail() throws IOException { OkHttpClient client = new OkHttpClient.Builder() - //.connectTimeout(10, TimeUnit.SECONDS) - //.writeTimeout(10, TimeUnit.SECONDS) .readTimeout(1, TimeUnit.SECONDS) .build(); @@ -36,8 +37,8 @@ public class OkHttpMiscTest { response.close(); } - //@Test - public void whenCancelRequestUsingOkHttp_thenCorrect() throws IOException { + @Test + public void whenCancelRequest_thenCorrect() throws IOException { ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); @@ -48,7 +49,6 @@ public class OkHttpMiscTest { .build(); final int seconds = 1; - //final int seconds = 3; final long startNanos = System.nanoTime(); final Call call = client.newCall(request); @@ -57,57 +57,55 @@ public class OkHttpMiscTest { executor.schedule(new Runnable() { public void run() { - System.out.printf("%.2f Canceling call.%n", (System.nanoTime() - startNanos) / 1e9f); + logger.debug("Canceling call: " + (System.nanoTime() - startNanos) / 1e9f); call.cancel(); - System.out.printf("%.2f Canceled call.%n", (System.nanoTime() - startNanos) / 1e9f); + logger.debug("Canceled call: " + (System.nanoTime() - startNanos) / 1e9f); } }, seconds, TimeUnit.SECONDS); try { - System.out.printf("%.2f Executing call.%n", (System.nanoTime() - startNanos) / 1e9f); - Response response = call.execute(); - System.out.printf("%.2f Call was expected to fail, but completed: %s%n", (System.nanoTime() - startNanos) / 1e9f, response); + logger.debug("Executing call: " + (System.nanoTime() - startNanos) / 1e9f); + Response response = call.execute(); + logger.debug("Call was expected to fail, but completed: " + (System.nanoTime() - startNanos) / 1e9f, response); } catch (IOException e) { - System.out.printf("%.2f Call failed as expected: %s%n", (System.nanoTime() - startNanos) / 1e9f, e); + logger.debug("Call failed as expected: " + (System.nanoTime() - startNanos) / 1e9f, e); } } - @Test - public void whenSetResponseCacheUsingOkHttp_thenCorrect() throws IOException { + //@Test + public void whenSetResponseCache_thenCorrect() throws IOException { int cacheSize = 10 * 1024 * 1024; // 10 MiB File cacheDirectory = new File("src/test/resources/cache"); Cache cache = new Cache(cacheDirectory, cacheSize); OkHttpClient client = new OkHttpClient.Builder() - .cache(cache) - .build(); + .cache(cache) + .build(); Request request = new Request.Builder() - .url("http://publicobject.com/helloworld.txt") - //.cacheControl(CacheControl.FORCE_NETWORK) - //.cacheControl(CacheControl.FORCE_CACHE) - .build(); + .url("http://publicobject.com/helloworld.txt") + .build(); Response response1 = client.newCall(request).execute(); String responseBody1 = response1.body().string(); - System.out.println("Response 1 response: " + response1); - System.out.println("Response 1 cache response: " + response1.cacheResponse()); - System.out.println("Response 1 network response: " + response1.networkResponse()); - System.out.println("Response 1 responseBody: " + responseBody1); + logger.debug("Response 1 response: " + response1); + logger.debug("Response 1 cache response: " + response1.cacheResponse()); + logger.debug("Response 1 network response: " + response1.networkResponse()); + logger.debug("Response 1 responseBody: " + responseBody1); Response response2 = client.newCall(request).execute(); String responseBody2 = response2.body().string(); - System.out.println("Response 2 response: " + response2); - System.out.println("Response 2 cache response: " + response2.cacheResponse()); - System.out.println("Response 2 network response: " + response2.networkResponse()); - System.out.println("Response 2 responseBody: " + responseBody2); + logger.debug("Response 2 response: " + response2); + logger.debug("Response 2 cache response: " + response2.cacheResponse()); + logger.debug("Response 2 network response: " + response2.networkResponse()); + logger.debug("Response 2 responseBody: " + responseBody2); } } diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java index 1ba2d517c5..41a024d2ee 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java @@ -24,7 +24,7 @@ public class OkHttpPostingTest { private static final String URL_SECURED_BY_BASIC_AUTHENTICATION = "http://browserspy.dk/password-ok.php"; @Test - public void whenSendPostRequestUsingOkHttp_thenCorrect() throws IOException { + public void whenSendPostRequest_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -45,7 +45,7 @@ public class OkHttpPostingTest { } @Test - public void whenSendPostRequestWithAuthorizationUsingOkHttp_thenCorrect() throws IOException { + public void whenSendPostRequestWithAuthorization_thenCorrect() throws IOException { String postBody = "test post"; @@ -64,7 +64,7 @@ public class OkHttpPostingTest { } @Test - public void whenPostJsonUsingOkHttp_thenCorrect() throws IOException { + public void whenPostJson_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); @@ -84,7 +84,7 @@ public class OkHttpPostingTest { } @Test - public void whenSendMultipartRequestUsingOkHttp_thenCorrect() throws IOException { + public void whenSendMultipartRequest_thenCorrect() throws IOException { OkHttpClient client = new OkHttpClient(); diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java index 1582a5ff7f..c709253478 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java @@ -15,7 +15,7 @@ import okhttp3.Response; public class OkHttpRedirectTest { @Test - public void whenSetFollowRedirectsUsingOkHttp_thenNotRedirected() throws IOException { + public void whenSetFollowRedirects_thenNotRedirected() throws IOException { OkHttpClient client = new OkHttpClient().newBuilder() .followRedirects(false) From 8692cad3282d0d8e72170bfa8720bb57ea98dd95 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Fri, 7 Oct 2016 17:47:58 +0200 Subject: [PATCH 058/309] Code improvement --- .../org/baeldung/okhttp/OkHttpMiscTest.java | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java index b72b461158..fe15a76200 100644 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java +++ b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java @@ -21,7 +21,7 @@ public class OkHttpMiscTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; private static Logger logger = LoggerFactory.getLogger(OkHttpMiscTest.class); - //@Test + @Test public void whenSetRequestTimeout_thenFail() throws IOException { OkHttpClient client = new OkHttpClient.Builder() @@ -75,7 +75,7 @@ public class OkHttpMiscTest { } } - //@Test + @Test public void whenSetResponseCache_thenCorrect() throws IOException { int cacheSize = 10 * 1024 * 1024; // 10 MiB @@ -91,21 +91,17 @@ public class OkHttpMiscTest { .build(); Response response1 = client.newCall(request).execute(); - - String responseBody1 = response1.body().string(); - - logger.debug("Response 1 response: " + response1); - logger.debug("Response 1 cache response: " + response1.cacheResponse()); - logger.debug("Response 1 network response: " + response1.networkResponse()); - logger.debug("Response 1 responseBody: " + responseBody1); + logResponse(response1); Response response2 = client.newCall(request).execute(); + logResponse(response2); + } - String responseBody2 = response2.body().string(); + private void logResponse(Response response) throws IOException { - logger.debug("Response 2 response: " + response2); - logger.debug("Response 2 cache response: " + response2.cacheResponse()); - logger.debug("Response 2 network response: " + response2.networkResponse()); - logger.debug("Response 2 responseBody: " + responseBody2); + logger.debug("Response response: " + response); + logger.debug("Response cache response: " + response.cacheResponse()); + logger.debug("Response network response: " + response.networkResponse()); + logger.debug("Response responseBody: " + response.body().string()); } } From 877706d2e17df91e5bb4a82b2d48faf0ecbfd4bd Mon Sep 17 00:00:00 2001 From: "nguyenminhtuanfit@gmail.com" Date: Fri, 7 Oct 2016 23:04:36 +0700 Subject: [PATCH 059/309] added hazelcast client, removed id generator --- hazelcast/pom.xml | 131 +++++++++--------- .../hazelcast/cluster/ServerNode.java | 5 +- 2 files changed, 71 insertions(+), 65 deletions(-) diff --git a/hazelcast/pom.xml b/hazelcast/pom.xml index 62cfa89c0f..00960eadd2 100644 --- a/hazelcast/pom.xml +++ b/hazelcast/pom.xml @@ -1,72 +1,77 @@ - 4.0.0 - com.baeldung - hazelcast - 0.0.1-SNAPSHOT - hazelcast + 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 + hazelcast + 0.0.1-SNAPSHOT + hazelcast - - - - com.hazelcast - hazelcast-all - ${hazelcast.version} - - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - - ch.qos.logback - logback-classic - ${logback.version} - - - - ch.qos.logback - logback-core - ${logback.version} - + + + com.hazelcast + hazelcast + ${hazelcast.version} + + + + com.hazelcast + hazelcast-client + 3.7.2 + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + + ch.qos.logback + logback-classic + ${logback.version} + + + + ch.qos.logback + logback-core + ${logback.version} + - + - - hazelcast - - - src/main/resources - true - - + + hazelcast + + + src/main/resources + true + + - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + - - - 3.7 - - - 1.7.21 - 1.1.7 + + + 3.7.2 + + + 1.7.21 + 1.1.7 - - 3.5.1 - + + 3.5.1 + \ No newline at end of file diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java index 8680180399..01043cf712 100644 --- a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java +++ b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java @@ -16,8 +16,9 @@ public class ServerNode { HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); Map countryMap = hazelcastInstance.getMap("country"); IdGenerator idGenerator = hazelcastInstance.getIdGenerator("newid"); - Long countryIdGenerator = idGenerator.newId() == 0L ? 1L : idGenerator.newId(); - countryMap.put(countryIdGenerator, "Country1"); + for (int i = 0; i < 10; i++) { + countryMap.put(idGenerator.newId(), "message" + 1); + } logger.info("Country map size: " + countryMap.size()); } } From b3b7ac888c0d66601440651fd755b3dc97f37b3b Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 8 Oct 2016 11:11:20 +0300 Subject: [PATCH 060/309] update test, remove user repository implementation --- spring-security-custom-permission/derby.log | 13 -- .../baeldung/config/PersistenceConfig.java | 10 +- .../org/baeldung/config/SecurityConfig.java | 1 - .../persistence/dao/MyUserRepository.java | 146 ------------------ .../persistence/dao/UserRepository.java | 2 + .../security/MyUserDetailsService.java | 1 + .../web/CustomUserDetailsServiceTest.java | 29 ++-- 7 files changed, 19 insertions(+), 183 deletions(-) delete mode 100644 spring-security-custom-permission/derby.log delete mode 100644 spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/MyUserRepository.java diff --git a/spring-security-custom-permission/derby.log b/spring-security-custom-permission/derby.log deleted file mode 100644 index 3c0968fa9c..0000000000 --- a/spring-security-custom-permission/derby.log +++ /dev/null @@ -1,13 +0,0 @@ ----------------------------------------------------------------- -Wed Oct 05 21:59:32 EEST 2016: -Booting Derby version The Apache Software Foundation - Apache Derby - 10.12.1.1 - (1704137): instance a816c00e-0157-9637-0b63-000000c038f0 -on database directory memory:C:\Users\lore\Documents\workspace-articles\spring-security-custom-permission\spring_custom_user_service with class loader sun.misc.Launcher$AppClassLoader@6433a2 -Loaded from file:/C:/Users/lore/.m2/repository/org/apache/derby/derby/10.12.1.1/derby-10.12.1.1.jar -java.vendor=Oracle Corporation -java.runtime.version=1.8.0_77-b03 -user.dir=C:\Users\lore\Documents\workspace-articles\spring-security-custom-permission -os.name=Windows 7 -os.arch=x86 -os.version=6.1 -derby.system.home=null -Database Class Loader started - derby.database.classpath='' diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java index cd7caa5fd1..ad19db9e3a 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java @@ -5,7 +5,6 @@ import java.util.Properties; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; -import org.baeldung.persistence.dao.MyUserRepository; import org.baeldung.persistence.dao.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; @@ -13,6 +12,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframework.core.env.Environment; import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; @@ -23,6 +23,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @Configuration @EnableTransactionManagement @PropertySource({ "classpath:persistence-derby.properties" }) +@EnableJpaRepositories(basePackages = "org.baeldung.persistence.dao") public class PersistenceConfig { @Autowired @@ -35,7 +36,7 @@ public class PersistenceConfig { // beans @Bean - public LocalContainerEntityManagerFactoryBean myEmf() { + public LocalContainerEntityManagerFactoryBean entityManagerFactory() { final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource()); em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" }); @@ -79,9 +80,4 @@ public class PersistenceConfig { // hibernateProperties.setProperty("hibernate.globally_quoted_identifiers", "true"); return hibernateProperties; } - - @Bean - public UserRepository userRepository(){ - return new MyUserRepository(); - } } \ No newline at end of file diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java index 21b81741ee..463ce9a8ca 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java @@ -1,6 +1,5 @@ package org.baeldung.config; -import org.baeldung.persistence.dao.MyUserRepository; import org.baeldung.persistence.dao.UserRepository; import org.baeldung.security.MyUserDetailsService; import org.springframework.beans.factory.annotation.Autowired; diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/MyUserRepository.java b/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/MyUserRepository.java deleted file mode 100644 index ee290a0c35..0000000000 --- a/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/MyUserRepository.java +++ /dev/null @@ -1,146 +0,0 @@ -package org.baeldung.persistence.dao; - -import java.util.List; - -import javax.persistence.EntityManager; -import javax.persistence.PersistenceContext; -import javax.persistence.Query; - -import org.baeldung.persistence.model.User; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.Pageable; -import org.springframework.data.domain.Sort; -import org.springframework.transaction.annotation.Transactional; - -@Transactional -public class MyUserRepository implements UserRepository { - - @PersistenceContext - private EntityManager entityManager; - - @Override - public List findAll() { - // TODO Auto-generated method stub - return null; - } - - @Override - public List findAll(Sort sort) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List findAll(Iterable ids) { - // TODO Auto-generated method stub - return null; - } - - @Override - public List save(Iterable entities) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void flush() { - // TODO Auto-generated method stub - - } - - @Override - public S saveAndFlush(S entity) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void deleteInBatch(Iterable entities) { - // TODO Auto-generated method stub - - } - - @Override - public void deleteAllInBatch() { - // TODO Auto-generated method stub - - } - - @Override - public User getOne(Long id) { - // TODO Auto-generated method stub - return null; - } - - @Override - public Page findAll(Pageable arg0) { - // TODO Auto-generated method stub - return null; - } - - @Override - public long count() { - // TODO Auto-generated method stub - return 0; - } - - @Override - public void delete(Long arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void delete(User arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void delete(Iterable arg0) { - // TODO Auto-generated method stub - - } - - @Override - public void deleteAll() { - // TODO Auto-generated method stub - - } - - @Override - public boolean exists(Long arg0) { - // TODO Auto-generated method stub - return false; - } - - @Override - public User findOne(Long arg0) { - // TODO Auto-generated method stub - return null; - } - - @Override - public S save(S user) { - entityManager.persist(user); - return user; - } - - @Override - public User findByUsername(String username) { - Query query = entityManager.createQuery("from User where username=:username", User.class); - query.setParameter("username", username); - List result = query.getResultList(); - if (result != null && result.size() > 0) { - return result.get(0); - } else - return null; - } - - public void removeUserByUsername(String username) { - final Query query = entityManager.createQuery("delete from User where username=:username"); - query.setParameter("username", username); - query.executeUpdate(); - } - -} diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/UserRepository.java b/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/UserRepository.java index 8b4e20d146..f0c3afdf0b 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/UserRepository.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/persistence/dao/UserRepository.java @@ -2,11 +2,13 @@ package org.baeldung.persistence.dao; import org.baeldung.persistence.model.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.transaction.annotation.Transactional; public interface UserRepository extends JpaRepository { User findByUsername(final String username); + @Transactional void removeUserByUsername(String username); } diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-security-custom-permission/src/main/java/org/baeldung/security/MyUserDetailsService.java index 685219728f..3c0024c4b9 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -23,6 +23,7 @@ public class MyUserDetailsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(final String username) { final User user = userRepository.findByUsername(username); + System.out.println("load user from repo"+user); if (user == null) { throw new UsernameNotFoundException(username); } diff --git a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java index 390bd7c96c..bdf9c32ca8 100644 --- a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java +++ b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java @@ -9,9 +9,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.core.Authentication; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @@ -36,13 +38,16 @@ public class CustomUserDetailsServiceTest { @Autowired AuthenticationProvider authenticationProvider; + + @Autowired + PasswordEncoder passwordEncoder; @Test public void givenExistingUser_whenAuthenticate_thenRetrieveFromDb() { try { User user = new User(); user.setUsername(USERNAME); - user.setPassword(PASSWORD); + user.setPassword(passwordEncoder.encode(PASSWORD)); myUserRepository.save(user); @@ -51,31 +56,23 @@ public class CustomUserDetailsServiceTest { assertEquals(authentication.getName(), USERNAME); - } catch (Exception exc) { - LOG.log(Level.SEVERE, "Error creating account"); } finally { myUserRepository.removeUserByUsername(USERNAME); } } - - @Test (expected = BadCredentialsException.class) + + @Test(expected = BadCredentialsException.class) public void givenIncorrectUser_whenAuthenticate_thenBadCredentialsException() { try { User user = new User(); user.setUsername(USERNAME); - user.setPassword(PASSWORD); + user.setPassword(passwordEncoder.encode(PASSWORD)); + + myUserRepository.save(user); - try { - myUserRepository.save(user); - } - catch (Exception exc) { - LOG.log(Level.SEVERE, "Error creating account"); - } - UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(USERNAME2, PASSWORD); - Authentication authentication = authenticationProvider.authenticate(auth); - } - finally { + authenticationProvider.authenticate(auth); + } finally { myUserRepository.removeUserByUsername(USERNAME); } } From 78f8591937a7e44f253d907183b09c644d31f6c3 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Sat, 8 Oct 2016 11:14:09 +0300 Subject: [PATCH 061/309] remove unused imports --- .../src/main/java/org/baeldung/config/PersistenceConfig.java | 1 - .../src/main/java/org/baeldung/config/SecurityConfig.java | 1 - .../main/java/org/baeldung/security/MyUserDetailsService.java | 1 - .../java/org/baeldung/web/CustomUserDetailsServiceTest.java | 4 ---- 4 files changed, 7 deletions(-) diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java index ad19db9e3a..1c4cb0124a 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/config/PersistenceConfig.java @@ -5,7 +5,6 @@ import java.util.Properties; import javax.persistence.EntityManagerFactory; import javax.sql.DataSource; -import org.baeldung.persistence.dao.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java index 463ce9a8ca..8cc9d45823 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/config/SecurityConfig.java @@ -1,6 +1,5 @@ package org.baeldung.config; -import org.baeldung.persistence.dao.UserRepository; import org.baeldung.security.MyUserDetailsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/security/MyUserDetailsService.java b/spring-security-custom-permission/src/main/java/org/baeldung/security/MyUserDetailsService.java index 3c0024c4b9..685219728f 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/security/MyUserDetailsService.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/security/MyUserDetailsService.java @@ -23,7 +23,6 @@ public class MyUserDetailsService implements UserDetailsService { @Override public UserDetails loadUserByUsername(final String username) { final User user = userRepository.findByUsername(username); - System.out.println("load user from repo"+user); if (user == null) { throw new UsernameNotFoundException(username); } diff --git a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java index bdf9c32ca8..19603a499c 100644 --- a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java +++ b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java @@ -9,7 +9,6 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -19,7 +18,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import static org.junit.Assert.*; -import java.util.logging.Level; import java.util.logging.Logger; @RunWith(SpringJUnit4ClassRunner.class) @@ -27,8 +25,6 @@ import java.util.logging.Logger; @WebAppConfiguration public class CustomUserDetailsServiceTest { - private static final Logger LOG = Logger.getLogger("CustomUserDetailsServiceTest"); - public static final String USERNAME = "user"; public static final String PASSWORD = "pass"; public static final String USERNAME2 = "user2"; From 0d2e13392bb352a14b9f5e2a3168202e7b6cc6fe Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Sun, 9 Oct 2016 08:15:55 +0530 Subject: [PATCH 062/309] Implementing Java 8 streaming API for-next loop --- .../main/java/com/baeldung/selenium/SeleniumExample.java | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) 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 index 7661354aab..1007bf7503 100644 --- a/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java @@ -37,11 +37,7 @@ public class SeleniumExample { private void closeOverlay() { List webElementList = webDriver.findElements(By.tagName("a")); if (webElementList != null && !webElementList.isEmpty()) { - for (WebElement webElement : webElementList) { - if (webElement.getAttribute("title").equalsIgnoreCase("Close")) { - webElement.click(); - } - } + webElementList.stream().filter(webElement -> "Close".equalsIgnoreCase(webElement.getAttribute("title"))).findAny().get().click(); } } From b66c42d0f613efa540db0cfb67f72068d67e301a Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Sun, 9 Oct 2016 10:45:25 +0700 Subject: [PATCH 063/309] Apache CXF support for RESTful web services --- apache-cxf/jaxrs-implementation/pom.xml | 54 +++++++++++ .../cxf/jaxrs/implementation/Baeldung.java | 68 ++++++++++++++ .../cxf/jaxrs/implementation/Course.java | 73 +++++++++++++++ .../jaxrs/implementation/RestfulServer.java | 21 +++++ .../cxf/jaxrs/implementation/Student.java | 25 +++++ .../src/main/resources/course.xml | 4 + .../src/main/resources/student.xml | 5 + .../cxf/jaxrs/implementation/ServiceTest.java | 93 +++++++++++++++++++ apache-cxf/pom.xml | 1 + 9 files changed, 344 insertions(+) create mode 100644 apache-cxf/jaxrs-implementation/pom.xml create mode 100644 apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java create mode 100644 apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java create mode 100644 apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java create mode 100644 apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java create mode 100644 apache-cxf/jaxrs-implementation/src/main/resources/course.xml create mode 100644 apache-cxf/jaxrs-implementation/src/main/resources/student.xml create mode 100644 apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java diff --git a/apache-cxf/jaxrs-implementation/pom.xml b/apache-cxf/jaxrs-implementation/pom.xml new file mode 100644 index 0000000000..1f83ecf934 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/pom.xml @@ -0,0 +1,54 @@ + + + + 4.0.0 + cxf-jaxrs-implementation + + com.baeldung + apache-cxf + 0.0.1-SNAPSHOT + + + UTF-8 + 3.1.7 + 4.5.2 + + + + + org.codehaus.mojo + exec-maven-plugin + + com.baeldung.cxf.jaxrs.implementation.RestfulServer + + + + maven-surefire-plugin + 2.19.1 + + + **/ServiceTest + + + + + + + + org.apache.cxf + cxf-rt-frontend-jaxrs + ${cxf.version} + + + org.apache.cxf + cxf-rt-transports-http-jetty + ${cxf.version} + + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java new file mode 100644 index 0000000000..5617f482f8 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java @@ -0,0 +1,68 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.Response; + +@Path("baeldung") +@Produces("text/xml") +public class Baeldung { + private Map courses = new HashMap<>(); + + { + Student student1 = new Student(); + Student student2 = new Student(); + student1.setId(1); + student1.setName("Student A"); + student2.setId(2); + student2.setName("Student B"); + + List course1Students = new ArrayList<>(); + course1Students.add(student1); + course1Students.add(student2); + + Course course1 = new Course(); + Course course2 = new Course(); + course1.setId(1); + course1.setName("REST with Spring"); + course1.setStudents(course1Students); + course2.setId(2); + course2.setName("Learn Spring Security"); + + courses.put(1, course1); + courses.put(2, course2); + } + + @GET + @Path("courses/{courseOrder}") + public Course getCourse(@PathParam("courseOrder") int courseOrder) { + return courses.get(courseOrder); + } + + @PUT + @Path("courses/{courseOrder}") + public Response putCourse(@PathParam("courseOrder") int courseOrder, Course course) { + Course existingCourse = courses.get(courseOrder); + Response response; + if (existingCourse == null || existingCourse.getId() != course.getId() || !(existingCourse.getName().equals(course.getName()))) { + courses.put(courseOrder, course); + response = Response.ok().build(); + } else { + response = Response.notModified().build(); + } + return response; + } + + @Path("courses/{courseOrder}/students") + public Course pathToStudent(@PathParam("courseOrder") int courseOrder) { + return courses.get(courseOrder); + } +} \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java new file mode 100644 index 0000000000..9ab74bea58 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java @@ -0,0 +1,73 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import java.util.ArrayList; +import java.util.List; + +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.Response; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Course") +public class Course { + private int id; + private String name; + private List students; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getStudents() { + return students; + } + + public void setStudents(List students) { + this.students = students; + } + + @GET + @Path("{studentOrder}") + public Student getStudent(@PathParam("studentOrder")int studentOrder) { + return students.get(studentOrder); + } + + @POST + public Response postStudent(Student student) { + if (students == null) { + students = new ArrayList(); + } + students.add(student); + return Response.ok(student).build(); + } + + @DELETE + @Path("{studentOrder}") + public Response deleteStudent(@PathParam("studentOrder") int studentOrder) { + Student student = students.get(studentOrder); + Response response; + if (student != null) { + students.remove(studentOrder); + response = Response.ok().build(); + } else { + response = Response.notModified().build(); + } + return response; + } +} \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java new file mode 100644 index 0000000000..bb35bab3f8 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java @@ -0,0 +1,21 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; +import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; + +public class RestfulServer { + public static void main(String args[]) throws Exception { + JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean(); + factoryBean.setResourceClasses(Baeldung.class); + factoryBean.setResourceProvider(new SingletonResourceProvider(new Baeldung())); + factoryBean.setAddress("http://localhost:8080/"); + Server server = factoryBean.create(); + + System.out.println("Server ready..."); + Thread.sleep(60 * 1000); + System.out.println("Server exiting"); + server.destroy(); + System.exit(0); + } +} \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java new file mode 100644 index 0000000000..de782e4edb --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java @@ -0,0 +1,25 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "Student") +public class Student { + private int id; + private String name; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } +} \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/resources/course.xml b/apache-cxf/jaxrs-implementation/src/main/resources/course.xml new file mode 100644 index 0000000000..465c337745 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/resources/course.xml @@ -0,0 +1,4 @@ + + 3 + Apache CXF Support for RESTful + \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/main/resources/student.xml b/apache-cxf/jaxrs-implementation/src/main/resources/student.xml new file mode 100644 index 0000000000..7fb6189815 --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/main/resources/student.xml @@ -0,0 +1,5 @@ + + + 3 + Student C + \ No newline at end of file diff --git a/apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java b/apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java new file mode 100644 index 0000000000..48749a568e --- /dev/null +++ b/apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java @@ -0,0 +1,93 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import static org.junit.Assert.assertEquals; + +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; + +import javax.xml.bind.JAXB; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpPut; +import org.apache.http.entity.InputStreamEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; + +public class ServiceTest { + private static final String BASE_URL = "http://localhost:8080/baeldung/courses/"; + private static CloseableHttpClient client; + + @BeforeClass + public static void createClient() { + client = HttpClients.createDefault(); + } + + @AfterClass + public static void closeClient() throws IOException { + client.close(); + } + + @Test + public void whenPutCourse_thenCorrect() throws IOException { + HttpPut httpPut = new HttpPut(BASE_URL + "3"); + InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("course.xml"); + httpPut.setEntity(new InputStreamEntity(resourceStream)); + httpPut.setHeader("Content-Type", "text/xml"); + + HttpResponse response = client.execute(httpPut); + assertEquals(200, response.getStatusLine().getStatusCode()); + + Course course = getCourse(3); + assertEquals(3, course.getId()); + assertEquals("Apache CXF Support for RESTful", course.getName()); + } + + @Test + public void whenPostStudent_thenCorrect() throws IOException { + HttpPost httpPost = new HttpPost(BASE_URL + "2/students"); + InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("student.xml"); + httpPost.setEntity(new InputStreamEntity(resourceStream)); + httpPost.setHeader("Content-Type", "text/xml"); + + HttpResponse response = client.execute(httpPost); + assertEquals(200, response.getStatusLine().getStatusCode()); + + Student student = getStudent(2, 0); + assertEquals(3, student.getId()); + assertEquals("Student C", student.getName()); + } + + @Test + public void whenDeleteStudent_thenCorrect() throws IOException { + HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/0"); + HttpResponse response = client.execute(httpDelete); + assertEquals(200, response.getStatusLine().getStatusCode()); + + Course course = getCourse(1); + assertEquals(1, course.getStudents().size()); + assertEquals(2, course.getStudents().get(0).getId()); + assertEquals("Student B", course.getStudents().get(0).getName()); + } + + private Course getCourse(int courseOrder) throws IOException { + URL url = new URL(BASE_URL + courseOrder); + InputStream input = url.openStream(); + Course course = JAXB.unmarshal(new InputStreamReader(input), Course.class); + return course; + } + + private Student getStudent(int courseOrder, int studentOrder) throws IOException { + URL url = new URL(BASE_URL + courseOrder + "/students/" + studentOrder); + InputStream input = url.openStream(); + Student student = JAXB.unmarshal(new InputStreamReader(input), Student.class); + return student; + } +} \ No newline at end of file diff --git a/apache-cxf/pom.xml b/apache-cxf/pom.xml index 022fc59f9b..af7949bb6c 100644 --- a/apache-cxf/pom.xml +++ b/apache-cxf/pom.xml @@ -8,6 +8,7 @@ cxf-introduction cxf-spring + cxf-jaxrs-implementation From 4f64784e841d255323d2c76f3be7289615ee9f72 Mon Sep 17 00:00:00 2001 From: sanketmeghani Date: Sun, 9 Oct 2016 11:17:22 +0530 Subject: [PATCH 064/309] Mocking current time for JUnits --- .../baeldung/util/CurrentDateTimeTest.java | 42 ++++++++++++------- 1 file changed, 26 insertions(+), 16 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java index 06d9394a5e..599d5a5894 100644 --- a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java +++ b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java @@ -1,47 +1,57 @@ package com.baeldung.util; import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; +import java.time.Clock; import java.time.Instant; import java.time.LocalDate; import java.time.LocalTime; +import java.time.ZoneId; import java.time.temporal.ChronoField; -import java.util.Calendar; -import java.util.GregorianCalendar; +import org.junit.BeforeClass; import org.junit.Test; +import org.mockito.Mockito; public class CurrentDateTimeTest { + private static Clock clock; + + @BeforeClass + public static void setup() { + final Instant currentTime = Instant.parse("2016-10-09T15:10:30.00Z"); + + clock = Mockito.mock(Clock.class); + when(clock.instant()).thenAnswer((invocation) -> currentTime); + when(clock.getZone()).thenAnswer((invocation) -> ZoneId.of("UTC")); + } + @Test public void shouldReturnCurrentDate() { - final LocalDate now = LocalDate.now(); - final Calendar calendar = GregorianCalendar.getInstance(); + final LocalDate now = LocalDate.now(clock); - assertEquals("10-10-2010".length(), now.toString().length()); - assertEquals(calendar.get(Calendar.DATE), now.get(ChronoField.DAY_OF_MONTH)); - assertEquals(calendar.get(Calendar.MONTH), now.get(ChronoField.MONTH_OF_YEAR) - 1); - assertEquals(calendar.get(Calendar.YEAR), now.get(ChronoField.YEAR)); + assertEquals(9, now.get(ChronoField.DAY_OF_MONTH)); + assertEquals(10, now.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(2016, now.get(ChronoField.YEAR)); } @Test public void shouldReturnCurrentTime() { - final LocalTime now = LocalTime.now(); - final Calendar calendar = GregorianCalendar.getInstance(); + final LocalTime now = LocalTime.now(clock); - assertEquals(calendar.get(Calendar.HOUR_OF_DAY), now.get(ChronoField.HOUR_OF_DAY)); - assertEquals(calendar.get(Calendar.MINUTE), now.get(ChronoField.MINUTE_OF_HOUR)); - assertEquals(calendar.get(Calendar.SECOND), now.get(ChronoField.SECOND_OF_MINUTE)); + assertEquals(15, now.get(ChronoField.HOUR_OF_DAY)); + assertEquals(10, now.get(ChronoField.MINUTE_OF_HOUR)); + assertEquals(30, now.get(ChronoField.SECOND_OF_MINUTE)); } @Test public void shouldReturnCurrentTimestamp() { - final Instant now = Instant.now(); - final Calendar calendar = GregorianCalendar.getInstance(); + final Instant now = Instant.now(clock); - assertEquals(calendar.getTimeInMillis() / 1000, now.getEpochSecond()); + assertEquals(clock.instant().getEpochSecond(), now.getEpochSecond()); } } From 09b7c6e82240e4bdd9e491d535b248e37418c793 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sun, 9 Oct 2016 10:16:34 +0200 Subject: [PATCH 065/309] removing unused module --- spring-cloud-config/README.md | 27 ---------- spring-cloud-config/docker/Dockerfile.client | 6 --- spring-cloud-config/docker/Dockerfile.server | 9 ---- spring-cloud-config/docker/files/.gitignore | 2 - .../docker/files/config-client-entrypoint.sh | 8 --- spring-cloud-config/pom.xml | 52 ------------------- 6 files changed, 104 deletions(-) delete mode 100644 spring-cloud-config/README.md delete mode 100644 spring-cloud-config/docker/Dockerfile.client delete mode 100644 spring-cloud-config/docker/Dockerfile.server delete mode 100644 spring-cloud-config/docker/files/.gitignore delete mode 100644 spring-cloud-config/docker/files/config-client-entrypoint.sh delete mode 100644 spring-cloud-config/pom.xml diff --git a/spring-cloud-config/README.md b/spring-cloud-config/README.md deleted file mode 100644 index b8ebb2bfe9..0000000000 --- a/spring-cloud-config/README.md +++ /dev/null @@ -1,27 +0,0 @@ -## 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/docker/Dockerfile.client b/spring-cloud-config/docker/Dockerfile.client deleted file mode 100644 index 0f9293bd22..0000000000 --- a/spring-cloud-config/docker/Dockerfile.client +++ /dev/null @@ -1,6 +0,0 @@ -FROM alpine-java:base -MAINTAINER baeldung.com -RUN apk --no-cache add netcat-openbsd -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 deleted file mode 100644 index 90d7e2a7cf..0000000000 --- a/spring-cloud-config/docker/Dockerfile.server +++ /dev/null @@ -1,9 +0,0 @@ -FROM alpine-java:base -MAINTAINER baeldung.com -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"] -CMD ["-jar", "/opt/spring-cloud/lib/config-server.jar"] -VOLUME /var/lib/spring-cloud/config-repo -EXPOSE 8888 diff --git a/spring-cloud-config/docker/files/.gitignore b/spring-cloud-config/docker/files/.gitignore deleted file mode 100644 index 28ffcbffdb..0000000000 --- a/spring-cloud-config/docker/files/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/UnlimitedJCEPolicyJDK8 -/*.jar diff --git a/spring-cloud-config/docker/files/config-client-entrypoint.sh b/spring-cloud-config/docker/files/config-client-entrypoint.sh deleted file mode 100644 index 12352119fa..0000000000 --- a/spring-cloud-config/docker/files/config-client-entrypoint.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -while ! nc -z config-server 8888 ; do - echo "Waiting for upcoming Config Server" - sleep 2 -done - -java -jar /opt/spring-cloud/lib/config-client.jar diff --git a/spring-cloud-config/pom.xml b/spring-cloud-config/pom.xml deleted file mode 100644 index 3b1b59b037..0000000000 --- a/spring-cloud-config/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - 4.0.0 - - com.baeldung.spring.cloud - spring-cloud-config - pom - - - spring-cloud-config-server - spring-cloud-config-client - - - - 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.springframework.boot - spring-boot-maven-plugin - 1.4.0.RELEASE - - - - - From 3b20cf25d116703f98949498015ecd1bf66891f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ambrus=20Adri=C3=A1n-Zolt=C3=A1n?= Date: Sun, 9 Oct 2016 17:28:59 +0300 Subject: [PATCH 066/309] Created an example about custom AccessDecisionVoters in Spring Security. --- spring-security-custom-voter/pom.xml | 56 +++++++++++++++ .../main/java/org/baeldung/Application.java | 12 ++++ .../baeldung/security/MinuteBasedVoter.java | 38 ++++++++++ .../baeldung/security/WebSecurityConfig.java | 69 +++++++++++++++++++ .../baeldung/security/XmlSecurityConfig.java | 15 ++++ .../main/java/org/baeldung/web/MvcConfig.java | 18 +++++ .../src/main/resources/spring-security.xml | 40 +++++++++++ .../src/main/resources/templates/private.html | 10 +++ .../src/main/webapp/WEB-INF/web.xml | 47 +++++++++++++ 9 files changed, 305 insertions(+) create mode 100644 spring-security-custom-voter/pom.xml create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/Application.java create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java create mode 100644 spring-security-custom-voter/src/main/resources/spring-security.xml create mode 100644 spring-security-custom-voter/src/main/resources/templates/private.html create mode 100644 spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml diff --git a/spring-security-custom-voter/pom.xml b/spring-security-custom-voter/pom.xml new file mode 100644 index 0000000000..800fe356b4 --- /dev/null +++ b/spring-security-custom-voter/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + + org.baeldung + spring-security-custom-voter + 0.0.1-SNAPSHOT + war + + spring-security-custom-voter + Custom AccessDecisionVoter with Spring Security + + + org.springframework.boot + spring-boot-starter-parent + 1.4.1.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/Application.java b/spring-security-custom-voter/src/main/java/org/baeldung/Application.java new file mode 100644 index 0000000000..a9d6f3b8b1 --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/Application.java @@ -0,0 +1,12 @@ +package org.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java new file mode 100644 index 0000000000..8d22c52b0d --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java @@ -0,0 +1,38 @@ +package org.baeldung.security; + +import org.springframework.security.access.AccessDecisionVoter; +import org.springframework.security.access.ConfigAttribute; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +public class MinuteBasedVoter implements AccessDecisionVoter { + @Override + public boolean supports(ConfigAttribute attribute) { + return true; + } + + @Override + public boolean supports(Class clazz) { + return true; + } + + @Override + public int vote(Authentication authentication, Object object, Collection collection) { + List roles = authentication + .getAuthorities() + .stream().map(GrantedAuthority::getAuthority) + .collect(Collectors.toList()); + + for (String role: roles) { + if ("ROLE_USER".equals(role) && LocalDateTime.now().getMinute() % 2 != 0) { + return ACCESS_DENIED; + } + } + return ACCESS_ABSTAIN; + } +} diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java b/spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java new file mode 100644 index 0000000000..b3fb196424 --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java @@ -0,0 +1,69 @@ +package org.baeldung.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.access.AccessDecisionManager; +import org.springframework.security.access.AccessDecisionVoter; +import org.springframework.security.access.vote.AuthenticatedVoter; +import org.springframework.security.access.vote.RoleVoter; +import org.springframework.security.access.vote.UnanimousBased; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.access.expression.WebExpressionVoter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; + +import java.util.Arrays; +import java.util.List; + +@Configuration +@EnableWebSecurity +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + @Autowired + public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { + // @formatter: off + auth.inMemoryAuthentication() + .withUser("user").password("pass").roles("USER") + .and() + .withUser("admin").password("pass").roles("ADMIN"); + // @formatter: on + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + // @formatter: off + http + // needed so our login could work + .csrf() + .disable() + .authorizeRequests() + .anyRequest() + .authenticated() + .accessDecisionManager(accessDecisionManager()) + .antMatchers("/").hasAnyRole("ROLE_ADMIN", "ROLE_USER") + .and() + .formLogin() + .permitAll() + .and() + .logout() + .permitAll() + .deleteCookies("JSESSIONID") + .logoutSuccessUrl("/login"); + // @formatter: on + } + + @Bean + public AccessDecisionManager accessDecisionManager() { + // @formatter: off + List> decisionVoters = + Arrays.asList( + new WebExpressionVoter(), + new RoleVoter(), + new AuthenticatedVoter(), + new MinuteBasedVoter()); + // @formatter: on + return new UnanimousBased(decisionVoters); + } +} diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java b/spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java new file mode 100644 index 0000000000..45e095c66e --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java @@ -0,0 +1,15 @@ +package org.baeldung.security; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; + +/** + * Created by ambrusadrianz on 09/10/2016. + */ +@Configuration +//@ImportResource({"classpath:spring-security.xml"}) +public class XmlSecurityConfig { + public XmlSecurityConfig() { + super(); + } +} diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java b/spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java new file mode 100644 index 0000000000..5d38dca1ff --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java @@ -0,0 +1,18 @@ +package org.baeldung.web; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +/** + * Created by ambrusadrianz on 30/09/2016. + */ + +@Configuration +public class MvcConfig extends WebMvcConfigurerAdapter { + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName("private"); + } +} diff --git a/spring-security-custom-voter/src/main/resources/spring-security.xml b/spring-security-custom-voter/src/main/resources/spring-security.xml new file mode 100644 index 0000000000..117638289e --- /dev/null +++ b/spring-security-custom-voter/src/main/resources/spring-security.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-security-custom-voter/src/main/resources/templates/private.html b/spring-security-custom-voter/src/main/resources/templates/private.html new file mode 100644 index 0000000000..5af8c7a13e --- /dev/null +++ b/spring-security-custom-voter/src/main/resources/templates/private.html @@ -0,0 +1,10 @@ + + + + Private + + +

    Congrats!

    + + \ No newline at end of file diff --git a/spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml b/spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..d69bce35ae --- /dev/null +++ b/spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,47 @@ + + + + Spring Secured Application + + + + mvc + org.springframework.web.servlet.DispatcherServlet + 1 + + + mvc + / + + + + contextClass + + org.springframework.web.context.support.AnnotationConfigWebApplicationContext + + + + contextConfigLocation + org.baeldung.spring.web.config + + + + org.springframework.web.context.ContextLoaderListener + + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + springSecurityFilterChain + /* + + + \ No newline at end of file From d98924b39db3405cdf32eb4856f3b3c5b20b5734 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:52:52 -0400 Subject: [PATCH 067/309] Updated indentation and refactored code --- spring-jms/src/com/baeldung/spring/jms/Employee.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/Employee.java b/spring-jms/src/com/baeldung/spring/jms/Employee.java index a0346c4291..36783ebf46 100644 --- a/spring-jms/src/com/baeldung/spring/jms/Employee.java +++ b/spring-jms/src/com/baeldung/spring/jms/Employee.java @@ -18,6 +18,6 @@ public class Employee { } public String toString() { - return "Person: name(" + name + "), age(" + age + ")"; + return "Employee: name(" + name + "), age(" + age + ")"; } } From 94f258f90c16c326979cc8efdab1eefb53cae893 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:53:20 -0400 Subject: [PATCH 068/309] Updated indentation and refactored code --- .../spring/jms/SampleJmsMessageSender.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java index e3eccea03e..123edccb4d 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -1,6 +1,8 @@ package com.baeldung.spring.jms; -import javax.jms.ConnectionFactory; +import java.util.HashMap; +import java.util.Map; + import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Queue; @@ -14,8 +16,8 @@ public class SampleJmsMessageSender { private JmsTemplate jmsTemplate; private Queue queue; - public void setConnectionFactory(ConnectionFactory cf) { - this.jmsTemplate = new JmsTemplate(cf); + public void setJmsTemplate(JmsTemplate jmsTemplate) { + this.jmsTemplate = jmsTemplate; } public void setQueue(Queue queue) { @@ -29,4 +31,12 @@ public class SampleJmsMessageSender { } }); } -} \ No newline at end of file + + public void sendMessage(final Employee employee) { + System.out.println("Jms Message Sender : " + employee); + Map map = new HashMap(); + map.put("name", employee.getName()); + map.put("age", employee.getAge()); + this.jmsTemplate.convertAndSend(map); + } +} From 53a353916b1bf91653c8df6907e630b3751582e1 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:55:01 -0400 Subject: [PATCH 069/309] Updated indentation and refactored code Added a a new method receiveMessage() to receive custom converted messages --- .../baeldung/spring/jms/SampleListener.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/com/baeldung/spring/jms/SampleListener.java index 466cac44a0..8c28ab3e35 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleListener.java +++ b/spring-jms/src/com/baeldung/spring/jms/SampleListener.java @@ -1,18 +1,26 @@ package com.baeldung.spring.jms; +import java.util.Map; + import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; +import org.springframework.jms.core.JmsTemplate; + public class SampleListener implements MessageListener { - private String textMessage; + public JmsTemplate getJmsTemplate() { + return getJmsTemplate(); + } public void onMessage(Message message) { if (message instanceof TextMessage) { try { - textMessage = ((TextMessage) message).getText(); + + String msg = ((TextMessage) message).getText(); + System.out.println("Message has been consumed : " + msg); } catch (JMSException ex) { throw new RuntimeException(ex); } @@ -20,4 +28,10 @@ public class SampleListener implements MessageListener { throw new IllegalArgumentException("Message Error"); } } -} \ No newline at end of file + + public Employee receiveMessage() throws JMSException { + Map map = (Map) getJmsTemplate().receiveAndConvert(); + Employee employee = new Employee((String) map.get("name"), (Integer) map.get("age")); + return employee; + } +} From fe9c63560d12e51a9ca7318639d9fa3a79da90f2 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:55:26 -0400 Subject: [PATCH 070/309] Updated indentation --- .../baeldung/spring/jms/SampleMessageConverter.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java index 856e0e9e49..2142461a5f 100644 --- a/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java +++ b/spring-jms/src/com/baeldung/spring/jms/SampleMessageConverter.java @@ -11,17 +11,17 @@ import org.springframework.jms.support.converter.MessageConverter; public class SampleMessageConverter implements MessageConverter { public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { - Employee person = (Employee) object; + Employee employee = (Employee) object; MapMessage message = session.createMapMessage(); - message.setString("name", person.getName()); - message.setInt("age", person.getAge()); + message.setString("name", employee.getName()); + message.setInt("age", employee.getAge()); return message; } public Object fromMessage(Message message) throws JMSException, MessageConversionException { MapMessage mapMessage = (MapMessage) message; - Employee person = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); - return person; + Employee employee = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); + return employee; } } From d1bdfb5234c94c4c99fbd1eba6ea7f3adde80387 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:56:37 -0400 Subject: [PATCH 071/309] This class is not required Embedded ActiveMq is created from XML now. --- .../baeldung/spring/jms/SampleJMSExample.java | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100644 spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java diff --git a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java b/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java deleted file mode 100644 index bdde97b82d..0000000000 --- a/spring-jms/src/com/baeldung/spring/jms/SampleJMSExample.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.spring.jms; - -import java.net.URI; -import java.net.URISyntaxException; - -import org.apache.activemq.broker.BrokerFactory; -import org.apache.activemq.broker.BrokerService; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class SampleJMSExample { - public static void main(String[] args) throws URISyntaxException, Exception { - BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:61616)")); - broker.start(); - ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); - - } -} From 0af6fbea16c2ed7f1aee6154a06713bee3794c1b Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:58:30 -0400 Subject: [PATCH 072/309] Updated ApplicationContext.xml --- .../src/main/resources/applicationContext.xml | 34 ++++++++++++------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/spring-jms/src/main/resources/applicationContext.xml b/spring-jms/src/main/resources/applicationContext.xml index c15289763f..d94eb4c371 100644 --- a/spring-jms/src/main/resources/applicationContext.xml +++ b/spring-jms/src/main/resources/applicationContext.xml @@ -3,16 +3,27 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> - - - - - - - - + + + + + + + + + + + + + + + + + + - + @@ -23,8 +34,7 @@ - + - - \ No newline at end of file + From 147e1bfe107eed1dcabca36fa7a27847cd4d9d7d Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 13:59:25 -0400 Subject: [PATCH 073/309] Embedded activemq is configured in this file --- .../src/main/resources/EmbeddedActiveMQ.xml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 spring-jms/src/main/resources/EmbeddedActiveMQ.xml diff --git a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml new file mode 100644 index 0000000000..5e956144fd --- /dev/null +++ b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + \ No newline at end of file From 4240e34c376b670ad44df0ce19af55d47eda3329 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:01:42 -0400 Subject: [PATCH 074/309] Junit tests JUnit tests for testing default text message as well as custom messages --- .../src/DefaultTextMessageSenderTest.java | 26 ++++++++++++++++++ .../src/MapMessageConvertAndSendTest.java | 27 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 spring-jms/src/DefaultTextMessageSenderTest.java create mode 100644 spring-jms/src/MapMessageConvertAndSendTest.java diff --git a/spring-jms/src/DefaultTextMessageSenderTest.java b/spring-jms/src/DefaultTextMessageSenderTest.java new file mode 100644 index 0000000000..8806f4d1ba --- /dev/null +++ b/spring-jms/src/DefaultTextMessageSenderTest.java @@ -0,0 +1,26 @@ +package com.baeldung.spring.jms.test; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.spring.jms.SampleJmsMessageSender; + +public class DefaultTextMessageSenderTest { + + private SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @Before + public void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSimpleSend() { + messageProducer.simpleSend(); + } + +} \ No newline at end of file diff --git a/spring-jms/src/MapMessageConvertAndSendTest.java b/spring-jms/src/MapMessageConvertAndSendTest.java new file mode 100644 index 0000000000..d2a3867679 --- /dev/null +++ b/spring-jms/src/MapMessageConvertAndSendTest.java @@ -0,0 +1,27 @@ +package com.baeldung.spring.jms.test; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.spring.jms.Employee; +import com.baeldung.spring.jms.SampleJmsMessageSender; + +public class MapMessageConvertAndSendTest { + + private SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @Before + public void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSendMessage() { + messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); + } + +} From 528e3b1ef59ee883deabbda34f204c01efbda578 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:02:38 -0400 Subject: [PATCH 075/309] Uploaded in wrong location --- .../src/DefaultTextMessageSenderTest.java | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 spring-jms/src/DefaultTextMessageSenderTest.java diff --git a/spring-jms/src/DefaultTextMessageSenderTest.java b/spring-jms/src/DefaultTextMessageSenderTest.java deleted file mode 100644 index 8806f4d1ba..0000000000 --- a/spring-jms/src/DefaultTextMessageSenderTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.baeldung.spring.jms.test; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.spring.jms.SampleJmsMessageSender; - -public class DefaultTextMessageSenderTest { - - private SampleJmsMessageSender messageProducer; - - @SuppressWarnings("resource") - @Before - public void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); - messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); - } - - @Test - public void testSimpleSend() { - messageProducer.simpleSend(); - } - -} \ No newline at end of file From d640b9818d91615e6594f159226b0b4b87bb0920 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:02:46 -0400 Subject: [PATCH 076/309] Uploaded in wrong location --- .../src/MapMessageConvertAndSendTest.java | 27 ------------------- 1 file changed, 27 deletions(-) delete mode 100644 spring-jms/src/MapMessageConvertAndSendTest.java diff --git a/spring-jms/src/MapMessageConvertAndSendTest.java b/spring-jms/src/MapMessageConvertAndSendTest.java deleted file mode 100644 index d2a3867679..0000000000 --- a/spring-jms/src/MapMessageConvertAndSendTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.spring.jms.test; - -import org.junit.Before; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -import com.baeldung.spring.jms.Employee; -import com.baeldung.spring.jms.SampleJmsMessageSender; - -public class MapMessageConvertAndSendTest { - - private SampleJmsMessageSender messageProducer; - - @SuppressWarnings("resource") - @Before - public void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); - messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); - } - - @Test - public void testSendMessage() { - messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); - } - -} From b253563e676013443ec0ead0445e28ae6a8552b9 Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:06:40 -0400 Subject: [PATCH 077/309] Junit tests JUnit Tests for default text messages and custom converted messages --- .../jms/DefaultTextMessageSenderTest.java | 26 ++++++++++++++++++ .../jms/MapMessageConvertAndSendTest.java | 27 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java create mode 100644 spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java diff --git a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java new file mode 100644 index 0000000000..5176d79386 --- /dev/null +++ b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -0,0 +1,26 @@ +package com.baeldung.spring.jms; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.spring.jms.SampleJmsMessageSender; + +public class DefaultTextMessageSenderTest { + + private SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @Before + public void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSimpleSend() { + messageProducer.simpleSend(); + } + +} \ No newline at end of file diff --git a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java new file mode 100644 index 0000000000..4bd9827c60 --- /dev/null +++ b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -0,0 +1,27 @@ +package com.baeldung.spring.jms; + +import org.junit.Before; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import com.baeldung.spring.jms.Employee; +import com.baeldung.spring.jms.SampleJmsMessageSender; + +public class MapMessageConvertAndSendTest { + + private SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @Before + public void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSendMessage() { + messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); + } + +} From ca3e67fcd8da6a5ce90a34b1819e92159eaa2f3d Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:21:43 -0400 Subject: [PATCH 078/309] Changed @Before to @BeforeClass accordingly made the necessary methods staic --- .../spring/jms/DefaultTextMessageSenderTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java index 5176d79386..2016122105 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java +++ b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -1,6 +1,6 @@ package com.baeldung.spring.jms; -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -9,11 +9,11 @@ import com.baeldung.spring.jms.SampleJmsMessageSender; public class DefaultTextMessageSenderTest { - private SampleJmsMessageSender messageProducer; + private static SampleJmsMessageSender messageProducer; @SuppressWarnings("resource") - @Before - public void setUp() { + @BeforeClass + public static void setUp() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); } @@ -23,4 +23,4 @@ public class DefaultTextMessageSenderTest { messageProducer.simpleSend(); } -} \ No newline at end of file +} From 872654d54cbfd0768e7c36dcc8ab2634df5ec8aa Mon Sep 17 00:00:00 2001 From: Kiran Date: Sun, 9 Oct 2016 14:22:20 -0400 Subject: [PATCH 079/309] Changed @Before to @BeforeClass accordingly made the necessary methods staic --- .../baeldung/spring/jms/MapMessageConvertAndSendTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java index 4bd9827c60..19b9097601 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java +++ b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -1,6 +1,6 @@ package com.baeldung.spring.jms; -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -10,11 +10,11 @@ import com.baeldung.spring.jms.SampleJmsMessageSender; public class MapMessageConvertAndSendTest { - private SampleJmsMessageSender messageProducer; + private static SampleJmsMessageSender messageProducer; @SuppressWarnings("resource") - @Before - public void setUp() { + @BeforeClass + public static void setUp() { ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); } From 02a1c2d114f43604baaeeb0a52efabd063ea934f Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 9 Oct 2016 20:36:41 +0200 Subject: [PATCH 080/309] Merge fix --- .../baeldung/spring/jms/DefaultTextMessageSenderTest.java | 3 +-- .../baeldung/spring/jms/MapMessageConvertAndSendTest.java | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java index 2016122105..aceb551563 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java +++ b/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -1,12 +1,11 @@ package com.baeldung.spring.jms; +import com.baeldung.spring.jms.SampleJmsMessageSender; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import com.baeldung.spring.jms.SampleJmsMessageSender; - public class DefaultTextMessageSenderTest { private static SampleJmsMessageSender messageProducer; diff --git a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java index 19b9097601..d649938533 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java +++ b/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -1,13 +1,12 @@ package com.baeldung.spring.jms; +import com.baeldung.spring.jms.Employee; +import com.baeldung.spring.jms.SampleJmsMessageSender; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import com.baeldung.spring.jms.Employee; -import com.baeldung.spring.jms.SampleJmsMessageSender; - public class MapMessageConvertAndSendTest { private static SampleJmsMessageSender messageProducer; From dd360db0605c335f0169817d94bfa59ff7641ddc Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 9 Oct 2016 21:21:09 +0200 Subject: [PATCH 081/309] Refactor JMS examples --- spring-jms/pom.xml | 22 ++++++-- .../spring/jms/SampleJmsMessageSender.java | 19 ++----- .../baeldung/spring/jms/SampleListener.java | 8 ++- .../spring/jms/SampleMessageConverter.java | 9 ++-- .../jms/DefaultTextMessageSenderTest.java | 50 +++++++++--------- .../jms/MapMessageConvertAndSendTest.java | 51 +++++++++---------- 6 files changed, 81 insertions(+), 78 deletions(-) rename spring-jms/src/test/{ => java}/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java (78%) rename spring-jms/src/test/{ => java}/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java (75%) diff --git a/spring-jms/pom.xml b/spring-jms/pom.xml index 8f78469989..b15c18f991 100644 --- a/spring-jms/pom.xml +++ b/spring-jms/pom.xml @@ -26,6 +26,12 @@ activemq-all ${activemq.version}
    + + junit + junit + 4.12 + test +
    @@ -36,8 +42,8 @@ maven-compiler-plugin 3.2 - 1.7 - 1.7 + 1.8 + 1.8 @@ -52,6 +58,16 @@ - spring-jms + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + spring-jms
    \ No newline at end of file diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index 8751b42ff8..1ef3902a31 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -1,16 +1,11 @@ package com.baeldung.spring.jms; +import org.springframework.jms.core.JmsTemplate; + +import javax.jms.Queue; import java.util.HashMap; import java.util.Map; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.Queue; -import javax.jms.Session; - -import org.springframework.jms.core.JmsTemplate; -import org.springframework.jms.core.MessageCreator; - public class SampleJmsMessageSender { private JmsTemplate jmsTemplate; @@ -25,16 +20,12 @@ public class SampleJmsMessageSender { } public void simpleSend() { - this.jmsTemplate.send(this.queue, new MessageCreator() { - public Message createMessage(Session session) throws JMSException { - return session.createTextMessage("hello queue world"); - } - }); + jmsTemplate.send(queue, s -> s.createTextMessage("hello queue world")); } public void sendMessage(final Employee employee) { System.out.println("Jms Message Sender : " + employee); - Map map = new HashMap(); + Map map = new HashMap<>(); map.put("name", employee.getName()); map.put("age", employee.getAge()); this.jmsTemplate.convertAndSend(map); diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java index 3ad4d70829..eb9d51160d 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java @@ -1,13 +1,12 @@ package com.baeldung.spring.jms; -import java.util.Map; +import org.springframework.jms.core.JmsTemplate; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; - -import org.springframework.jms.core.JmsTemplate; +import java.util.Map; public class SampleListener implements MessageListener { @@ -31,7 +30,6 @@ public class SampleListener implements MessageListener { public Employee receiveMessage() throws JMSException { Map map = (Map) getJmsTemplate().receiveAndConvert(); - Employee employee = new Employee((String) map.get("name"), (Integer) map.get("age")); - return employee; + return new Employee((String) map.get("name"), (Integer) map.get("age")); } } diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java index c61cd5bc89..368a62841f 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleMessageConverter.java @@ -1,13 +1,13 @@ package com.baeldung.spring.jms; +import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.jms.support.converter.MessageConverter; + import javax.jms.JMSException; import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.Session; -import org.springframework.jms.support.converter.MessageConversionException; -import org.springframework.jms.support.converter.MessageConverter; - public class SampleMessageConverter implements MessageConverter { public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException { @@ -20,8 +20,7 @@ public class SampleMessageConverter implements MessageConverter { public Object fromMessage(Message message) throws JMSException, MessageConversionException { MapMessage mapMessage = (MapMessage) message; - Employee employee = new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); - return employee; + return new Employee(mapMessage.getString("name"), mapMessage.getInt("age")); } } diff --git a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java similarity index 78% rename from spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java rename to spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java index aceb551563..439bc6caad 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java +++ b/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -1,25 +1,25 @@ -package com.baeldung.spring.jms; - -import com.baeldung.spring.jms.SampleJmsMessageSender; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class DefaultTextMessageSenderTest { - - private static SampleJmsMessageSender messageProducer; - - @SuppressWarnings("resource") - @BeforeClass - public static void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); - messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); - } - - @Test - public void testSimpleSend() { - messageProducer.simpleSend(); - } - -} +package com.baeldung.spring.jms; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class DefaultTextMessageSenderTest { + + private static SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @BeforeClass + public static void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext( + "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSimpleSend() { + messageProducer.simpleSend(); + } + +} diff --git a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java similarity index 75% rename from spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java rename to spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java index d649938533..da9bb0294d 100644 --- a/spring-jms/src/test/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java +++ b/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -1,26 +1,25 @@ -package com.baeldung.spring.jms; - -import com.baeldung.spring.jms.Employee; -import com.baeldung.spring.jms.SampleJmsMessageSender; -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class MapMessageConvertAndSendTest { - - private static SampleJmsMessageSender messageProducer; - - @SuppressWarnings("resource") - @BeforeClass - public static void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext(new String[] { "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml" }); - messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); - } - - @Test - public void testSendMessage() { - messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); - } - -} +package com.baeldung.spring.jms; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class MapMessageConvertAndSendTest { + + private static SampleJmsMessageSender messageProducer; + + @SuppressWarnings("resource") + @BeforeClass + public static void setUp() { + ApplicationContext applicationContext = new ClassPathXmlApplicationContext( + "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); + messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); + } + + @Test + public void testSendMessage() { + messageProducer.sendMessage(new Employee("JavaDeveloper2", 22)); + } + +} From 423dc63cdd0f3f5bb214f04432abf2fda5b2f2d0 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Mon, 10 Oct 2016 00:34:11 +0200 Subject: [PATCH 082/309] BAEL-226 - Source code for wicket --- .../wicket/examples/{Examples.html => HelloWorld.html} | 0 .../wicket/examples/{Examples.java => HelloWorld.java} | 2 +- ...{ExamplesApplication.java => HelloWorldApplication.java} | 5 ++--- .../java/com/baeldung/wicket/examples/TestHomePage.java | 6 +++--- wicket/src/main/webapp/WEB-INF/web.xml | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) rename wicket/src/main/java/com/baeldung/wicket/examples/{Examples.html => HelloWorld.html} (100%) rename wicket/src/main/java/com/baeldung/wicket/examples/{Examples.java => HelloWorld.java} (77%) rename wicket/src/main/java/com/baeldung/wicket/examples/{ExamplesApplication.java => HelloWorldApplication.java} (80%) diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/Examples.html b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.html similarity index 100% rename from wicket/src/main/java/com/baeldung/wicket/examples/Examples.html rename to wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.html diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/Examples.java b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.java similarity index 77% rename from wicket/src/main/java/com/baeldung/wicket/examples/Examples.java rename to wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.java index 358e4f7b19..ceb0836467 100644 --- a/wicket/src/main/java/com/baeldung/wicket/examples/Examples.java +++ b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorld.java @@ -2,7 +2,7 @@ package com.baeldung.wicket.examples; import org.apache.wicket.markup.html.WebPage; -public class Examples extends WebPage { +public class HelloWorld extends WebPage { private static final long serialVersionUID = 1L; diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java similarity index 80% rename from wicket/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java rename to wicket/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java index 711e8f01fd..079280adce 100644 --- a/wicket/src/main/java/com/baeldung/wicket/examples/ExamplesApplication.java +++ b/wicket/src/main/java/com/baeldung/wicket/examples/HelloWorldApplication.java @@ -4,15 +4,14 @@ import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.protocol.http.WebApplication; import com.baeldung.wicket.examples.cafeaddress.CafeAddress; -import com.baeldung.wicket.examples.helloworld.HelloWorld; -public class ExamplesApplication extends WebApplication { +public class HelloWorldApplication extends WebApplication { /** * @see org.apache.wicket.Application#getHomePage() */ @Override public Class getHomePage() { - return Examples.class; + return HelloWorld.class; } /** diff --git a/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java b/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java index a393f1d178..7015ffd255 100644 --- a/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java +++ b/wicket/src/main/test/java/com/baeldung/wicket/examples/TestHomePage.java @@ -9,15 +9,15 @@ public class TestHomePage { @Before public void setUp() { - tester = new WicketTester(new ExamplesApplication()); + tester = new WicketTester(new HelloWorldApplication()); } @Test public void whenPageInvoked_thanRenderedOK() { //start and render the test page - tester.startPage(Examples.class); + tester.startPage(HelloWorld.class); //assert rendered page class - tester.assertRenderedPage(Examples.class); + tester.assertRenderedPage(HelloWorld.class); } } diff --git a/wicket/src/main/webapp/WEB-INF/web.xml b/wicket/src/main/webapp/WEB-INF/web.xml index 8a4451c80e..8fc1b1aa95 100644 --- a/wicket/src/main/webapp/WEB-INF/web.xml +++ b/wicket/src/main/webapp/WEB-INF/web.xml @@ -21,7 +21,7 @@ org.apache.wicket.protocol.http.WicketFilter applicationClassName - com.baeldung.wicket.examples.ExamplesApplication + com.baeldung.wicket.examples.HelloWorldApplication From b8161aca1a5a9b46931c11b1dabaa5ebb0a009af Mon Sep 17 00:00:00 2001 From: maverick Date: Mon, 10 Oct 2016 08:14:51 +0530 Subject: [PATCH 083/309] Java sorting. Adding required files. This is commit for starting from new fork due to conflicts in PR. --- .../org/baeldung/java/sorting/Employee.java | 58 +++++ .../baeldung/java/sorting/JavaSorting.java | 211 ++++++++++++++++++ 2 files changed, 269 insertions(+) create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/Employee.java create mode 100644 core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java diff --git a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java new file mode 100644 index 0000000000..c48cdd91a8 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java @@ -0,0 +1,58 @@ +package org.baeldung.java.sorting; + +public class Employee implements Comparable { + private String name; + private int age; + private double salary; + + public Employee() { + } + + public Employee(String name, int age, double salary) { + super(); + this.name = name; + this.age = age; + this.salary = salary; + } + + public int getAge() { + return age; + } + + public void setAge(int age) { + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public double getSalary() { + return salary; + } + + public void setSalary(double salary) { + this.salary = salary; + } + + @Override + public String toString() { + return "(" + name + "," + age + "," + salary + ")"; + + } + + @Override + public boolean equals(Object obj) { + return ((Employee) obj).getName().equals(getName()); + } + + @Override + public int compareTo(Object o) { + Employee e = (Employee) o; + return getName().compareTo(e.getName()); + } +} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java b/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java new file mode 100644 index 0000000000..54d58dc87c --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java @@ -0,0 +1,211 @@ +package org.baeldung.java.sorting; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.junit.Test; + +public class JavaSorting { + + @Test + public void givenIntArray_whenUsingSort_thenSortedArray() { + int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedInts = {1, 5, 7, 66, 88, 89, 123, 200, 255}; + + Arrays.sort(numbers); + + assertTrue(Arrays.equals(numbers, sortedInts)); + } + + @Test + public void givenIntegerArray_whenUsingSort_thenSortedArray() { + Integer[] integers = new Integer[] + { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedIntegers = {1, 5, 7, 66, 88, 89, 123, 200, 255}; + + + Arrays.sort(integers, new Comparator() { + @Override + public int compare(Integer a, Integer b) { + return a - b; + } + }); + + assertTrue(Arrays.equals(integers, sortedIntegers)); + } + + @Test + public void givenArray_whenUsingSortWithLambdas_thenSortedArray() { + Integer[] integers = new Integer[] + { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedIntegers = {1, 5, 7, 66, 88, 89, 123, 200, 255}; + + Arrays.sort(integers, (a, b) -> { + return a - b; + }); + + assertTrue(Arrays.equals(integers, sortedIntegers)); + } + + @Test + public void givenEmpArray_SortEmpArray_thenSortedArrayinNaturalOrder() { + Employee[] employees = new Employee[] { + new Employee("John", 23, 5000), + new Employee("Steve", 26, 6000), + new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), + new Employee("Jessica", 23, 4000), + new Employee("Pearl", 33, 6000)}; + Employee[] employeesSorted = new Employee[] { + new Employee("Earl", 43, 10000), + new Employee("Frank", 33, 70000), + new Employee("Jessica", 23, 4000), + new Employee("John", 23, 5000), + new Employee("Pearl", 33, 4000), + new Employee("Steve", 26, 6000)}; + + Arrays.sort(employees); + + assertTrue(Arrays.equals(employees, employeesSorted)); + } + + + @Test + public void givenIntArray_whenUsingRangeSort_thenRangeSortedArray() { + int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedRangeInts = {5, 1, 89, 7, 88, 200, 255, 123, 66}; + + Arrays.sort(numbers, 3, 7); + + assertTrue(Arrays.equals(numbers, sortedRangeInts)); + } + + @Test + public void givenIntArray_whenUsingParallelSort_thenParallelSortedArray() { + int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, + sortedInts = {1, 5, 7, 66, 88, 89, 123, 200, 255}; + + Arrays.parallelSort(numbers); + + assertTrue(Arrays.equals(numbers, sortedInts)); + } + + + + @Test + public void givenArrayObjects_whenUsingComparing_thenSortedArrayObjects() { + List employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), + new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), + new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), + new Employee("Pearl", 33, 6000) }); + Employee[] employeesSorted = new Employee[] { + new Employee("John", 23, 5000), + new Employee("Jessica", 23, 4000), + new Employee("Steve", 26, 6000), + new Employee("Frank", 33, 70000), + new Employee("Pearl", 33, 4000), + new Employee("Earl", 43, 10000)}; + + employees.sort(Comparator.comparing(Employee::getAge));//.thenComparing(Employee::getName)); + + assertTrue(Arrays.equals(employees.toArray(), employeesSorted)); + } + + @Test + public void givenList_whenUsingSort_thenSortedList() { + List integers = Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }), + sortedIntegers = Arrays.asList(new Integer[] {1, 5, 7, 66, 88, 89, 123, 200, 255}); + + Collections.sort(integers); + + assertTrue(Arrays.equals(integers.toArray(), sortedIntegers.toArray())); + } + + @Test + public void givenMap_whenSortingByKeys_thenSortedMap() { + HashMap map = new HashMap<>(); + map.put(55, "John"); + map.put(22, "Apple"); + map.put(66, "Earl"); + map.put(77, "Pearl"); + map.put(12, "George"); + map.put(6, "Rocky"); + Integer[] sortedKeys = new Integer[] { 6, 12, 22, 55, 66, 77 }; + + List> entries = new ArrayList<>(map.entrySet()); + Collections.sort(entries, new Comparator>() { + @Override + public int compare(Entry o1, Entry o2) { + return o1.getKey().compareTo(o2.getKey()); + } + }); + HashMap sortedMap = new LinkedHashMap<>(); + for (Map.Entry entry : entries) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + + assertTrue(Arrays.equals(sortedMap.keySet().toArray(), sortedKeys)); + } + + @Test + public void givenMap_whenSortingByValues_thenSortedMap() { + HashMap map = new HashMap<>(); + map.put(55, "John"); + map.put(22, "Apple"); + map.put(66, "Earl"); + map.put(77, "Pearl"); + map.put(12, "George"); + map.put(6, "Rocky"); + String[] sortedValues = new String[] + { "Apple", "Earl", "George", "John", "Pearl", "Rocky" }; + + List> entries = new ArrayList<>(map.entrySet()); + Collections.sort(entries, new Comparator>() { + @Override + public int compare(Entry o1, Entry o2) { + return o1.getValue().compareTo(o2.getValue()); + } + }); + HashMap sortedMap = new LinkedHashMap<>(); + for (Map.Entry entry : entries) { + sortedMap.put(entry.getKey(), entry.getValue()); + } + + assertTrue(Arrays.equals(sortedMap.values().toArray(), sortedValues)); + } + + + + + + + @Test + public void givenSet_whenUsingSort_thenSortedSet() { + HashSet integers = new LinkedHashSet<>(Arrays.asList(new Integer[] + { 5, 1, 89, 255, 7, 88, 200, 123, 66 })), + sortedIntegers = new LinkedHashSet<>(Arrays.asList(new Integer[] + {255, 200, 123, 89, 88, 66, 7, 5, 1})); + + ArrayList list = new ArrayList(integers); + Collections.sort(list, (i1, i2) -> { + return i2 - i1; + }); + integers = new LinkedHashSet<>(list); + + assertTrue(Arrays.equals(integers.toArray(), sortedIntegers.toArray())); + } + + + +} From 9f3c791d99dc3550f8330fc1f5fcbd9f7dfb9883 Mon Sep 17 00:00:00 2001 From: maverick Date: Mon, 10 Oct 2016 08:30:54 +0530 Subject: [PATCH 084/309] Added files missed in earlier PR --- core-java/src/test/resources/test_md5.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 core-java/src/test/resources/test_md5.txt diff --git a/core-java/src/test/resources/test_md5.txt b/core-java/src/test/resources/test_md5.txt new file mode 100644 index 0000000000..95d09f2b10 --- /dev/null +++ b/core-java/src/test/resources/test_md5.txt @@ -0,0 +1 @@ +hello world \ No newline at end of file From 6df151a3f98950940ea4a8de491eb09fb6f976ab Mon Sep 17 00:00:00 2001 From: maverick Date: Mon, 10 Oct 2016 08:32:51 +0530 Subject: [PATCH 085/309] Removes Sorting changes for this PR --- .../org/baeldung/java/sorting/Employee.java | 58 ----- .../baeldung/java/sorting/JavaSorting.java | 211 ------------------ 2 files changed, 269 deletions(-) delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/Employee.java delete mode 100644 core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java diff --git a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java b/core-java/src/test/java/org/baeldung/java/sorting/Employee.java deleted file mode 100644 index c48cdd91a8..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/Employee.java +++ /dev/null @@ -1,58 +0,0 @@ -package org.baeldung.java.sorting; - -public class Employee implements Comparable { - private String name; - private int age; - private double salary; - - public Employee() { - } - - public Employee(String name, int age, double salary) { - super(); - this.name = name; - this.age = age; - this.salary = salary; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public double getSalary() { - return salary; - } - - public void setSalary(double salary) { - this.salary = salary; - } - - @Override - public String toString() { - return "(" + name + "," + age + "," + salary + ")"; - - } - - @Override - public boolean equals(Object obj) { - return ((Employee) obj).getName().equals(getName()); - } - - @Override - public int compareTo(Object o) { - Employee e = (Employee) o; - return getName().compareTo(e.getName()); - } -} diff --git a/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java b/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java deleted file mode 100644 index 54d58dc87c..0000000000 --- a/core-java/src/test/java/org/baeldung/java/sorting/JavaSorting.java +++ /dev/null @@ -1,211 +0,0 @@ -package org.baeldung.java.sorting; - -import static org.junit.Assert.assertTrue; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.junit.Test; - -public class JavaSorting { - - @Test - public void givenIntArray_whenUsingSort_thenSortedArray() { - int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedInts = {1, 5, 7, 66, 88, 89, 123, 200, 255}; - - Arrays.sort(numbers); - - assertTrue(Arrays.equals(numbers, sortedInts)); - } - - @Test - public void givenIntegerArray_whenUsingSort_thenSortedArray() { - Integer[] integers = new Integer[] - { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedIntegers = {1, 5, 7, 66, 88, 89, 123, 200, 255}; - - - Arrays.sort(integers, new Comparator() { - @Override - public int compare(Integer a, Integer b) { - return a - b; - } - }); - - assertTrue(Arrays.equals(integers, sortedIntegers)); - } - - @Test - public void givenArray_whenUsingSortWithLambdas_thenSortedArray() { - Integer[] integers = new Integer[] - { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedIntegers = {1, 5, 7, 66, 88, 89, 123, 200, 255}; - - Arrays.sort(integers, (a, b) -> { - return a - b; - }); - - assertTrue(Arrays.equals(integers, sortedIntegers)); - } - - @Test - public void givenEmpArray_SortEmpArray_thenSortedArrayinNaturalOrder() { - Employee[] employees = new Employee[] { - new Employee("John", 23, 5000), - new Employee("Steve", 26, 6000), - new Employee("Frank", 33, 7000), - new Employee("Earl", 43, 10000), - new Employee("Jessica", 23, 4000), - new Employee("Pearl", 33, 6000)}; - Employee[] employeesSorted = new Employee[] { - new Employee("Earl", 43, 10000), - new Employee("Frank", 33, 70000), - new Employee("Jessica", 23, 4000), - new Employee("John", 23, 5000), - new Employee("Pearl", 33, 4000), - new Employee("Steve", 26, 6000)}; - - Arrays.sort(employees); - - assertTrue(Arrays.equals(employees, employeesSorted)); - } - - - @Test - public void givenIntArray_whenUsingRangeSort_thenRangeSortedArray() { - int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedRangeInts = {5, 1, 89, 7, 88, 200, 255, 123, 66}; - - Arrays.sort(numbers, 3, 7); - - assertTrue(Arrays.equals(numbers, sortedRangeInts)); - } - - @Test - public void givenIntArray_whenUsingParallelSort_thenParallelSortedArray() { - int [] numbers = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }, - sortedInts = {1, 5, 7, 66, 88, 89, 123, 200, 255}; - - Arrays.parallelSort(numbers); - - assertTrue(Arrays.equals(numbers, sortedInts)); - } - - - - @Test - public void givenArrayObjects_whenUsingComparing_thenSortedArrayObjects() { - List employees = Arrays.asList(new Employee[] { new Employee("John", 23, 5000), - new Employee("Steve", 26, 6000), new Employee("Frank", 33, 7000), - new Employee("Earl", 43, 10000), new Employee("Jessica", 23, 4000), - new Employee("Pearl", 33, 6000) }); - Employee[] employeesSorted = new Employee[] { - new Employee("John", 23, 5000), - new Employee("Jessica", 23, 4000), - new Employee("Steve", 26, 6000), - new Employee("Frank", 33, 70000), - new Employee("Pearl", 33, 4000), - new Employee("Earl", 43, 10000)}; - - employees.sort(Comparator.comparing(Employee::getAge));//.thenComparing(Employee::getName)); - - assertTrue(Arrays.equals(employees.toArray(), employeesSorted)); - } - - @Test - public void givenList_whenUsingSort_thenSortedList() { - List integers = Arrays.asList(new Integer[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }), - sortedIntegers = Arrays.asList(new Integer[] {1, 5, 7, 66, 88, 89, 123, 200, 255}); - - Collections.sort(integers); - - assertTrue(Arrays.equals(integers.toArray(), sortedIntegers.toArray())); - } - - @Test - public void givenMap_whenSortingByKeys_thenSortedMap() { - HashMap map = new HashMap<>(); - map.put(55, "John"); - map.put(22, "Apple"); - map.put(66, "Earl"); - map.put(77, "Pearl"); - map.put(12, "George"); - map.put(6, "Rocky"); - Integer[] sortedKeys = new Integer[] { 6, 12, 22, 55, 66, 77 }; - - List> entries = new ArrayList<>(map.entrySet()); - Collections.sort(entries, new Comparator>() { - @Override - public int compare(Entry o1, Entry o2) { - return o1.getKey().compareTo(o2.getKey()); - } - }); - HashMap sortedMap = new LinkedHashMap<>(); - for (Map.Entry entry : entries) { - sortedMap.put(entry.getKey(), entry.getValue()); - } - - assertTrue(Arrays.equals(sortedMap.keySet().toArray(), sortedKeys)); - } - - @Test - public void givenMap_whenSortingByValues_thenSortedMap() { - HashMap map = new HashMap<>(); - map.put(55, "John"); - map.put(22, "Apple"); - map.put(66, "Earl"); - map.put(77, "Pearl"); - map.put(12, "George"); - map.put(6, "Rocky"); - String[] sortedValues = new String[] - { "Apple", "Earl", "George", "John", "Pearl", "Rocky" }; - - List> entries = new ArrayList<>(map.entrySet()); - Collections.sort(entries, new Comparator>() { - @Override - public int compare(Entry o1, Entry o2) { - return o1.getValue().compareTo(o2.getValue()); - } - }); - HashMap sortedMap = new LinkedHashMap<>(); - for (Map.Entry entry : entries) { - sortedMap.put(entry.getKey(), entry.getValue()); - } - - assertTrue(Arrays.equals(sortedMap.values().toArray(), sortedValues)); - } - - - - - - - @Test - public void givenSet_whenUsingSort_thenSortedSet() { - HashSet integers = new LinkedHashSet<>(Arrays.asList(new Integer[] - { 5, 1, 89, 255, 7, 88, 200, 123, 66 })), - sortedIntegers = new LinkedHashSet<>(Arrays.asList(new Integer[] - {255, 200, 123, 89, 88, 66, 7, 5, 1})); - - ArrayList list = new ArrayList(integers); - Collections.sort(list, (i1, i2) -> { - return i2 - i1; - }); - integers = new LinkedHashSet<>(list); - - assertTrue(Arrays.equals(integers.toArray(), sortedIntegers.toArray())); - } - - - -} From 687b7e0044d3ec8ace6921e5ccdac3a84a8e6362 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 10 Oct 2016 06:46:31 +0200 Subject: [PATCH 086/309] Refactor Wicket examples --- .../examples/cafeaddress/CafeAddress.java | 33 ++++++++----------- .../examples/helloworld/HelloWorld.java | 3 -- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java b/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java index ce26c5a1ad..86820393c7 100644 --- a/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java +++ b/wicket/src/main/java/com/baeldung/wicket/examples/cafeaddress/CafeAddress.java @@ -1,10 +1,5 @@ package com.baeldung.wicket.examples.cafeaddress; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; import org.apache.wicket.markup.html.WebPage; @@ -13,29 +8,29 @@ import org.apache.wicket.markup.html.form.DropDownChoice; import org.apache.wicket.model.PropertyModel; import org.apache.wicket.request.mapper.parameter.PageParameters; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + public class CafeAddress extends WebPage { - - private static final long serialVersionUID = 1L; - - String selectedCafe; - Address address; - Map cafeNamesAndAddresses = new HashMap<>(); + private String selectedCafe; + private Address address; + private Map cafeNamesAndAddresses = new HashMap<>(); public CafeAddress(final PageParameters parameters) { super(parameters); initCafes(); - ArrayList cafeNames = new ArrayList<>(this.cafeNamesAndAddresses.keySet()); - this.selectedCafe = cafeNames.get(0); - this.address = new Address(this.cafeNamesAndAddresses.get(this.selectedCafe).getAddress()); + ArrayList cafeNames = new ArrayList<>(cafeNamesAndAddresses.keySet()); + selectedCafe = cafeNames.get(0); + address = new Address(cafeNamesAndAddresses.get(selectedCafe).getAddress()); final Label addressLabel = new Label("address", new PropertyModel(this.address, "address")); addressLabel.setOutputMarkupId(true); - final DropDownChoice cafeDropdown = new DropDownChoice<>("cafes", new PropertyModel(this, "selectedCafe"), cafeNames); + final DropDownChoice cafeDropdown = new DropDownChoice<>("cafes", new PropertyModel<>(this, "selectedCafe"), cafeNames); cafeDropdown.add(new AjaxFormComponentUpdatingBehavior("onchange") { - private static final long serialVersionUID = 1L; - @Override protected void onUpdate(AjaxRequestTarget target) { String name = (String) cafeDropdown.getDefaultModel().getObject(); @@ -61,11 +56,11 @@ public class CafeAddress extends WebPage { this.sAddress = address; } - public String getAddress() { + String getAddress() { return this.sAddress; } - public void setAddress(String address) { + void setAddress(String address) { this.sAddress = address; } } diff --git a/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java b/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java index f819e05be6..6dc7295798 100644 --- a/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java +++ b/wicket/src/main/java/com/baeldung/wicket/examples/helloworld/HelloWorld.java @@ -4,9 +4,6 @@ import org.apache.wicket.markup.html.WebPage; import org.apache.wicket.markup.html.basic.Label; public class HelloWorld extends WebPage { - - private static final long serialVersionUID = 1L; - public HelloWorld() { add(new Label("hello", "Hello World!")); } From 9da1680d0f618f1f788d0d8e5fb5006d7b843fab Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 10 Oct 2016 07:09:47 +0200 Subject: [PATCH 087/309] Refactor readFromInputStream --- .../com/baeldung/file/FileOperationsTest.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 3752fc5b7f..1e4f23745c 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -107,17 +107,14 @@ public class FileOperationsTest { } private String readFromInputStream(InputStream inputStream) throws IOException { - InputStreamReader inputStreamReader = new InputStreamReader(inputStream); - BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder resultStringBuilder = new StringBuilder(); - String line; - while ((line = bufferedReader.readLine()) != null) { - resultStringBuilder.append(line); - resultStringBuilder.append("\n"); + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = bufferedReader.readLine()) != null) { + resultStringBuilder.append(line); + resultStringBuilder.append("\n"); + } } - bufferedReader.close(); - inputStreamReader.close(); - inputStream.close(); return resultStringBuilder.toString(); } } \ No newline at end of file From fa1fc3cbe7b5509a7147ea8d1c210d6eb8c3c187 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 10 Oct 2016 07:11:06 +0200 Subject: [PATCH 088/309] Refactor readFromInputStream --- .../src/test/java/com/baeldung/file/FileOperationsTest.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 1e4f23745c..30f6fc713f 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -111,8 +111,7 @@ public class FileOperationsTest { try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { String line; while ((line = bufferedReader.readLine()) != null) { - resultStringBuilder.append(line); - resultStringBuilder.append("\n"); + resultStringBuilder.append(line).append("\n"); } } return resultStringBuilder.toString(); From 94fd47d9bb96fe7cb69f5db3b3222a1df049b397 Mon Sep 17 00:00:00 2001 From: Egima profile Date: Mon, 10 Oct 2016 11:14:19 +0300 Subject: [PATCH 089/309] Added test suite, removed bad names (#732) * made changes to java reflection * removed redundant method makeSound in Animal abstract class * added project for play-framework article * added project for regex * changed regex project from own model to core-java * added project for routing in play * made changes to regex project * refactored code for REST API with Play project * refactored student store indexing to zero base * added unit tests, removed bad names --- .../student-api/test/ApplicationTest.java | 203 ++++++++++++++---- .../student-api/test/IntegrationTest.java | 25 --- 2 files changed, 165 insertions(+), 63 deletions(-) delete mode 100644 play-framework/student-api/test/IntegrationTest.java diff --git a/play-framework/student-api/test/ApplicationTest.java b/play-framework/student-api/test/ApplicationTest.java index 3d7c4875aa..1133978e9a 100644 --- a/play-framework/student-api/test/ApplicationTest.java +++ b/play-framework/student-api/test/ApplicationTest.java @@ -1,45 +1,172 @@ -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import com.fasterxml.jackson.databind.JsonNode; -import org.junit.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; -import play.mvc.*; +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Arrays; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Test; +import model.Student; import play.test.*; -import play.data.DynamicForm; -import play.data.validation.ValidationError; -import play.data.validation.Constraints.RequiredValidator; -import play.i18n.Lang; -import play.libs.F; -import play.libs.F.*; -import play.twirl.api.Content; - import static play.test.Helpers.*; -import static org.junit.Assert.*; - - -/** - * - * Simple (JUnit) tests that can call all parts of a play app. - * If you are interested in mocking a whole application, see the wiki for more details. - * - */ -public class ApplicationTest { - - @Test - public void simpleCheck() { - int a = 1 + 1; - assertEquals(2, a); - } - - @Test - public void renderTemplate() { - Content html = views.html.index.render("Your new application is ready."); - assertEquals("text/html", html.contentType()); - assertTrue(html.body().contains("Your new application is ready.")); - } +public class ApplicationTest{ + private static final String BASE_URL = "http://localhost:9000"; + @Test +public void testInServer() throws Exception { + TestServer server = testServer(3333); + running(server, () -> { + try { + WSClient ws = play.libs.ws.WS.newClient(3333); + CompletionStage completionStage = ws.url("/").get(); + WSResponse response = completionStage.toCompletableFuture().get(); + ws.close(); + assertEquals(OK, response.getStatus()); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + }); +} + @Test + public void whenCreatesRecord_thenCorrect() { + Student student = new Student("jody", "west", 50); + JSONObject obj = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))); + assertTrue(obj.getBoolean("isSuccessfull")); + JSONObject body = obj.getJSONObject("body"); + assertEquals(student.getAge(), body.getInt("age")); + assertEquals(student.getFirstName(), body.getString("firstName")); + assertEquals(student.getLastName(), body.getString("lastName")); + } + + @Test + public void whenDeletesCreatedRecord_thenCorrect() { + Student student = new Student("Usain", "Bolt", 25); + JSONObject ob1 = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))).getJSONObject("body"); + int id = ob1.getInt("id"); + JSONObject obj1 = new JSONObject(makeRequest(BASE_URL + "/" + id, "POST", new JSONObject())); + assertTrue(obj1.getBoolean("isSuccessfull")); + makeRequest(BASE_URL + "/" + id, "DELETE", null); + JSONObject obj2 = new JSONObject(makeRequest(BASE_URL + "/" + id, "POST", new JSONObject())); + assertFalse(obj2.getBoolean("isSuccessfull")); + } + + @Test + public void whenUpdatesCreatedRecord_thenCorrect() { + Student student = new Student("john", "doe", 50); + JSONObject body1 = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))).getJSONObject("body"); + assertEquals(student.getAge(), body1.getInt("age")); + int newAge = 60; + body1.put("age", newAge); + JSONObject body2 = new JSONObject(makeRequest(BASE_URL, "PUT", body1)).getJSONObject("body"); + assertFalse(student.getAge() == body2.getInt("age")); + assertTrue(newAge == body2.getInt("age")); + } + + @Test + public void whenGetsAllRecords_thenCorrect() { + Student student1 = new Student("jane", "daisy", 50); + Student student2 = new Student("john", "daniel", 60); + Student student3 = new Student("don", "mason", 55); + Student student4 = new Student("scarlet", "ohara", 90); + + makeRequest(BASE_URL, "POST", new JSONObject(student1)); + makeRequest(BASE_URL, "POST", new JSONObject(student2)); + makeRequest(BASE_URL, "POST", new JSONObject(student3)); + makeRequest(BASE_URL, "POST", new JSONObject(student4)); + + JSONObject objects = new JSONObject(makeRequest(BASE_URL, "GET", null)); + assertTrue(objects.getBoolean("isSuccessfull")); + JSONArray array = objects.getJSONArray("body"); + assertTrue(array.length() >= 4); + } + + public static String makeRequest(String myUrl, String httpMethod, JSONObject parameters) { + + URL url = null; + try { + url = new URL(myUrl); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + HttpURLConnection conn = null; + try { + + conn = (HttpURLConnection) url.openConnection(); + } catch (IOException e) { + e.printStackTrace(); + } + conn.setDoInput(true); + + conn.setReadTimeout(10000); + + conn.setRequestProperty("Content-Type", "application/json"); + DataOutputStream dos = null; + int respCode = 0; + String inputString = null; + try { + conn.setRequestMethod(httpMethod); + + if (Arrays.asList("POST", "PUT").contains(httpMethod)) { + String params = parameters.toString(); + + conn.setDoOutput(true); + + dos = new DataOutputStream(conn.getOutputStream()); + dos.writeBytes(params); + dos.flush(); + dos.close(); + } + respCode = conn.getResponseCode(); + if (respCode != 200 && respCode != 201) { + String error = inputStreamToString(conn.getErrorStream()); + return error; + } + inputString = inputStreamToString(conn.getInputStream()); + + } catch (IOException e) { + + e.printStackTrace(); + } + return inputString; + } + + public static String inputStreamToString(InputStream is) { + BufferedReader br = null; + StringBuilder sb = new StringBuilder(); + + String line; + try { + + br = new BufferedReader(new InputStreamReader(is)); + while ((line = br.readLine()) != null) { + sb.append(line); + } + + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + return sb.toString(); + + } } diff --git a/play-framework/student-api/test/IntegrationTest.java b/play-framework/student-api/test/IntegrationTest.java deleted file mode 100644 index c53c71e124..0000000000 --- a/play-framework/student-api/test/IntegrationTest.java +++ /dev/null @@ -1,25 +0,0 @@ -import org.junit.*; - -import play.mvc.*; -import play.test.*; - -import static play.test.Helpers.*; -import static org.junit.Assert.*; - -import static org.fluentlenium.core.filter.FilterConstructor.*; - -public class IntegrationTest { - - /** - * add your integration test here - * in this example we just check if the welcome page is being shown - */ - @Test - public void test() { - running(testServer(3333, fakeApplication(inMemoryDatabase())), HTMLUNIT, browser -> { - browser.goTo("http://localhost:3333"); - assertTrue(browser.pageSource().contains("Your new application is ready.")); - }); - } - -} From 24e560a1dda6c2a89a67238628c7e5cad0456dbb Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Mon, 10 Oct 2016 11:58:44 +0200 Subject: [PATCH 090/309] BAEL-39 - upgrading versions --- log4j/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/log4j/pom.xml b/log4j/pom.xml index 1081513dcf..ab384d4dd1 100644 --- a/log4j/pom.xml +++ b/log4j/pom.xml @@ -20,12 +20,12 @@ org.apache.logging.log4j log4j-api - 2.6 + 2.7 org.apache.logging.log4j log4j-core - 2.6 + 2.7 From 798b624a90caaac73819d075cfc9f7067a97bc02 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 10 Oct 2016 18:54:01 +0200 Subject: [PATCH 091/309] Refactor CurrentDateTimeTest --- .../com/baeldung/file/FileOperationsTest.java | 1 + .../baeldung/util/CurrentDateTimeTest.java | 24 ++++--------------- 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 30f6fc713f..12143c3c19 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -114,6 +114,7 @@ public class FileOperationsTest { resultStringBuilder.append(line).append("\n"); } } + return resultStringBuilder.toString(); } } \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java index 599d5a5894..da9027060e 100644 --- a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java +++ b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java @@ -1,31 +1,15 @@ package com.baeldung.util; -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; +import org.junit.Test; -import java.time.Clock; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.ZoneId; +import java.time.*; import java.time.temporal.ChronoField; -import org.junit.BeforeClass; -import org.junit.Test; -import org.mockito.Mockito; +import static org.junit.Assert.assertEquals; public class CurrentDateTimeTest { - private static Clock clock; - - @BeforeClass - public static void setup() { - final Instant currentTime = Instant.parse("2016-10-09T15:10:30.00Z"); - - clock = Mockito.mock(Clock.class); - when(clock.instant()).thenAnswer((invocation) -> currentTime); - when(clock.getZone()).thenAnswer((invocation) -> ZoneId.of("UTC")); - } + private static final Clock clock = Clock.fixed(Instant.parse("2016-10-09T15:10:30.00Z"), ZoneId.of("UTC")); @Test public void shouldReturnCurrentDate() { From f2bbe6341f5aa40eff70f987534377eb7649a1a7 Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Tue, 11 Oct 2016 00:00:28 +0700 Subject: [PATCH 092/309] Renames a sub-directory of Apache CXF --- .../{jaxrs-implementation => cxf-jaxrs-implementation}/pom.xml | 0 .../main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java | 0 .../main/java/com/baeldung/cxf/jaxrs/implementation/Course.java | 0 .../java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java | 0 .../main/java/com/baeldung/cxf/jaxrs/implementation/Student.java | 0 .../src/main/resources/course.xml | 0 .../src/main/resources/student.xml | 0 .../java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/pom.xml (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/resources/course.xml (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/main/resources/student.xml (100%) rename apache-cxf/{jaxrs-implementation => cxf-jaxrs-implementation}/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java (100%) diff --git a/apache-cxf/jaxrs-implementation/pom.xml b/apache-cxf/cxf-jaxrs-implementation/pom.xml similarity index 100% rename from apache-cxf/jaxrs-implementation/pom.xml rename to apache-cxf/cxf-jaxrs-implementation/pom.xml diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java rename to apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java rename to apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java rename to apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java diff --git a/apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java rename to apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java diff --git a/apache-cxf/jaxrs-implementation/src/main/resources/course.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/course.xml similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/resources/course.xml rename to apache-cxf/cxf-jaxrs-implementation/src/main/resources/course.xml diff --git a/apache-cxf/jaxrs-implementation/src/main/resources/student.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/student.xml similarity index 100% rename from apache-cxf/jaxrs-implementation/src/main/resources/student.xml rename to apache-cxf/cxf-jaxrs-implementation/src/main/resources/student.xml diff --git a/apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java similarity index 100% rename from apache-cxf/jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java rename to apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java From 9c5a0ff10f913b466216d9e938b31561846b81e6 Mon Sep 17 00:00:00 2001 From: Kiran Date: Tue, 11 Oct 2016 03:30:54 -0400 Subject: [PATCH 093/309] Removed unnecessary code and SOP statements (#736) --- .../java/com/baeldung/spring/jms/SampleJmsMessageSender.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index 1ef3902a31..cfbfc77a75 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -24,10 +24,6 @@ public class SampleJmsMessageSender { } public void sendMessage(final Employee employee) { - System.out.println("Jms Message Sender : " + employee); - Map map = new HashMap<>(); - map.put("name", employee.getName()); - map.put("age", employee.getAge()); this.jmsTemplate.convertAndSend(map); } } From 805c472ed6e57cfe18769e0db71f41b85534601a Mon Sep 17 00:00:00 2001 From: Kiran Date: Tue, 11 Oct 2016 03:31:10 -0400 Subject: [PATCH 094/309] Added useShutdownHook="false" (#735) Set the property useShutdownHook to false --- spring-jms/src/main/resources/EmbeddedActiveMQ.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml index 5e956144fd..1db20b8f0f 100644 --- a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml +++ b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml @@ -9,10 +9,10 @@ http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> - + - \ No newline at end of file + From ea37b3e51af32964312cb10b30bf4ddf1eba647f Mon Sep 17 00:00:00 2001 From: Egima profile Date: Tue, 11 Oct 2016 10:33:14 +0300 Subject: [PATCH 095/309] Added NIO Selector project under core-java (#738) * made changes to java reflection * removed redundant method makeSound in Animal abstract class * added project for play-framework article * added project for regex * changed regex project from own model to core-java * added project for routing in play * made changes to regex project * refactored code for REST API with Play project * refactored student store indexing to zero base * added unit tests, removed bad names * added NIO Selector project under core-java module --- .../java/nio/selector/EchoClient.java | 46 +++++++++++++++++ .../java/nio/selector/EchoServer.java | 50 +++++++++++++++++++ .../baeldung/java/nio/selector/EchoTest.java | 18 +++++++ 3 files changed, 114 insertions(+) create mode 100644 core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java create mode 100644 core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java create mode 100644 core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java diff --git a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java new file mode 100644 index 0000000000..188db21641 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java @@ -0,0 +1,46 @@ +package com.baeldung.java.nio.selector; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SocketChannel; + +public class EchoClient { + private static SocketChannel client = null; + private static ByteBuffer buffer; + private static EchoClient instance = null; + + public static EchoClient start() { + if (instance == null) + instance = new EchoClient(); + + return instance; + } + + private EchoClient() { + try { + client = SocketChannel.open(new InetSocketAddress("localhost", 5454)); + buffer = ByteBuffer.allocate(256); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public String sendMessage(String msg) { + buffer = ByteBuffer.wrap(msg.getBytes()); + String response = null; + try { + client.write(buffer); + buffer.clear(); + client.read(buffer); + response = new String(buffer.array()).trim(); + System.out.println("response=" + response); + buffer.clear(); + } catch (IOException e) { + e.printStackTrace(); + } + return response; + + } + +} diff --git a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java new file mode 100644 index 0000000000..aedcbb319b --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java @@ -0,0 +1,50 @@ +package com.baeldung.java.nio.selector; + +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.channels.Selector; +import java.nio.channels.SelectionKey; +import java.nio.ByteBuffer; +import java.io.IOException; +import java.util.Set; +import java.util.Iterator; +import java.net.InetSocketAddress; + +public class EchoServer { + + public static void main(String[] args) + + throws IOException { + Selector selector = Selector.open(); + ServerSocketChannel serverSocket = ServerSocketChannel.open(); + serverSocket.bind(new InetSocketAddress("localhost", 5454)); + serverSocket.configureBlocking(false); + serverSocket.register(selector, SelectionKey.OP_ACCEPT); + ByteBuffer buffer = ByteBuffer.allocate(256); + + while (true) { + selector.select(); + Set selectedKeys = selector.selectedKeys(); + Iterator iter = selectedKeys.iterator(); + while (iter.hasNext()) { + + SelectionKey key = iter.next(); + + if (key.isAcceptable()) { + SocketChannel client = serverSocket.accept(); + client.configureBlocking(false); + client.register(selector, SelectionKey.OP_READ); + } + + if (key.isReadable()) { + SocketChannel client = (SocketChannel) key.channel(); + client.read(buffer); + buffer.flip(); + client.write(buffer); + buffer.clear(); + } + iter.remove(); + } + } + } +} diff --git a/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java b/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java new file mode 100644 index 0000000000..63da2fe2bf --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java @@ -0,0 +1,18 @@ +package com.baeldung.java.nio.selector; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class EchoTest { + + @Test + public void givenClient_whenServerEchosMessage_thenCorrect() { + EchoClient client = EchoClient.start(); + String resp1 = client.sendMessage("hello"); + String resp2 = client.sendMessage("world"); + assertEquals("hello", resp1); + assertEquals("world", resp2); + } + +} From e7ea2e1d2b0a81c15c2d7adf3164b4490bf839f5 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 11 Oct 2016 09:54:18 +0200 Subject: [PATCH 096/309] Fix spring-jms --- .../baeldung/spring/jms/SampleJmsMessageSender.java | 4 ++++ spring-jms/src/main/resources/EmbeddedActiveMQ.xml | 13 +++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index cfbfc77a75..1ef3902a31 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -24,6 +24,10 @@ public class SampleJmsMessageSender { } public void sendMessage(final Employee employee) { + System.out.println("Jms Message Sender : " + employee); + Map map = new HashMap<>(); + map.put("name", employee.getName()); + map.put("age", employee.getAge()); this.jmsTemplate.convertAndSend(map); } } diff --git a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml index 1db20b8f0f..6b419c3270 100644 --- a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml +++ b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml @@ -1,15 +1,12 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" + xmlns:amq="http://activemq.apache.org/schema/core" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core + http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd"> - + From 453b739f6c11cf7c28102f810ac734d956a02f2f Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Tue, 11 Oct 2016 10:38:51 +0200 Subject: [PATCH 097/309] Add OkHttp example --- spring-rest/pom.xml | 23 +++- .../okhttp/DefaultContentTypeInterceptor.java | 26 +++++ .../okhttp/OkHttpFileUploadingTest.java | 81 +++++++++++++ .../org/baeldung/okhttp/OkHttpGetTest.java | 78 +++++++++++++ .../org/baeldung/okhttp/OkHttpHeaderTest.java | 48 ++++++++ .../org/baeldung/okhttp/OkHttpMiscTest.java | 107 +++++++++++++++++ .../baeldung/okhttp/OkHttpPostingTest.java | 109 ++++++++++++++++++ .../baeldung/okhttp/OkHttpRedirectTest.java | 33 ++++++ .../okhttp/ProgressRequestWrapper.java | 74 ++++++++++++ spring-rest/src/test/resources/test.txt | 1 + 10 files changed, 574 insertions(+), 6 deletions(-) create mode 100644 spring-rest/src/test/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java create mode 100644 spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java create mode 100644 spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java create mode 100644 spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java create mode 100644 spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java create mode 100644 spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java create mode 100644 spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java create mode 100644 spring-rest/src/test/java/org/baeldung/okhttp/ProgressRequestWrapper.java create mode 100644 spring-rest/src/test/resources/test.txt diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 18cb1dc72a..69ab4ed361 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -15,7 +15,7 @@ - + org.springframework.boot spring-boot-starter-thymeleaf @@ -71,7 +71,7 @@ com.fasterxml.jackson.core jackson-databind - + com.fasterxml.jackson.dataformat jackson-dataformat-xml @@ -118,6 +118,14 @@ log4j-over-slf4j + + + + com.squareup.okhttp3 + okhttp + ${com.squareup.okhttp3.version} + + @@ -153,14 +161,14 @@ rest-assured ${rest-assured.version} - + com.google.protobuf protobuf-java 2.6.1 - + com.esotericsoftware kryo @@ -198,7 +206,7 @@ maven-surefire-plugin - **/*LiveTest.java + **/*LiveTest.java @@ -285,7 +293,7 @@ - + @@ -320,6 +328,9 @@ 2.19.1 1.6.0 + + 3.4.1 + diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java b/spring-rest/src/test/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java new file mode 100644 index 0000000000..2a33a1febd --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java @@ -0,0 +1,26 @@ +package org.baeldung.okhttp; + +import java.io.IOException; + +import okhttp3.Interceptor; +import okhttp3.Request; +import okhttp3.Response; + +public class DefaultContentTypeInterceptor implements Interceptor { + + private final String contentType; + + public DefaultContentTypeInterceptor(String contentType) { + this.contentType = contentType; + } + + public Response intercept(Interceptor.Chain chain) throws IOException { + + Request originalRequest = chain.request(); + Request requestWithUserAgent = originalRequest.newBuilder() + .header("Content-Type", contentType) + .build(); + + return chain.proceed(requestWithUserAgent); + } +} diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java new file mode 100644 index 0000000000..77219b8e22 --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java @@ -0,0 +1,81 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; + +import java.io.File; +import java.io.IOException; + +import org.baeldung.okhttp.ProgressRequestWrapper; +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class OkHttpFileUploadingTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + + @Test + public void whenUploadFile_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.txt", + RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(requestBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenGetUploadFileProgress_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("file", "file.txt", + RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) + .build(); + + + ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() { + + public void onRequestProgress(long bytesWritten, long contentLength) { + + float percentage = 100f * bytesWritten / contentLength; + assertFalse(Float.compare(percentage, 100) > 0); + } + }; + + ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/upload") + .post(countingBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + + } +} diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java new file mode 100644 index 0000000000..de954e3dd7 --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java @@ -0,0 +1,78 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.HttpUrl; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpGetTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + + @Test + public void whenGetRequest_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(BASE_URL + "/date") + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenGetRequestWithQueryParameter_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + HttpUrl.Builder urlBuilder = HttpUrl.parse(BASE_URL + "/ex/bars").newBuilder(); + urlBuilder.addQueryParameter("id", "1"); + + String url = urlBuilder.build().toString(); + + Request request = new Request.Builder() + .url(url) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenAsynchronousGetRequest_thenCorrect() { + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(BASE_URL + "/date") + .build(); + + Call call = client.newCall(request); + + call.enqueue(new Callback() { + + public void onResponse(Call call, Response response) throws IOException { + assertThat(response.code(), equalTo(200)); + } + + public void onFailure(Call call, IOException e) { + + } + }); + } +} diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java new file mode 100644 index 0000000000..958eeb51ce --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java @@ -0,0 +1,48 @@ +package org.baeldung.okhttp; + +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpHeaderTest { + + private static final String SAMPLE_URL = "http://www.github.com"; + + @Test + public void whenSetHeader_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(SAMPLE_URL) + .addHeader("Content-Type", "application/json") + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + response.close(); + } + + @Test + public void whenSetDefaultHeader_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient.Builder() + .addInterceptor(new DefaultContentTypeInterceptor("application/json")) + .build(); + + Request request = new Request.Builder() + .url(SAMPLE_URL) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + response.close(); + } + + +} diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java new file mode 100644 index 0000000000..fe15a76200 --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java @@ -0,0 +1,107 @@ +package org.baeldung.okhttp; + +import java.io.File; +import java.io.IOException; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import okhttp3.Cache; +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpMiscTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + private static Logger logger = LoggerFactory.getLogger(OkHttpMiscTest.class); + + @Test + public void whenSetRequestTimeout_thenFail() throws IOException { + + OkHttpClient client = new OkHttpClient.Builder() + .readTimeout(1, TimeUnit.SECONDS) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay. + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + response.close(); + } + + @Test + public void whenCancelRequest_thenCorrect() throws IOException { + + ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay. + .build(); + + final int seconds = 1; + + final long startNanos = System.nanoTime(); + final Call call = client.newCall(request); + + // Schedule a job to cancel the call in 1 second. + executor.schedule(new Runnable() { + public void run() { + + logger.debug("Canceling call: " + (System.nanoTime() - startNanos) / 1e9f); + call.cancel(); + logger.debug("Canceled call: " + (System.nanoTime() - startNanos) / 1e9f); + } + }, seconds, TimeUnit.SECONDS); + + try { + + logger.debug("Executing call: " + (System.nanoTime() - startNanos) / 1e9f); + Response response = call.execute(); + logger.debug("Call was expected to fail, but completed: " + (System.nanoTime() - startNanos) / 1e9f, response); + + } catch (IOException e) { + + logger.debug("Call failed as expected: " + (System.nanoTime() - startNanos) / 1e9f, e); + } + } + + @Test + public void whenSetResponseCache_thenCorrect() throws IOException { + + int cacheSize = 10 * 1024 * 1024; // 10 MiB + File cacheDirectory = new File("src/test/resources/cache"); + Cache cache = new Cache(cacheDirectory, cacheSize); + + OkHttpClient client = new OkHttpClient.Builder() + .cache(cache) + .build(); + + Request request = new Request.Builder() + .url("http://publicobject.com/helloworld.txt") + .build(); + + Response response1 = client.newCall(request).execute(); + logResponse(response1); + + Response response2 = client.newCall(request).execute(); + logResponse(response2); + } + + private void logResponse(Response response) throws IOException { + + logger.debug("Response response: " + response); + logger.debug("Response cache response: " + response.cacheResponse()); + logger.debug("Response network response: " + response.networkResponse()); + logger.debug("Response responseBody: " + response.body().string()); + } +} diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java new file mode 100644 index 0000000000..41a024d2ee --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java @@ -0,0 +1,109 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +import java.io.File; +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.Credentials; +import okhttp3.FormBody; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; + +public class OkHttpPostingTest { + + private static final String BASE_URL = "http://localhost:8080/spring-rest"; + private static final String URL_SECURED_BY_BASIC_AUTHENTICATION = "http://browserspy.dk/password-ok.php"; + + @Test + public void whenSendPostRequest_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody formBody = new FormBody.Builder() + .add("username", "test") + .add("password", "test") + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users") + .post(formBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenSendPostRequestWithAuthorization_thenCorrect() throws IOException { + + String postBody = "test post"; + + OkHttpClient client = new OkHttpClient(); + + Request request = new Request.Builder() + .url(URL_SECURED_BY_BASIC_AUTHENTICATION) + .addHeader("Authorization", Credentials.basic("test", "test")) + .post(RequestBody.create(MediaType.parse("text/x-markdown; charset=utf-8"), postBody)) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenPostJson_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + String json = "{\"id\":1,\"name\":\"John\"}"; + + RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/detail") + .post(body) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } + + @Test + public void whenSendMultipartRequest_thenCorrect() throws IOException { + + OkHttpClient client = new OkHttpClient(); + + RequestBody requestBody = new MultipartBody.Builder() + .setType(MultipartBody.FORM) + .addFormDataPart("username", "test") + .addFormDataPart("password", "test") + .addFormDataPart("file", "file.txt", + RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) + .build(); + + Request request = new Request.Builder() + .url(BASE_URL + "/users/multipart") + .post(requestBody) + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(200)); + } +} diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java new file mode 100644 index 0000000000..c709253478 --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java @@ -0,0 +1,33 @@ +package org.baeldung.okhttp; + +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertThat; + +import java.io.IOException; + +import org.junit.Test; + +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +public class OkHttpRedirectTest { + + @Test + public void whenSetFollowRedirects_thenNotRedirected() throws IOException { + + OkHttpClient client = new OkHttpClient().newBuilder() + .followRedirects(false) + .build(); + + Request request = new Request.Builder() + .url("http://t.co/I5YYd9tddw") + .build(); + + Call call = client.newCall(request); + Response response = call.execute(); + + assertThat(response.code(), equalTo(301)); + } +} diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/ProgressRequestWrapper.java b/spring-rest/src/test/java/org/baeldung/okhttp/ProgressRequestWrapper.java new file mode 100644 index 0000000000..255d10b98a --- /dev/null +++ b/spring-rest/src/test/java/org/baeldung/okhttp/ProgressRequestWrapper.java @@ -0,0 +1,74 @@ +package org.baeldung.okhttp; + +import okhttp3.RequestBody; +import okhttp3.MediaType; + +import java.io.IOException; + +import okio.Buffer; +import okio.BufferedSink; +import okio.ForwardingSink; +import okio.Okio; +import okio.Sink; + +public class ProgressRequestWrapper extends RequestBody { + + protected RequestBody delegate; + protected ProgressListener listener; + + protected CountingSink countingSink; + + public ProgressRequestWrapper(RequestBody delegate, ProgressListener listener) { + this.delegate = delegate; + this.listener = listener; + } + + @Override + public MediaType contentType() { + return delegate.contentType(); + } + + @Override + public long contentLength() throws IOException { + return delegate.contentLength(); + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + + BufferedSink bufferedSink; + + countingSink = new CountingSink(sink); + bufferedSink = Okio.buffer(countingSink); + + delegate.writeTo(bufferedSink); + + bufferedSink.flush(); + } + + protected final class CountingSink extends ForwardingSink { + + private long bytesWritten = 0; + + public CountingSink(Sink delegate) { + super(delegate); + } + + @Override + public void write(Buffer source, long byteCount) throws IOException { + + super.write(source, byteCount); + + bytesWritten += byteCount; + listener.onRequestProgress(bytesWritten, contentLength()); + } + + } + + public interface ProgressListener { + + void onRequestProgress(long bytesWritten, long contentLength); + + } +} + diff --git a/spring-rest/src/test/resources/test.txt b/spring-rest/src/test/resources/test.txt new file mode 100644 index 0000000000..95d09f2b10 --- /dev/null +++ b/spring-rest/src/test/resources/test.txt @@ -0,0 +1 @@ +hello world \ No newline at end of file From ebc1c54bea85af32ef238f1128a46ba6a84c85dc Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Tue, 11 Oct 2016 10:42:45 +0200 Subject: [PATCH 098/309] Add OkHttp example --- spring-rest/src/test/resources/.gitignore | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 spring-rest/src/test/resources/.gitignore diff --git a/spring-rest/src/test/resources/.gitignore b/spring-rest/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/spring-rest/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file From 5b09ae527551228177ea62fa2b8b75859b2de262 Mon Sep 17 00:00:00 2001 From: Sunil Gulabani Date: Tue, 11 Oct 2016 14:14:11 +0530 Subject: [PATCH 099/309] Added stream close snippet --- .../src/test/java/com/baeldung/file/FileOperationsTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java index 3752fc5b7f..90f5ded1cb 100644 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -102,6 +102,7 @@ public class FileOperationsTest { StringBuilder data = new StringBuilder(); Stream lines = Files.lines(path); lines.forEach(line -> data.append(line).append("\n")); + lines.close(); Assert.assertEquals(expectedData, data.toString().trim()); } From 774b2610504f7c74f6888c89f5687c94d6a94699 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Tue, 11 Oct 2016 10:44:47 +0200 Subject: [PATCH 100/309] Add OkHttp example --- spring-rest/src/test/resources/.gitignore | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spring-rest/src/test/resources/.gitignore diff --git a/spring-rest/src/test/resources/.gitignore b/spring-rest/src/test/resources/.gitignore new file mode 100644 index 0000000000..83c05e60c8 --- /dev/null +++ b/spring-rest/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 7279e62e448547684e973ac8e19dae847fd1989f Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 11 Oct 2016 13:10:56 +0200 Subject: [PATCH 101/309] add live profile --- spring-security-rest-digest-auth/pom.xml | 55 +++++++++++++++++++ .../client/ClientNoSpringLiveTest.java | 8 +-- .../client/ClientWithSpringLiveTest.java | 2 +- .../baeldung/client/RawClientLiveTest.java | 2 +- 4 files changed, 61 insertions(+), 6 deletions(-) diff --git a/spring-security-rest-digest-auth/pom.xml b/spring-security-rest-digest-auth/pom.xml index bfb4a7223a..1eddbc17f8 100644 --- a/spring-security-rest-digest-auth/pom.xml +++ b/spring-security-rest-digest-auth/pom.xml @@ -278,6 +278,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 + + + + + + + + + + + 4.2.5.RELEASE diff --git a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientNoSpringLiveTest.java b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientNoSpringLiveTest.java index 245d5d0a41..cbf6a12ff7 100644 --- a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientNoSpringLiveTest.java +++ b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientNoSpringLiveTest.java @@ -22,16 +22,16 @@ public class ClientNoSpringLiveTest { @Test public final void givenUsingCustomHttpRequestFactory_whenSecuredRestApiIsConsumed_then200OK() { - final HttpHost host = new HttpHost("localhost", 8080, "http"); + final HttpHost host = new HttpHost("localhost", 8082, "http"); final CredentialsProvider credentialsProvider = provider(); final CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).useSystemProperties().build(); final HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactoryDigestAuth(host, client); final RestTemplate restTemplate = new RestTemplate(requestFactory); - // credentialsProvider.setCredentials(new AuthScope("localhost", 8080, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); + // credentialsProvider.setCredentials(new AuthScope("localhost", 8082, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); - final String uri = "http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"; + final String uri = "http://localhost:8082/spring-security-rest-digest-auth/api/foos/1"; final ResponseEntity responseEntity = restTemplate.exchange(uri, HttpMethod.GET, null, Foo.class); System.out.println(responseEntity.getStatusCode()); @@ -46,7 +46,7 @@ public class ClientNoSpringLiveTest { // credentialsProvider.setCredentials(new AuthScope("localhost", 8080, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); - final String uri = "http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"; + final String uri = "http://localhost:8082/spring-security-rest-digest-auth/api/foos/1"; final ResponseEntity responseEntity = restTemplate.exchange(uri, HttpMethod.GET, null, Foo.class); System.out.println(responseEntity.getStatusCode()); diff --git a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientWithSpringLiveTest.java b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientWithSpringLiveTest.java index b40f9ef472..d673b2633b 100644 --- a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientWithSpringLiveTest.java +++ b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/ClientWithSpringLiveTest.java @@ -23,7 +23,7 @@ public class ClientWithSpringLiveTest { @Test public final void whenSecuredRestApiIsConsumed_then200OK() { - final String uri = "http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"; + final String uri = "http://localhost:8082/spring-security-rest-digest-auth/api/foos/1"; final ResponseEntity responseEntity = restTemplate.exchange(uri, HttpMethod.GET, null, Foo.class); System.out.println(responseEntity.getStatusCode()); diff --git a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/RawClientLiveTest.java b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/RawClientLiveTest.java index 93c3af3876..83e888e793 100644 --- a/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/RawClientLiveTest.java +++ b/spring-security-rest-digest-auth/src/test/java/org/baeldung/client/RawClientLiveTest.java @@ -29,7 +29,7 @@ public class RawClientLiveTest { final int timeout = 20; // seconds final RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(timeout).setConnectTimeout(timeout).setSocketTimeout(timeout).build(); - final HttpGet getMethod = new HttpGet("http://localhost:8080/spring-security-rest-basic-auth/api/bars/1"); + final HttpGet getMethod = new HttpGet("http://localhost:8082/spring-security-rest-basic-auth/api/bars/1"); getMethod.setConfig(requestConfig); final int hardTimeout = 5; // seconds From a063b93de01b6bc9533b23ab99947a9860cd6231 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 11 Oct 2016 13:24:45 +0200 Subject: [PATCH 102/309] add live profile --- spring-security-rest-basic-auth/pom.xml | 55 +++++++++++++++++++ .../baeldung/client/RestTemplateFactory.java | 2 +- .../org/baeldung/client/ClientLiveTest.java | 2 +- .../client/RestClientLiveManualTest.java | 2 +- 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/spring-security-rest-basic-auth/pom.xml b/spring-security-rest-basic-auth/pom.xml index 854bbb70be..d3f4de9914 100644 --- a/spring-security-rest-basic-auth/pom.xml +++ b/spring-security-rest-basic-auth/pom.xml @@ -285,6 +285,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 + + + + + + + + + + + 4.2.5.RELEASE diff --git a/spring-security-rest-basic-auth/src/main/java/org/baeldung/client/RestTemplateFactory.java b/spring-security-rest-basic-auth/src/main/java/org/baeldung/client/RestTemplateFactory.java index f369e96ca9..0cec0dc5c3 100644 --- a/spring-security-rest-basic-auth/src/main/java/org/baeldung/client/RestTemplateFactory.java +++ b/spring-security-rest-basic-auth/src/main/java/org/baeldung/client/RestTemplateFactory.java @@ -45,7 +45,7 @@ public class RestTemplateFactory implements FactoryBean, Initializ final RequestConfig config = RequestConfig.custom().setConnectTimeout(timeout * 1000).setConnectionRequestTimeout(timeout * 1000).setSocketTimeout(timeout * 1000).build(); final BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - credentialsProvider.setCredentials(new AuthScope("localhost", 8080, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); + credentialsProvider.setCredentials(new AuthScope("localhost", 8082, AuthScope.ANY_REALM), new UsernamePasswordCredentials("user1", "user1Pass")); final CloseableHttpClient client = HttpClientBuilder.create().setDefaultRequestConfig(config).setDefaultCredentialsProvider(credentialsProvider).build(); final ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(client); diff --git a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/ClientLiveTest.java b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/ClientLiveTest.java index 817e818b58..2a668f827a 100644 --- a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/ClientLiveTest.java +++ b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/ClientLiveTest.java @@ -33,7 +33,7 @@ public class ClientLiveTest { @Test public final void whenSecuredRestApiIsConsumed_then200OK() { - final ResponseEntity responseEntity = secureRestTemplate.exchange("http://localhost:8080/spring-security-rest-basic-auth/api/foos/1", HttpMethod.GET, null, Foo.class); + final ResponseEntity responseEntity = secureRestTemplate.exchange("http://localhost:8082/spring-security-rest-basic-auth/api/foos/1", HttpMethod.GET, null, Foo.class); assertThat(responseEntity.getStatusCode().value(), is(200)); } diff --git a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java index 44c5c0cbb1..c27e306c08 100644 --- a/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java +++ b/spring-security-rest-basic-auth/src/test/java/org/baeldung/client/RestClientLiveManualTest.java @@ -30,7 +30,7 @@ import org.springframework.web.client.RestTemplate; * */ public class RestClientLiveManualTest { - final String urlOverHttps = "http://localhost:8080/spring-security-rest-basic-auth/api/bars/1"; + final String urlOverHttps = "http://localhost:8082/spring-security-rest-basic-auth/api/bars/1"; // tests From 0d22ab4a44dd1db96e46a2bfa02c47f9654de15e Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 11 Oct 2016 13:32:28 +0200 Subject: [PATCH 103/309] add live profile --- spring-security-rest/pom.xml | 58 ++++++++++++++++++- .../java/org/baeldung/web/FooLiveTest.java | 6 +- .../org/baeldung/web/SwaggerLiveTest.java | 2 +- 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/spring-security-rest/pom.xml b/spring-security-rest/pom.xml index 6d492863b4..255cf25308 100644 --- a/spring-security-rest/pom.xml +++ b/spring-security-rest/pom.xml @@ -257,7 +257,7 @@ ${maven-surefire-plugin.version} - + **/*LiveTest.java @@ -289,6 +289,62 @@ + + + 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 + + + + + + + + + + + + 4.2.5.RELEASE diff --git a/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java b/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java index dc3a576b7b..0ef50f745a 100644 --- a/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java +++ b/spring-security-rest/src/test/java/org/baeldung/web/FooLiveTest.java @@ -17,14 +17,16 @@ import com.jayway.restassured.specification.RequestSpecification; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) public class FooLiveTest { - private static final String URL_PREFIX = "http://localhost:8080/spring-security-rest"; + private static final String URL_PREFIX = "http://localhost:8082/spring-security-rest"; // private FormAuthConfig formConfig = new FormAuthConfig(URL_PREFIX + "/login", "temporary", "temporary"); private String cookie; + private RequestSpecification givenAuth() { // return RestAssured.given().auth().form("user", "userPass", formConfig); - if (cookie == null) + if (cookie == null) { cookie = RestAssured.given().contentType("application/x-www-form-urlencoded").formParam("password", "userPass").formParam("username", "user").post(URL_PREFIX + "/login").getCookie("JSESSIONID"); + } return RestAssured.given().cookie("JSESSIONID", cookie); } diff --git a/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java b/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java index 792b3e28ce..cf1516f8e1 100644 --- a/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java +++ b/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java @@ -8,7 +8,7 @@ import com.jayway.restassured.RestAssured; import com.jayway.restassured.response.Response; public class SwaggerLiveTest { - private static final String URL_PREFIX = "http://localhost:8080/spring-security-rest/api"; + private static final String URL_PREFIX = "http://localhost:8082/spring-security-rest/api"; @Test public void whenVerifySpringFoxIsWorking_thenOK() { From 9c252d8cc8d09185ca4eb62930352636dc77ce8b Mon Sep 17 00:00:00 2001 From: Anil Bhaskar Date: Tue, 11 Oct 2016 19:03:40 +0530 Subject: [PATCH 104/309] updating latest versions for webjars (#740) --- spring-boot/src/main/resources/templates/index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-boot/src/main/resources/templates/index.html b/spring-boot/src/main/resources/templates/index.html index 046d21600a..2c4387ed10 100644 --- a/spring-boot/src/main/resources/templates/index.html +++ b/spring-boot/src/main/resources/templates/index.html @@ -1,19 +1,19 @@ WebJars Demo - + - - + + - \ No newline at end of file + From 9c8ef99ed3bb532f4d88961b583107cd9d4faf3c Mon Sep 17 00:00:00 2001 From: Anil Bhaskar Date: Tue, 11 Oct 2016 19:03:49 +0530 Subject: [PATCH 105/309] updating latest versions for webjars (#741) --- spring-boot/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index 5a20ff5602..5281b9b2c0 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -88,12 +88,12 @@ org.webjars bootstrap - 3.3.4 + 3.3.7-1 org.webjars jquery - 2.1.4 + 3.1.1 From b36a7e00cc954ecf862796915a14e7ee8dd32b4f Mon Sep 17 00:00:00 2001 From: Ante Pocedulic Date: Tue, 11 Oct 2016 17:15:13 +0200 Subject: [PATCH 106/309] Ehcache code (#734) * - created packages for each logical part of application - created validator for WebsiteUser rest API - created ValidatorEventRegister class which fixes known bug for not detecting generated events - created custom Exception Handler which creates better response messages * Code formatting * formated pom.xml replaced for loops with streams fixed bug while getting all beans * removed unnecessary code changed repository type * - added test for Spring Data REST APIs - changed bad request return code - formated code * - added source code for ehcache article - added ehcache dependency to pom.xml --- spring-all/pom.xml | 496 +++++++++--------- .../java/org/baeldung/ehcache/app/App.java | 24 + .../ehcache/calculator/SquaredCalculator.java | 24 + .../baeldung/ehcache/config/CacheHelper.java | 25 + 4 files changed, 324 insertions(+), 245 deletions(-) create mode 100755 spring-all/src/main/java/org/baeldung/ehcache/app/App.java create mode 100755 spring-all/src/main/java/org/baeldung/ehcache/calculator/SquaredCalculator.java create mode 100755 spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java diff --git a/spring-all/pom.xml b/spring-all/pom.xml index c70d9d75fc..003cdacc2c 100644 --- a/spring-all/pom.xml +++ b/spring-all/pom.xml @@ -1,295 +1,301 @@ - - 4.0.0 - com.baeldung - spring-all - 0.1-SNAPSHOT + + 4.0.0 + com.baeldung + spring-all + 0.1-SNAPSHOT - spring-all - war + spring-all + war - - org.springframework.boot - spring-boot-starter-parent - 1.3.6.RELEASE - + + org.springframework.boot + spring-boot-starter-parent + 1.3.6.RELEASE + - - - com.fasterxml.jackson.core - jackson-databind - + + + com.fasterxml.jackson.core + jackson-databind + - + - - org.springframework - spring-web - - - org.springframework - spring-webmvc - - - org.springframework - spring-orm - - - org.springframework - spring-context - + + org.springframework + spring-web + + + org.springframework + spring-webmvc + + + org.springframework + spring-orm + + + org.springframework + spring-context + - + - - org.springframework - spring-aspects - + + org.springframework + spring-aspects + - + - - org.hibernate - hibernate-core - ${hibernate.version} - - - org.javassist - javassist - - - mysql - mysql-connector-java - runtime - - - org.hsqldb - hsqldb - - - + + org.hibernate + hibernate-core + ${hibernate.version} + + + org.javassist + javassist + + + mysql + mysql-connector-java + runtime + + + org.hsqldb + hsqldb + - - org.hibernate - hibernate-validator - + - + + org.hibernate + hibernate-validator + - - javax.servlet - javax.servlet-api - provided - + - - javax.servlet - jstl - runtime - + + javax.servlet + javax.servlet-api + provided + - + + javax.servlet + jstl + runtime + - - com.google.guava - guava - ${guava.version} - - - + - - org.slf4j - slf4j-api - - - ch.qos.logback - logback-classic - - - - org.slf4j - jcl-over-slf4j - - - - org.slf4j - log4j-over-slf4j - + + com.google.guava + guava + ${guava.version} + - + - - org.springframework - spring-test - test - + + org.slf4j + slf4j-api + + + ch.qos.logback + logback-classic + + + + org.slf4j + jcl-over-slf4j + + + + org.slf4j + log4j-over-slf4j + - - junit - junit - test - + - - org.assertj - assertj-core - 3.5.1 - test - + + org.springframework + spring-test + test + - - org.hamcrest - hamcrest-core - test - - - org.hamcrest - hamcrest-library - test - + + junit + junit + test + - - org.mockito - mockito-core - test - + + org.assertj + assertj-core + 3.5.1 + test + - - org.easymock - easymock - 3.4 - test - + + org.hamcrest + hamcrest-core + test + + + org.hamcrest + hamcrest-library + test + - + + org.mockito + mockito-core + test + - + + org.easymock + easymock + 3.4 + test + + + org.ehcache + ehcache + 3.1.3 + - + - - org.springframework - spring-framework-bom - ${org.springframework.version} - pom - import - + - - org.springframework - spring-core - ${org.springframework.version} - + - + + org.springframework + spring-framework-bom + ${org.springframework.version} + pom + import + - + + org.springframework + spring-core + ${org.springframework.version} + - - spring-all - - - src/main/resources - true - - + - + - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - + + spring-all + + + src/main/resources + true + + - - org.apache.maven.plugins - maven-war-plugin - - false - - + - - org.apache.maven.plugins - maven-surefire-plugin - - - - - - - - - + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - + + org.apache.maven.plugins + maven-war-plugin + + false + + - + + org.apache.maven.plugins + maven-surefire-plugin + + + + + + + + + - + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + jetty8x + embedded + + + + + + + 8082 + + + + - - - 4.3.1.RELEASE - 4.0.4.RELEASE - 3.20.0-GA - 1.2 + - - 4.3.11.Final - 5.1.38 + - - 1.7.13 - 1.1.3 + + + 4.3.1.RELEASE + 4.0.4.RELEASE + 3.20.0-GA + 1.2 - - 5.2.2.Final + + 4.3.11.Final + 5.1.38 - - 19.0 - 3.4 + + 1.7.13 + 1.1.3 - - 1.3 - 4.12 - 1.10.19 + + 5.2.2.Final - 4.4.1 - 4.5 + + 19.0 + 3.4 - 2.9.0 + + 1.3 + 4.12 + 1.10.19 - - 3.5.1 - 2.6 - 2.19.1 - 2.7 - 1.4.18 + 4.4.1 + 4.5 - + 2.9.0 + + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 + + \ No newline at end of file diff --git a/spring-all/src/main/java/org/baeldung/ehcache/app/App.java b/spring-all/src/main/java/org/baeldung/ehcache/app/App.java new file mode 100755 index 0000000000..99370186a3 --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/ehcache/app/App.java @@ -0,0 +1,24 @@ +package org.baeldung.ehcache.app; + +import org.baeldung.ehcache.calculator.SquaredCalculator; +import org.baeldung.ehcache.config.CacheHelper; + +public class App { + + public static void main(String[] args) { + + SquaredCalculator squaredCalculator = new SquaredCalculator(); + CacheHelper cacheHelper = new CacheHelper(); + + squaredCalculator.setCache(cacheHelper); + + calculate(squaredCalculator); + calculate(squaredCalculator); + } + + private static void calculate(SquaredCalculator squaredCalculator) { + for (int i = 10; i < 15; i++) { + System.out.println("Square value of " + i + " is: " + squaredCalculator.getSquareValueOfNumber(i) + "\n"); + } + } +} diff --git a/spring-all/src/main/java/org/baeldung/ehcache/calculator/SquaredCalculator.java b/spring-all/src/main/java/org/baeldung/ehcache/calculator/SquaredCalculator.java new file mode 100755 index 0000000000..25957539df --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/ehcache/calculator/SquaredCalculator.java @@ -0,0 +1,24 @@ +package org.baeldung.ehcache.calculator; + +import org.baeldung.ehcache.config.CacheHelper; + +public class SquaredCalculator { + private CacheHelper cache; + + public int getSquareValueOfNumber(int input) { + if (cache.getSquareNumberCache().containsKey(input)) { + return cache.getSquareNumberCache().get(input); + } + + System.out.println("Calculating square value of " + input + " and caching result."); + + int squaredValue = (int) Math.pow(input, 2); + cache.getSquareNumberCache().put(input, squaredValue); + + return squaredValue; + } + + public void setCache(CacheHelper cache) { + this.cache = cache; + } +} diff --git a/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java b/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java new file mode 100755 index 0000000000..387a57880b --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java @@ -0,0 +1,25 @@ +package org.baeldung.ehcache.config; + +import org.ehcache.Cache; +import org.ehcache.CacheManager; +import org.ehcache.config.builders.CacheConfigurationBuilder; +import org.ehcache.config.builders.CacheManagerBuilder; +import org.ehcache.config.builders.ResourcePoolsBuilder; + +public class CacheHelper { + + private CacheManager cacheManager; + private Cache squareNumberCache; + + public CacheHelper() { + cacheManager = CacheManagerBuilder.newCacheManagerBuilder().withCache("squaredNumber", CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, Integer.class, ResourcePoolsBuilder.heap(10))).build(); + cacheManager.init(); + + squareNumberCache = cacheManager.getCache("squaredNumber", Integer.class, Integer.class); + } + + public Cache getSquareNumberCache() { + return squareNumberCache; + } + +} From 9e5d795bd4af5e02860223f82618c7f67379fe1a Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Tue, 11 Oct 2016 17:51:49 +0200 Subject: [PATCH 107/309] BAEL-225 - Upgrading version --- core-java-8/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java-8/pom.xml b/core-java-8/pom.xml index 566eb4e43a..22e3bab595 100644 --- a/core-java-8/pom.xml +++ b/core-java-8/pom.xml @@ -15,7 +15,7 @@ commons-io commons-io - 2.4 + 2.5 From f8bbbea88cdfce9e65abe75494f9c636a1ea67df Mon Sep 17 00:00:00 2001 From: Prashant Khanal Date: Tue, 11 Oct 2016 14:39:43 -0700 Subject: [PATCH 108/309] Code cleanup --- .../org/baeldung/web/CustomUserDetailsServiceTest.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java index 19603a499c..6917cea99a 100644 --- a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java +++ b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java @@ -1,5 +1,7 @@ package org.baeldung.web; +import static org.junit.Assert.assertEquals; + import org.baeldung.config.MvcConfig; import org.baeldung.config.PersistenceConfig; import org.baeldung.config.SecurityConfig; @@ -12,13 +14,10 @@ import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.core.Authentication; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; -import static org.junit.Assert.*; - -import java.util.logging.Logger; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = { MvcConfig.class, SecurityConfig.class, PersistenceConfig.class }) From 564bb18344e1146d9d7d3b50740596262033dca5 Mon Sep 17 00:00:00 2001 From: Prashant Khanal Date: Tue, 11 Oct 2016 14:42:09 -0700 Subject: [PATCH 109/309] Indentation issue fixed --- spring-security-custom-permission/pom.xml | 41 ++++++++++++----------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/spring-security-custom-permission/pom.xml b/spring-security-custom-permission/pom.xml index d036975107..166f0b43c0 100644 --- a/spring-security-custom-permission/pom.xml +++ b/spring-security-custom-permission/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 com.baeldung @@ -31,7 +32,7 @@ spring-boot-starter-tomcat provided - + org.springframework.boot spring-boot-starter-thymeleaf @@ -41,39 +42,39 @@ org.thymeleaf.extras thymeleaf-extras-springsecurity4 - - - - org.springframework.boot - spring-boot-starter-data-jpa - - + + + + org.springframework.boot + spring-boot-starter-data-jpa + + com.h2database h2 - - - + + + junit junit test - + org.hamcrest hamcrest-core test - + org.hamcrest hamcrest-library test - + com.jayway.restassured rest-assured @@ -86,14 +87,14 @@ - - + + org.springframework spring-test test - - + + org.apache.derby derby 10.12.1.1 @@ -145,5 +146,5 @@ 1.8 2.4.0 - + From 2aa2f43c6e9da11f4d862da40a1aed8f52c74492 Mon Sep 17 00:00:00 2001 From: eugenp Date: Wed, 12 Oct 2016 07:44:40 +0300 Subject: [PATCH 110/309] maven cleanup --- assertj/pom.xml | 25 +- core-java/pom.xml | 2 +- gson-jackson-performance/README.md | 3 - gson-jackson-performance/pom.xml | 72 --- .../data/complex/ComplexDataGeneration.java | 63 --- .../data/complex/ComplexDataGson.java | 91 ---- .../data/complex/ComplexDataJackson.java | 95 ---- .../data/simple/SimpleDataGeneration.java | 35 -- .../baeldung/data/simple/SimpleDataGson.java | 91 ---- .../data/simple/SimpleDataJackson.java | 95 ---- .../com/baeldung/data/utility/Utility.java | 90 ---- .../baeldung/pojo/complex/AddressDetails.java | 37 -- .../baeldung/pojo/complex/ContactDetails.java | 25 - .../pojo/complex/CustomerAddressDetails.java | 18 - .../complex/CustomerPortfolioComplex.java | 17 - .../com/baeldung/pojo/simple/Customer.java | 36 -- .../pojo/simple/CustomerPortfolioSimple.java | 16 - .../src/main/resources/log4j.properties | 16 - gson/pom.xml | 2 +- guava18/pom.xml | 10 +- guava19/pom.xml | 14 +- handling-spring-static-resources/pom.xml | 4 +- jackson/pom.xml | 2 +- java-cassandra/pom.xml | 85 ++-- rest-assured/pom.xml | 435 ++++++++---------- rest-testing/pom.xml | 2 +- spring-mvc-java/pom.xml | 27 +- spring-mvc-xml/pom.xml | 19 +- spring-rest-angular/pom.xml | 187 ++++---- spring-security-rest-digest-auth/pom.xml | 2 +- spring-security-rest-full/pom.xml | 2 +- spring-security-rest/pom.xml | 6 +- 32 files changed, 403 insertions(+), 1221 deletions(-) delete mode 100644 gson-jackson-performance/README.md delete mode 100644 gson-jackson-performance/pom.xml delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java delete mode 100644 gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java delete mode 100644 gson-jackson-performance/src/main/resources/log4j.properties diff --git a/assertj/pom.xml b/assertj/pom.xml index 421afd40a5..df55ebba4b 100644 --- a/assertj/pom.xml +++ b/assertj/pom.xml @@ -1,7 +1,6 @@ - + 4.0.0 com.baeldung @@ -9,11 +8,18 @@ 1.0.0-SNAPSHOT + com.google.guava guava - 19.0 + ${guava.version} + + org.assertj + assertj-guava + 3.0.0 + + junit junit @@ -26,11 +32,7 @@ 3.5.1 test - - org.assertj - assertj-guava - 3.0.0 - + @@ -46,4 +48,9 @@ + + + 19.0 + + \ No newline at end of file diff --git a/core-java/pom.xml b/core-java/pom.xml index bce97d1148..a5e89d2a76 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -174,7 +174,7 @@ 5.1.38 - 2.7.2 + 2.7.8 1.7.13 diff --git a/gson-jackson-performance/README.md b/gson-jackson-performance/README.md deleted file mode 100644 index 5b08f6cdec..0000000000 --- a/gson-jackson-performance/README.md +++ /dev/null @@ -1,3 +0,0 @@ -## Performance of Gson and Jackson - -Standalone java programs to measure the performance of both JSON APIs based on file size and object graph complexity. diff --git a/gson-jackson-performance/pom.xml b/gson-jackson-performance/pom.xml deleted file mode 100644 index 1ea43bd7fa..0000000000 --- a/gson-jackson-performance/pom.xml +++ /dev/null @@ -1,72 +0,0 @@ - - 4.0.0 - - com.baeldung - gson-jackson-performance - 0.0.1-SNAPSHOT - jar - - gson-jackson-performance - http://maven.apache.org - - - UTF-8 - - - - gson-jackson-performance - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - - - - - - - - - com.google.code.gson - gson - 2.5 - - - - com.fasterxml.jackson.core - jackson-databind - 2.7.1-1 - - - - junit - junit - 3.8.1 - test - - - - log4j - log4j - 1.2.17 - - - - - - - diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java deleted file mode 100644 index b69d306edf..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGeneration.java +++ /dev/null @@ -1,63 +0,0 @@ -package com.baeldung.data.complex; - -import java.util.ArrayList; -import java.util.List; - -import com.baeldung.data.utility.Utility; -import com.baeldung.pojo.complex.AddressDetails; -import com.baeldung.pojo.complex.ContactDetails; -import com.baeldung.pojo.complex.CustomerAddressDetails; -import com.baeldung.pojo.complex.CustomerPortfolioComplex; - -/** - * - * This class is responsible for generating data for complex type object - */ - -public class ComplexDataGeneration { - - public static CustomerPortfolioComplex generateData() { - List customerAddressDetailsList = new ArrayList(); - for (int i = 0; i < 600000; i++) { - CustomerAddressDetails customerAddressDetails = new CustomerAddressDetails(); - customerAddressDetails.setAge(20); - customerAddressDetails.setFirstName(Utility.generateRandomName()); - customerAddressDetails.setLastName(Utility.generateRandomName()); - - List addressDetailsList = new ArrayList(); - customerAddressDetails.setAddressDetails(addressDetailsList); - - for (int j = 0; j < 2; j++) { - AddressDetails addressDetails = new AddressDetails(); - addressDetails.setZipcode(Utility.generateRandomZip()); - addressDetails.setAddress(Utility.generateRandomAddress()); - - List contactDetailsList = new ArrayList(); - addressDetails.setContactDetails(contactDetailsList); - - for (int k = 0; k < 2; k++) { - ContactDetails contactDetails = new ContactDetails(); - contactDetails.setLandline(Utility.generateRandomPhone()); - contactDetails.setMobile(Utility.generateRandomPhone()); - contactDetailsList.add(contactDetails); - contactDetails = null; - } - - addressDetailsList.add(addressDetails); - addressDetails = null; - contactDetailsList = null; - } - customerAddressDetailsList.add(customerAddressDetails); - customerAddressDetails = null; - - if (i % 6000 == 0) { - Runtime.getRuntime().gc(); - } - } - - CustomerPortfolioComplex customerPortfolioComplex = new CustomerPortfolioComplex(); - customerPortfolioComplex.setCustomerAddressDetailsList(customerAddressDetailsList); - customerAddressDetailsList = null; - return customerPortfolioComplex; - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java deleted file mode 100644 index b97893e8f1..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataGson.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.baeldung.data.complex; - -import java.util.Map; - -import org.apache.log4j.Logger; -import com.baeldung.data.utility.Utility; -import com.baeldung.pojo.complex.CustomerPortfolioComplex; - -import com.google.gson.Gson; - -/** - * - * This class is responsible for performing functions for Complex type - * GSON like - * Java to Json - * Json to Map - * Json to Java Object - */ - -public class ComplexDataGson { - - private static final Logger logger = Logger.getLogger(ComplexDataGson.class); - - static Gson gson = new Gson(); - - static long generateJsonAvgTime = 0L; - - static long parseJsonToMapAvgTime = 0L; - - static long parseJsonToActualObjectAvgTime = 0L; - - public static void main(String[] args) { - CustomerPortfolioComplex customerPortfolioComplex = ComplexDataGeneration.generateData(); - int j = 50; - for (int i = 0; i < j; i++) { - logger.info("-------Round " + (i + 1)); - String jsonStr = generateJson(customerPortfolioComplex); - logger.info("Size of Complex content Jackson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); - logger.info("--------------------------------------------------------------------------"); - parseJsonToMap(jsonStr); - parseJsonToActualObject(jsonStr); - jsonStr = null; - } - - generateJsonAvgTime = generateJsonAvgTime / j; - parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; - - logger.info("--------------------------------------------------------------------------"); - logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); - logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); - logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); - logger.info("--------------------------------------------------------------------------"); - } - - private static String generateJson(CustomerPortfolioComplex customerPortfolioComplex) { - Runtime.getRuntime().gc(); - long startParsTime = System.nanoTime(); - String json = gson.toJson(customerPortfolioComplex); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - generateJsonAvgTime = generateJsonAvgTime + elapsedTime; - logger.info("Json Generation Time(ms):: " + elapsedTime); - return json; - } - - private static void parseJsonToMap(String jsonStr) { - long startParsTime = System.nanoTime(); - Map parsedMap = gson.fromJson(jsonStr , Map.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; - logger.info("Generating Map from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - parsedMap = null; - Runtime.getRuntime().gc(); - } - - private static void parseJsonToActualObject(String jsonStr) { - long startParsTime = System.nanoTime(); - CustomerPortfolioComplex customerPortfolioComplex = gson.fromJson(jsonStr , CustomerPortfolioComplex.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; - logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - customerPortfolioComplex = null; - Runtime.getRuntime().gc(); - - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java deleted file mode 100644 index 07a210fb37..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/complex/ComplexDataJackson.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.baeldung.data.complex; - -import java.io.IOException; -import java.util.Map; - -import com.baeldung.data.utility.Utility; -import org.apache.log4j.Logger; -import com.baeldung.pojo.complex.CustomerPortfolioComplex; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * - * This class is responsible for performing functions for Complex type - * Jackson like - * Java to Json - * Json to Map - * Json to Java Object - */ - -public class ComplexDataJackson { - - private static final Logger logger = Logger.getLogger(ComplexDataJackson.class); - - static ObjectMapper mapper = new ObjectMapper(); - - static long generateJsonAvgTime = 0L; - - static long parseJsonToMapAvgTime = 0L; - - static long parseJsonToActualObjectAvgTime = 0L; - - public static void main(String[] args) throws IOException { - CustomerPortfolioComplex customerPortfolioComplex = ComplexDataGeneration.generateData(); - int j = 50; - for (int i = 0; i < j; i++) { - logger.info("-------Round " + (i + 1)); - String jsonStr = generateJson(customerPortfolioComplex); - logger.info("Size of Complex content Jackson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); - logger.info("--------------------------------------------------------------------------"); - parseJsonToMap(jsonStr); - parseJsonToActualObject(jsonStr); - jsonStr = null; - } - - generateJsonAvgTime = generateJsonAvgTime / j; - parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; - - logger.info("--------------------------------------------------------------------------"); - logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); - logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); - logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); - logger.info("--------------------------------------------------------------------------"); - } - - private static String generateJson(CustomerPortfolioComplex customerPortfolioComplex) - throws JsonProcessingException { - Runtime.getRuntime().gc(); - long startParsTime = System.nanoTime(); - String json = mapper.writeValueAsString(customerPortfolioComplex); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - generateJsonAvgTime = generateJsonAvgTime + elapsedTime; - logger.info("Json Generation Time(ms):: " + elapsedTime); - return json; - } - - private static void parseJsonToMap(String jsonStr) throws JsonParseException , JsonMappingException , IOException { - long startParsTime = System.nanoTime(); - Map parsedMap = mapper.readValue(jsonStr , Map.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; - logger.info("Generating Map from json Time(ms):: " + elapsedTime); - parsedMap = null; - Runtime.getRuntime().gc(); - - } - - private static void parseJsonToActualObject(String jsonStr) throws JsonParseException , JsonMappingException , - IOException { - long startParsTime = System.nanoTime(); - CustomerPortfolioComplex customerPortfolioComplex = mapper.readValue(jsonStr , CustomerPortfolioComplex.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; - logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); - customerPortfolioComplex = null; - Runtime.getRuntime().gc(); - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java deleted file mode 100644 index 1e186adc72..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGeneration.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.data.simple; - -import java.util.ArrayList; -import java.util.List; - -import com.baeldung.data.utility.Utility; -import com.baeldung.pojo.simple.Customer; -import com.baeldung.pojo.simple.CustomerPortfolioSimple; - -/** - * - * This class is responsible for generating data for simple type object - */ - -public class SimpleDataGeneration { - - public static CustomerPortfolioSimple generateData() { - List customerList = new ArrayList(); - for (int i = 0; i < 1; i++) { - Customer customer = new Customer(); - customer.setAge(20); - customer.setFirstName(Utility.generateRandomName()); - customer.setLastName(Utility.generateRandomName()); - - customerList.add(customer); - customer = null; - - } - - CustomerPortfolioSimple customerPortfolioSimple = new CustomerPortfolioSimple(); - customerPortfolioSimple.setCustomerLists(customerList); - customerList = null; - return customerPortfolioSimple; - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java deleted file mode 100644 index b190313462..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataGson.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.baeldung.data.simple; - -import java.util.Map; - -import org.apache.log4j.Logger; -import com.baeldung.data.utility.Utility; -import com.baeldung.pojo.simple.CustomerPortfolioSimple; - -import com.google.gson.Gson; - -/** - * - * This class is responsible for performing functions for Simple type - * GSON like - * Java to Json - * Json to Map - * Json to Java Object - */ - -public class SimpleDataGson { - - private static final Logger logger = Logger.getLogger(SimpleDataGson.class); - - static Gson gson = new Gson(); - - static long generateJsonAvgTime = 0L; - - static long parseJsonToMapAvgTime = 0L; - - static long parseJsonToActualObjectAvgTime = 0L; - - public static void main(String[] args) { - CustomerPortfolioSimple customerPortfolioSimple = SimpleDataGeneration.generateData(); - String jsonStr = null; - int j = 5; - for (int i = 0; i < j; i++) { - logger.info("-------Round " + (i + 1)); - jsonStr = generateJson(customerPortfolioSimple); - logger.info("Size of Simple content Gson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); - logger.info("--------------------------------------------------------------------------"); - parseJsonToMap(jsonStr); - parseJsonToActualObject(jsonStr); - jsonStr = null; - } - generateJsonAvgTime = generateJsonAvgTime / j; - parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; - - logger.info("--------------------------------------------------------------------------"); - logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); - logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); - logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); - logger.info("--------------------------------------------------------------------------"); - } - - private static String generateJson(CustomerPortfolioSimple customerPortfolioSimple) { - Runtime.getRuntime().gc(); - long startParsTime = System.nanoTime(); - String json = gson.toJson(customerPortfolioSimple); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - generateJsonAvgTime = generateJsonAvgTime + elapsedTime; - logger.info("Json Generation Time(ms):: " + elapsedTime); - return json; - } - - private static void parseJsonToMap(String jsonStr) { - long startParsTime = System.nanoTime(); - Map parsedMap = gson.fromJson(jsonStr , Map.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; - logger.info("Generating Map from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - parsedMap = null; - Runtime.getRuntime().gc(); - - } - - private static void parseJsonToActualObject(String jsonStr) { - long startParsTime = System.nanoTime(); - CustomerPortfolioSimple customerPortfolioSimple = gson.fromJson(jsonStr , CustomerPortfolioSimple.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; - logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - customerPortfolioSimple = null; - Runtime.getRuntime().gc(); - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java b/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java deleted file mode 100644 index 9330333604..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/simple/SimpleDataJackson.java +++ /dev/null @@ -1,95 +0,0 @@ -package com.baeldung.data.simple; - -import java.io.IOException; -import java.util.Map; - -import com.baeldung.data.utility.Utility; -import org.apache.log4j.Logger; -import com.baeldung.pojo.simple.CustomerPortfolioSimple; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; - -/** - * - * This class is responsible for performing functions for Simple type - * Jackson like - * Java to Json - * Json to Map - * Json to Java Object - */ - -public class SimpleDataJackson { - - private static final Logger logger = Logger.getLogger(SimpleDataJackson.class); - - static ObjectMapper mapper = new ObjectMapper(); - - static long generateJsonAvgTime = 0L; - - static long parseJsonToMapAvgTime = 0L; - - static long parseJsonToActualObjectAvgTime = 0L; - - public static void main(String[] args) throws IOException { - CustomerPortfolioSimple customerPortfolioSimple = SimpleDataGeneration.generateData(); - int j = 50; - for (int i = 0; i < j; i++) { - logger.info("-------Round " + (i + 1)); - String jsonStr = generateJson(customerPortfolioSimple); - logger.info("Size of Simple content Jackson :: " + Utility.bytesIntoMB(jsonStr.getBytes().length)); - logger.info("--------------------------------------------------------------------------"); - - parseJsonToMap(jsonStr); - parseJsonToActualObject(jsonStr); - jsonStr = null; - } - - generateJsonAvgTime = generateJsonAvgTime / j; - parseJsonToMapAvgTime = parseJsonToMapAvgTime / j; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime / j; - - logger.info("--------------------------------------------------------------------------"); - logger.info("Average Time to Generate JSON : " + generateJsonAvgTime); - logger.info("Average Time to Parse JSON To Map : " + parseJsonToMapAvgTime); - logger.info("Average Time to Parse JSON To Actual Object : " + parseJsonToActualObjectAvgTime); - logger.info("--------------------------------------------------------------------------"); - } - - private static String generateJson(CustomerPortfolioSimple customerPortfolioSimple) throws JsonProcessingException { - Runtime.getRuntime().gc(); - long startParsTime = System.nanoTime(); - String json = mapper.writeValueAsString(customerPortfolioSimple); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - generateJsonAvgTime = generateJsonAvgTime + elapsedTime; - logger.info("Json Generation Time(ms):: " + elapsedTime); - return json; - } - - private static void parseJsonToMap(String jsonStr) throws JsonParseException , JsonMappingException , IOException { - long startParsTime = System.nanoTime(); - Map parsedMap = mapper.readValue(jsonStr , Map.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToMapAvgTime = parseJsonToMapAvgTime + elapsedTime; - logger.info("Generating Map from json Time(ms):: " + elapsedTime); - logger.info("--------------------------------------------------------------------------"); - parsedMap = null; - Runtime.getRuntime().gc(); - } - - private static void parseJsonToActualObject(String jsonStr) throws JsonParseException , JsonMappingException , - IOException { - long startParsTime = System.nanoTime(); - CustomerPortfolioSimple customerPortfolioSimple = mapper.readValue(jsonStr , CustomerPortfolioSimple.class); - long endParsTime = System.nanoTime(); - long elapsedTime = endParsTime - startParsTime; - parseJsonToActualObjectAvgTime = parseJsonToActualObjectAvgTime + elapsedTime; - logger.info("Generating Actual Object from json Time(ms):: " + elapsedTime); - customerPortfolioSimple = null; - Runtime.getRuntime().gc(); - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java b/gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java deleted file mode 100644 index 8b0c402e47..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/data/utility/Utility.java +++ /dev/null @@ -1,90 +0,0 @@ -package com.baeldung.data.utility; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.util.Random; - -public class Utility { - - public static String generateRandomName() { - char[] chars = "abcdefghijklmnopqrstuvwxyz ".toCharArray(); - StringBuilder sb = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < 8; i++) { - char c = chars[random.nextInt(chars.length)]; - sb.append(c); - } - return sb.toString(); - } - - public static String generateRandomAddress() { - char[] chars = "abcdefghijklmnopqrstuvwxyz ".toCharArray(); - StringBuilder sb = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < 30; i++) { - char c = chars[random.nextInt(chars.length)]; - sb.append(c); - } - return sb.toString(); - } - - public static String generateRandomZip() { - char[] chars = "1234567890".toCharArray(); - StringBuilder sb = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < 8; i++) { - char c = chars[random.nextInt(chars.length)]; - sb.append(c); - } - return sb.toString(); - } - - public static String generateRandomPhone() { - char[] chars = "1234567890".toCharArray(); - StringBuilder sb = new StringBuilder(); - Random random = new Random(); - for (int i = 0; i < 10; i++) { - char c = chars[random.nextInt(chars.length)]; - sb.append(c); - } - return sb.toString(); - } - - public static String readFile(String fileName , Class clazz) throws IOException { - String dir = clazz.getResource("/").getFile(); - dir = dir + "/" + fileName; - - BufferedReader br = new BufferedReader(new FileReader(dir)); - try { - StringBuilder sb = new StringBuilder(); - String line = br.readLine(); - - while (line != null) { - sb.append(line); - sb.append(System.lineSeparator()); - line = br.readLine(); - } - return sb.toString(); - } finally { - br.close(); - } - } - - public static String bytesIntoMB(long bytes) { - long kilobyte = 1024; - long megabyte = kilobyte * 1024; - - if ((bytes >= 0) && (bytes < kilobyte)) { - return bytes + " B"; - - } else if ((bytes >= kilobyte) && (bytes < megabyte)) { - return (bytes / kilobyte) + " KB"; - - } else if ((bytes >= megabyte)) { - return (bytes / megabyte) + " MB"; - } - - return null; - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java deleted file mode 100644 index 79725a97bd..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/AddressDetails.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.baeldung.pojo.complex; - -import java.util.List; - -public class AddressDetails { - - private String address; - - private String zipcode; - - private List contactDetails; - - public String getZipcode() { - return zipcode; - } - - public void setZipcode(String zipcode) { - this.zipcode = zipcode; - } - - public List getContactDetails() { - return contactDetails; - } - - public void setContactDetails(List contactDetails) { - this.contactDetails = contactDetails; - } - - public String getAddress() { - return address; - } - - public void setAddress(String address) { - this.address = address; - } - -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java deleted file mode 100644 index 164fe3f470..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/ContactDetails.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.pojo.complex; - -public class ContactDetails { - - private String mobile; - - private String landline; - - public String getMobile() { - return mobile; - } - - public void setMobile(String mobile) { - this.mobile = mobile; - } - - public String getLandline() { - return landline; - } - - public void setLandline(String landline) { - this.landline = landline; - } - -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java deleted file mode 100644 index 9bc5951716..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerAddressDetails.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.pojo.complex; - -import java.util.List; - -import com.baeldung.pojo.simple.Customer; - -public class CustomerAddressDetails extends Customer { - - private List addressDetails; - - public List getAddressDetails() { - return addressDetails; - } - - public void setAddressDetails(List addressDetails) { - this.addressDetails = addressDetails; - } -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java deleted file mode 100644 index 13f9d240b8..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/complex/CustomerPortfolioComplex.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.pojo.complex; - -import java.util.List; - -public class CustomerPortfolioComplex { - - private List customerAddressDetailsList; - - public List getCustomerAddressDetailsList() { - return customerAddressDetailsList; - } - - public void setCustomerAddressDetailsList(List customerAddressDetailsList) { - this.customerAddressDetailsList = customerAddressDetailsList; - } - -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java deleted file mode 100644 index 3d5668f85a..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/Customer.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.pojo.simple; - - -public class Customer { - - private String firstName; - - private String lastName; - - private int age; - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - -} diff --git a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java b/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java deleted file mode 100644 index 7cb684813c..0000000000 --- a/gson-jackson-performance/src/main/java/com/baeldung/pojo/simple/CustomerPortfolioSimple.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.pojo.simple; - -import java.util.List; - -public class CustomerPortfolioSimple { - - private List customerLists; - - public List getCustomerLists() { - return customerLists; - } - - public void setCustomerLists(List customerLists) { - this.customerLists = customerLists; - } -} diff --git a/gson-jackson-performance/src/main/resources/log4j.properties b/gson-jackson-performance/src/main/resources/log4j.properties deleted file mode 100644 index 371cbc9048..0000000000 --- a/gson-jackson-performance/src/main/resources/log4j.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Root logger option -log4j.rootLogger=DEBUG, file - -# Redirect log messages to console -# log4j.appender.stdout=org.apache.log4j.ConsoleAppender -# log4j.appender.stdout.Target=System.out -# log4j.appender.stdout.layout=org.apache.log4j.PatternLayout -# log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n - -# Redirect log messages to a log file, support file rolling. -log4j.appender.file=org.apache.log4j.RollingFileAppender -log4j.appender.file.File=log4j-application.log -log4j.appender.file.MaxFileSize=5MB -log4j.appender.file.MaxBackupIndex=10 -log4j.appender.file.layout=org.apache.log4j.PatternLayout -log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file diff --git a/gson/pom.xml b/gson/pom.xml index 4f331f6fd9..d864c289c2 100644 --- a/gson/pom.xml +++ b/gson/pom.xml @@ -19,7 +19,7 @@ com.google.guava guava - 18.0 + ${guava.version} commons-io diff --git a/guava18/pom.xml b/guava18/pom.xml index 6002b37d74..e26eb7313e 100644 --- a/guava18/pom.xml +++ b/guava18/pom.xml @@ -1,7 +1,6 @@ - + 4.0.0 com.baeldung @@ -14,12 +13,15 @@ guava 18.0 + junit junit - 4.12 + 4.13 + test + diff --git a/guava19/pom.xml b/guava19/pom.xml index 13f3b471f1..61fbf38575 100644 --- a/guava19/pom.xml +++ b/guava19/pom.xml @@ -1,5 +1,6 @@ - + 4.0.0 com.baeldung @@ -10,20 +11,23 @@ com.google.guava guava - 19.0 + ${guava.version} + junit junit 4.12 + test org.hamcrest hamcrest-all 1.3 + test - + @@ -42,4 +46,8 @@ + + 19.0 + + \ No newline at end of file diff --git a/handling-spring-static-resources/pom.xml b/handling-spring-static-resources/pom.xml index aca069e300..6dd0c95026 100644 --- a/handling-spring-static-resources/pom.xml +++ b/handling-spring-static-resources/pom.xml @@ -115,6 +115,7 @@ jackson-databind ${jackson.version} + org.hibernate hibernate-validator @@ -221,8 +222,7 @@ 1.9.2.RELEASE - - 2.7.2 + 2.7.8 1.7.13 diff --git a/jackson/pom.xml b/jackson/pom.xml index 17b0ac507e..e795ad11a2 100644 --- a/jackson/pom.xml +++ b/jackson/pom.xml @@ -174,7 +174,7 @@ 5.1.38 - 2.7.2 + 2.7.8 1.7.13 diff --git a/java-cassandra/pom.xml b/java-cassandra/pom.xml index 265a230eb4..a91c3b9b62 100644 --- a/java-cassandra/pom.xml +++ b/java-cassandra/pom.xml @@ -1,56 +1,36 @@ - + 4.0.0 com.baeldung cassandra-java-client 1.0.0-SNAPSHOT - - cassandra-java-client - - - UTF-8 - - - 1.7.21 - 1.1.7 - - - 1.3 - 4.12 - 1.10.19 - 6.8 - 3.5.1 - - - 3.5.1 - + + cassandra-java-client + + - 3.1.0 - - - - - + com.datastax.cassandra cassandra-driver-core ${cassandra-driver-core.version} true - + org.cassandraunit cassandra-unit 3.0.0.1 - + com.google.guava guava - 19.0 + ${guava.version} - - + + org.slf4j @@ -74,16 +54,16 @@ log4j-over-slf4j ${org.slf4j.version} - + - junit - junit - ${junit.version} - test + junit + junit + ${junit.version} + test - - - + + + java-cassandra @@ -97,6 +77,29 @@ - + + + UTF-8 + + 19.0 + + + 1.7.21 + 1.1.7 + + + 1.3 + 4.12 + 1.10.19 + 6.8 + 3.5.1 + + + 3.5.1 + + + 3.1.0 + + diff --git a/rest-assured/pom.xml b/rest-assured/pom.xml index 47241b18bd..e2a2af9cd9 100644 --- a/rest-assured/pom.xml +++ b/rest-assured/pom.xml @@ -1,257 +1,226 @@ - 4.0.0 - com.baeldung - rest-assured - 1.0 - rest-assured - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - 8 - 8 - - - - - - - - javax.servlet - javax.servlet-api - 3.1-b06 - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 + com.baeldung + rest-assured + 1.0 + rest-assured - - - javax.servlet - servlet-api - 2.5 - + + + javax.servlet + javax.servlet-api + 3.1-b06 + + + javax.servlet + servlet-api + 2.5 + + + org.eclipse.jetty + jetty-security + 9.2.0.M1 + + + org.eclipse.jetty + jetty-servlet + 9.2.0.M1 + + + org.eclipse.jetty + jetty-servlets + 9.2.0.M1 + + + org.eclipse.jetty + jetty-io + 9.2.0.M1 + + + org.eclipse.jetty + jetty-http + 9.2.0.M1 + + + org.eclipse.jetty + jetty-server + 9.2.0.M1 + + + org.eclipse.jetty + jetty-util + 9.2.0.M1 + - - - org.eclipse.jetty - jetty-security - 9.2.0.M1 - + + org.slf4j + slf4j-api + 1.7.21 + - - - org.eclipse.jetty - jetty-servlet - 9.2.0.M1 - + + log4j + log4j + 1.2.17 + + + org.slf4j + slf4j-log4j12 + 1.7.21 + - - - org.eclipse.jetty - jetty-servlets - 9.2.0.M1 - + + commons-logging + commons-logging + 1.2 + - - - org.eclipse.jetty - jetty-io - 9.2.0.M1 - + + org.apache.httpcomponents + httpcore + 4.4.5 + - - - org.eclipse.jetty - jetty-http - 9.2.0.M1 - + + org.apache.commons + commons-lang3 + 3.4 + + + com.github.fge + uri-template + 0.9 + + + com.googlecode.libphonenumber + libphonenumber + 7.4.5 + - - - org.eclipse.jetty - jetty-server - 9.2.0.M1 - + + javax.mail + mail + 1.4.7 + - - - org.eclipse.jetty - jetty-util - 9.2.0.M1 - + + joda-time + joda-time + 2.9.4 + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + - - - org.slf4j - slf4j-api - 1.7.21 - + + com.github.fge + msg-simple + 1.1 + - - - log4j - log4j - 1.2.17 - - - - org.slf4j - slf4j-log4j12 - 1.7.21 - + + com.github.fge + jackson-coreutils + 1.8 + - - - - commons-logging - commons-logging - 1.2 - + + com.google.guava + guava + ${guava.version} + + + com.github.fge + btf + 1.2 + - - org.apache.httpcomponents - httpcore - 4.4.5 - + + org.apache.httpcomponents + httpclient + 4.5.2 + - - - org.apache.commons - commons-lang3 - 3.4 - + + org.codehaus.groovy + groovy-all + 2.4.7 + - - - - com.github.fge - uri-template - 0.9 - + + com.github.tomakehurst + wiremock + 2.1.7 + + + io.rest-assured + rest-assured + 3.0.0 + test + + + io.rest-assured + json-schema-validator + 3.0.0 + + + com.github.fge + json-schema-validator + 2.2.6 + + + com.github.fge + json-schema-core + 1.2.5 + + + junit + junit + 4.3 + test + - - - com.googlecode.libphonenumber - libphonenumber - 7.4.5 - + + org.hamcrest + hamcrest-all + 1.3 + + + commons-collections + commons-collections + 3.2.2 + - - javax.mail - mail - 1.4.7 - + - - joda-time - joda-time - 2.9.4 - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 8 + 8 + + + + - - com.fasterxml.jackson.core - jackson-annotations - 2.8.0 - + + 2.8.3 + 19.0 + - - com.fasterxml.jackson.core - jackson-databind - 2.8.0 - - - - com.fasterxml.jackson.core - jackson-core - 2.8.0 - - - - com.github.fge - msg-simple - 1.1 - - - - com.github.fge - jackson-coreutils - 1.8 - - - - - - com.google.guava - guava - 18.0 - - - com.github.fge - btf - 1.2 - - - - org.apache.httpcomponents - httpclient - 4.5.2 - - - - org.codehaus.groovy - groovy-all - 2.4.7 - - - - com.github.tomakehurst - wiremock - 2.1.7 - - - io.rest-assured - rest-assured - 3.0.0 - test - - - io.rest-assured - json-schema-validator - 3.0.0 - - - com.github.fge - json-schema-validator - 2.2.6 - - - com.github.fge - json-schema-core - 1.2.5 - - - junit - junit - 4.3 - test - - - - org.hamcrest - hamcrest-all - 1.3 - - - - commons-collections - commons-collections - 3.2.2 - - - diff --git a/rest-testing/pom.xml b/rest-testing/pom.xml index 652f2ab601..819e8de8a5 100644 --- a/rest-testing/pom.xml +++ b/rest-testing/pom.xml @@ -156,7 +156,7 @@ - 2.7.2 + 2.7.8 1.7.13 diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 7361d16b33..54d6eee01a 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -6,6 +6,7 @@ 0.1-SNAPSHOT spring-mvc-java war + @@ -34,16 +35,12 @@ spring-messaging ${org.springframework.version} + - - com.fasterxml.jackson.core - jackson-core - 2.7.3 - com.fasterxml.jackson.core jackson-databind - 2.7.3 + ${jackson.version} @@ -59,6 +56,7 @@ 1.2 runtime + org.springframework @@ -95,18 +93,6 @@ ${thymeleaf.version} - - - com.fasterxml.jackson.core - jackson-core - 2.1.2 - - - com.fasterxml.jackson.core - jackson-databind - 2.1.2 - - org.slf4j @@ -244,18 +230,23 @@ 4.2.5.RELEASE 4.0.4.RELEASE 2.1.4.RELEASE + 2.7.8 + 4.3.11.Final 5.1.38 + 1.7.21 1.1.5 5.2.2.Final + 19.0 3.4 + 1.3 4.12 diff --git a/spring-mvc-xml/pom.xml b/spring-mvc-xml/pom.xml index 9c65ccdadd..849699cfae 100644 --- a/spring-mvc-xml/pom.xml +++ b/spring-mvc-xml/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 com.baeldung 0.1-SNAPSHOT @@ -99,16 +100,11 @@ - - com.fasterxml.jackson.core - jackson-core - 2.7.2 - - - com.fasterxml.jackson.core - jackson-databind - 2.7.2 - + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + @@ -165,6 +161,7 @@ 4.2.5.RELEASE + 2.7.8 1.7.13 diff --git a/spring-rest-angular/pom.xml b/spring-rest-angular/pom.xml index 331c9a644c..981ee9dabc 100644 --- a/spring-rest-angular/pom.xml +++ b/spring-rest-angular/pom.xml @@ -1,95 +1,102 @@ - - 4.0.0 - spring-rest-angular - spring-rest-angular - com.baeldung - 1.0 - war - - org.springframework.boot - spring-boot-starter-parent - 1.3.3.RELEASE - - - - org.springframework.boot - spring-boot-starter-tomcat - provided - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.data - spring-data-commons - - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.hsqldb - hsqldb - runtime - - - org.springframework - spring-test - test - - - org.apache.commons - commons-lang3 - 3.3 - - - com.google.guava - guava - 19.0 - - - junit - junit - test - - - io.rest-assured - rest-assured - 3.0.0 - test - - - io.rest-assured - spring-mock-mvc - 3.0.0 - test - - - - angular-spring-rest-sample - + + 4.0.0 + spring-rest-angular + spring-rest-angular + com.baeldung + 1.0 + war - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - + + org.springframework.boot + spring-boot-starter-parent + 1.3.3.RELEASE + - - org.apache.maven.plugins - maven-war-plugin - - false - - + + + org.springframework.boot + spring-boot-starter-tomcat + provided + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.data + spring-data-commons + + + org.springframework.boot + spring-boot-starter-data-jpa + + + org.hsqldb + hsqldb + runtime + + + org.springframework + spring-test + test + + + org.apache.commons + commons-lang3 + 3.3 + + + com.google.guava + guava + ${guava.version} + + + junit + junit + test + + + io.rest-assured + rest-assured + 3.0.0 + test + + + io.rest-assured + spring-mock-mvc + 3.0.0 + test + + + + + angular-spring-rest-sample + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-war-plugin + + false + + + + + + + + 19.0 + - - diff --git a/spring-security-rest-digest-auth/pom.xml b/spring-security-rest-digest-auth/pom.xml index 1eddbc17f8..1880e12a74 100644 --- a/spring-security-rest-digest-auth/pom.xml +++ b/spring-security-rest-digest-auth/pom.xml @@ -351,7 +351,7 @@ 1.1.3 - 2.7.2 + 2.7.8 5.2.2.Final diff --git a/spring-security-rest-full/pom.xml b/spring-security-rest-full/pom.xml index 77b11f1cb1..dff9f7ed4f 100644 --- a/spring-security-rest-full/pom.xml +++ b/spring-security-rest-full/pom.xml @@ -439,7 +439,7 @@ 3.6.2 - 2.7.2 + 2.7.8 1.4.01 diff --git a/spring-security-rest/pom.xml b/spring-security-rest/pom.xml index 255cf25308..60f3ed41d1 100644 --- a/spring-security-rest/pom.xml +++ b/spring-security-rest/pom.xml @@ -109,7 +109,6 @@ - com.fasterxml.jackson.core jackson-databind @@ -117,7 +116,6 @@ - com.google.guava guava @@ -128,8 +126,8 @@ commons-lang3 ${commons-lang3.version} + - org.slf4j slf4j-api @@ -364,7 +362,7 @@ 3.0.1 1.1.0.Final 1.2 - 2.2.2 + 2.7.8 19.0 From eb7650eeadfa45961d9699f8620d78ab9c3e6ce0 Mon Sep 17 00:00:00 2001 From: eugenp Date: Wed, 12 Oct 2016 08:00:02 +0300 Subject: [PATCH 111/309] cleanup and testing work --- guava18/pom.xml | 2 +- pom.xml | 1 - spring-mvc-java/pom.xml | 22 +++-- .../main/java/com/baeldung/model/Message.java | 16 ++-- .../com/baeldung/model/OutputMessage.java | 34 +++---- .../spring/web/config/WebSocketConfig.java | 18 ++-- .../web/controller/CompanyController.java | 88 +++++++++---------- .../web/controller/EmployeeController.java | 6 +- .../web/controller/MessageController.java | 18 ++-- .../advice/JsonpControllerAdvice.java | 6 +- ...st.java => AopLoggingIntegrationTest.java} | 2 +- ...ava => AopPerformanceIntegrationTest.java} | 2 +- ...java => AopPublishingIntegrationTest.java} | 2 +- ...pXmlConfigPerformanceIntegrationTest.java} | 2 +- .../htmlunit/HtmlUnitAndJUnitTest.java | 22 ----- .../HtmlUnitAndSpringIntegrationTest.java | 70 +++++++++++++++ .../htmlunit/HtmlUnitAndSpringTest.java | 79 ----------------- .../com/baeldung/htmlunit/HtmlUnitTest.java | 21 +++++ .../htmlunit/HtmlUnitWebScraping.java | 36 ++++---- .../com/baeldung/htmlunit/TestConfig.java | 42 ++++----- ...t.java => EmployeeMvcIntegrationTest.java} | 2 +- ...java => EmployeeNoMvcIntegrationTest.java} | 7 +- .../GreetControllerIntegrationTest.java | 8 +- ...Test.java => GreetControllerUnitTest.java} | 24 ++--- 24 files changed, 259 insertions(+), 271 deletions(-) rename spring-mvc-java/src/test/java/com/baeldung/aop/{AopLoggingTest.java => AopLoggingIntegrationTest.java} (98%) rename spring-mvc-java/src/test/java/com/baeldung/aop/{AopPerformanceTest.java => AopPerformanceIntegrationTest.java} (97%) rename spring-mvc-java/src/test/java/com/baeldung/aop/{AopPublishingTest.java => AopPublishingIntegrationTest.java} (97%) rename spring-mvc-java/src/test/java/com/baeldung/aop/{AopXmlConfigPerformanceTest.java => AopXmlConfigPerformanceIntegrationTest.java} (97%) delete mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java delete mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java create mode 100644 spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitTest.java rename spring-mvc-java/src/test/java/com/baeldung/web/controller/{EmployeeTest.java => EmployeeMvcIntegrationTest.java} (97%) rename spring-mvc-java/src/test/java/com/baeldung/web/controller/{EmployeeTestWithoutMockMvc.java => EmployeeNoMvcIntegrationTest.java} (97%) rename spring-mvc-java/src/test/java/com/baeldung/web/controller/{GreetControllerTest.java => GreetControllerUnitTest.java} (77%) diff --git a/guava18/pom.xml b/guava18/pom.xml index e26eb7313e..413e9c35b8 100644 --- a/guava18/pom.xml +++ b/guava18/pom.xml @@ -17,7 +17,7 @@ junit junit - 4.13 + 4.12 test diff --git a/pom.xml b/pom.xml index 5526c1e2a3..709c3e4e00 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,6 @@ gson - gson-jackson-performance guava guava18 guava19 diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 54d6eee01a..8248343105 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -6,7 +6,7 @@ 0.1-SNAPSHOT spring-mvc-java war - + @@ -35,7 +35,7 @@ spring-messaging ${org.springframework.version} - + com.fasterxml.jackson.core @@ -56,7 +56,7 @@ 1.2 runtime - + org.springframework @@ -80,6 +80,11 @@ commons-fileupload 1.3.1 + + net.sourceforge.htmlunit + htmlunit + ${net.sourceforge.htmlunit} + @@ -196,7 +201,7 @@ ${maven-surefire-plugin.version} - + **/*IntegrationTest.java @@ -231,22 +236,22 @@ 4.0.4.RELEASE 2.1.4.RELEASE 2.7.8 - + 4.3.11.Final 5.1.38 - + 1.7.21 1.1.5 5.2.2.Final - + 19.0 3.4 - + 1.3 4.12 @@ -255,6 +260,7 @@ 4.5 2.9.0 2.23 + 3.5.1 2.6 diff --git a/spring-mvc-java/src/main/java/com/baeldung/model/Message.java b/spring-mvc-java/src/main/java/com/baeldung/model/Message.java index c1f7f52215..76d53e132a 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/model/Message.java +++ b/spring-mvc-java/src/main/java/com/baeldung/model/Message.java @@ -2,14 +2,14 @@ package com.baeldung.model; public class Message { - private String from; - private String text; + private String from; + private String text; - public String getText() { - return text; - } + public String getText() { + return text; + } - public String getFrom() { - return from; - } + public String getFrom() { + return from; + } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/model/OutputMessage.java b/spring-mvc-java/src/main/java/com/baeldung/model/OutputMessage.java index fc201ed016..9aad564b1e 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/model/OutputMessage.java +++ b/spring-mvc-java/src/main/java/com/baeldung/model/OutputMessage.java @@ -2,26 +2,26 @@ package com.baeldung.model; public class OutputMessage { - private String from; - private String text; - private String time; + private String from; + private String text; + private String time; - public OutputMessage(final String from, final String text, final String time) { + public OutputMessage(final String from, final String text, final String time) { - this.from = from; - this.text = text; - this.time = time; - } + this.from = from; + this.text = text; + this.time = time; + } - public String getText() { - return text; - } + public String getText() { + return text; + } - public String getTime() { - return time; - } + public String getTime() { + return time; + } - public String getFrom() { - return from; - } + public String getFrom() { + return from; + } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebSocketConfig.java b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebSocketConfig.java index 6330041c60..5f3eb1312d 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebSocketConfig.java +++ b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebSocketConfig.java @@ -10,15 +10,15 @@ import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { - @Override - public void configureMessageBroker(final MessageBrokerRegistry config) { - config.enableSimpleBroker("/topic"); - config.setApplicationDestinationPrefixes("/app"); - } + @Override + public void configureMessageBroker(final MessageBrokerRegistry config) { + config.enableSimpleBroker("/topic"); + config.setApplicationDestinationPrefixes("/app"); + } - @Override - public void registerStompEndpoints(final StompEndpointRegistry registry) { - registry.addEndpoint("/chat").withSockJS(); - } + @Override + public void registerStompEndpoints(final StompEndpointRegistry registry) { + registry.addEndpoint("/chat").withSockJS(); + } } \ No newline at end of file diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java index 8dcfe68a84..e92abfdc47 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java @@ -22,59 +22,55 @@ import com.baeldung.model.Company; @Controller public class CompanyController { - Map companyMap = new HashMap<>(); + Map companyMap = new HashMap<>(); - @RequestMapping(value = "/company", method = RequestMethod.GET) - public ModelAndView showForm() { - return new ModelAndView("companyHome", "company", new Company()); - } + @RequestMapping(value = "/company", method = RequestMethod.GET) + public ModelAndView showForm() { + return new ModelAndView("companyHome", "company", new Company()); + } - @RequestMapping(value = "/company/{Id}", produces = { "application/json", - "application/xml" }, method = RequestMethod.GET) - public @ResponseBody Company getCompanyById(@PathVariable final long Id) { - return companyMap.get(Id); - } + @RequestMapping(value = "/company/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) + public @ResponseBody Company getCompanyById(@PathVariable final long Id) { + return companyMap.get(Id); + } - @RequestMapping(value = "/addCompany", method = RequestMethod.POST) - public String submit(@ModelAttribute("company") final Company company, - final BindingResult result, final ModelMap model) { - if (result.hasErrors()) { - return "error"; - } - model.addAttribute("name", company.getName()); - model.addAttribute("id", company.getId()); + @RequestMapping(value = "/addCompany", method = RequestMethod.POST) + public String submit(@ModelAttribute("company") final Company company, final BindingResult result, final ModelMap model) { + if (result.hasErrors()) { + return "error"; + } + model.addAttribute("name", company.getName()); + model.addAttribute("id", company.getId()); - companyMap.put(company.getId(), company); + companyMap.put(company.getId(), company); - return "companyView"; - } + return "companyView"; + } - @RequestMapping(value = "/companyEmployee/{company}/employeeData/{employee}", method = RequestMethod.GET) - @ResponseBody - public ResponseEntity> getEmployeeDataFromCompany( - @MatrixVariable(pathVar = "employee") final Map matrixVars) { - return new ResponseEntity<>(matrixVars, HttpStatus.OK); - } + @RequestMapping(value = "/companyEmployee/{company}/employeeData/{employee}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getEmployeeDataFromCompany(@MatrixVariable(pathVar = "employee") final Map matrixVars) { + return new ResponseEntity<>(matrixVars, HttpStatus.OK); + } - @RequestMapping(value = "/companyData/{company}/employeeData/{employee}", method = RequestMethod.GET) - @ResponseBody - public ResponseEntity> getCompanyName( - @MatrixVariable(value = "name", pathVar = "company") final String name) { - final Map result = new HashMap(); - result.put("name", name); - return new ResponseEntity<>(result, HttpStatus.OK); - } + @RequestMapping(value = "/companyData/{company}/employeeData/{employee}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getCompanyName(@MatrixVariable(value = "name", pathVar = "company") final String name) { + final Map result = new HashMap(); + result.put("name", name); + return new ResponseEntity<>(result, HttpStatus.OK); + } - @RequestMapping(value = "/companyResponseBody", produces = MediaType.APPLICATION_JSON_VALUE) - @ResponseBody - public Company getCompanyResponseBody() { - final Company company = new Company(2, "ABC"); - return company; - } + @RequestMapping(value = "/companyResponseBody", produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseBody + public Company getCompanyResponseBody() { + final Company company = new Company(2, "ABC"); + return company; + } - @RequestMapping(value = "/companyResponseEntity", produces = MediaType.APPLICATION_JSON_VALUE) - public ResponseEntity getCompanyResponseEntity() { - final Company company = new Company(3, "123"); - return new ResponseEntity(company, HttpStatus.OK); - } + @RequestMapping(value = "/companyResponseEntity", produces = MediaType.APPLICATION_JSON_VALUE) + public ResponseEntity getCompanyResponseEntity() { + final Company company = new Company(3, "123"); + return new ResponseEntity(company, HttpStatus.OK); + } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java index fd5fa6bc27..ef76059567 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java @@ -31,10 +31,8 @@ public class EmployeeController { return new ModelAndView("employeeHome", "employee", new Employee()); } - @RequestMapping(value = "/employee/{Id}", produces = {"application/json", "application/xml"}, method = RequestMethod.GET) - public - @ResponseBody - Employee getEmployeeById(@PathVariable final long Id) { + @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) + public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { return employeeMap.get(Id); } diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java index cfc73aeabe..111bf023f7 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/MessageController.java @@ -10,15 +10,15 @@ import org.springframework.web.bind.annotation.RequestParam; @RequestMapping("/message") public class MessageController { - @RequestMapping(value = "/showForm", method = RequestMethod.GET) - public String showForm() { - return "message"; - } + @RequestMapping(value = "/showForm", method = RequestMethod.GET) + public String showForm() { + return "message"; + } - @RequestMapping(value = "/processForm", method = RequestMethod.POST) - public String processForm(@RequestParam("message") final String message, final Model model) { - model.addAttribute("message", message); - return "message"; - } + @RequestMapping(value = "/processForm", method = RequestMethod.POST) + public String processForm(@RequestParam("message") final String message, final Model model) { + model.addAttribute("message", message); + return "message"; + } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/advice/JsonpControllerAdvice.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/advice/JsonpControllerAdvice.java index 8557b15492..7b2c6870df 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/advice/JsonpControllerAdvice.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/advice/JsonpControllerAdvice.java @@ -6,8 +6,8 @@ import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpRespon @ControllerAdvice public class JsonpControllerAdvice extends AbstractJsonpResponseBodyAdvice { - public JsonpControllerAdvice() { - super("callback"); - } + public JsonpControllerAdvice() { + super("callback"); + } } diff --git a/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingTest.java b/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java similarity index 98% rename from spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingTest.java rename to spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java index 19bf4d0fac..0837100bfa 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/aop/AopLoggingIntegrationTest.java @@ -25,7 +25,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) -public class AopLoggingTest { +public class AopLoggingIntegrationTest { @Before public void setUp() { diff --git a/spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceTest.java b/spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceTest.java rename to spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceIntegrationTest.java index 4ad5a3e1a6..c9ab2fb4bb 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/aop/AopPerformanceIntegrationTest.java @@ -24,7 +24,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) -public class AopPerformanceTest { +public class AopPerformanceIntegrationTest { @Before public void setUp() { diff --git a/spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingTest.java b/spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingTest.java rename to spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingIntegrationTest.java index c075db9fc6..cf9c83a93d 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/aop/AopPublishingIntegrationTest.java @@ -23,7 +23,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { TestConfig.class }, loader = AnnotationConfigContextLoader.class) -public class AopPublishingTest { +public class AopPublishingIntegrationTest { @Before public void setUp() { diff --git a/spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceTest.java b/spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceTest.java rename to spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceIntegrationTest.java index 4d2df50d18..3b380315e8 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/aop/AopXmlConfigPerformanceIntegrationTest.java @@ -22,7 +22,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("/com/baeldung/aop/beans.xml") -public class AopXmlConfigPerformanceTest { +public class AopXmlConfigPerformanceIntegrationTest { @Before public void setUp() { diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java deleted file mode 100644 index 58e5f9829b..0000000000 --- a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndJUnitTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.htmlunit; - -import org.junit.Assert; -import org.junit.Test; - -import com.gargoylesoftware.htmlunit.WebClient; -import com.gargoylesoftware.htmlunit.html.HtmlPage; - -public class HtmlUnitAndJUnitTest { - - @Test - public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { - try (final WebClient webClient = new WebClient()) { - - webClient.getOptions().setThrowExceptionOnScriptError(false); - - final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); - Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); - } - } - -} diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java new file mode 100644 index 0000000000..7a23908fe5 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java @@ -0,0 +1,70 @@ +package com.baeldung.htmlunit; + +import java.io.IOException; +import java.net.MalformedURLException; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder; +import org.springframework.web.context.WebApplicationContext; + +import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlForm; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; +import com.gargoylesoftware.htmlunit.html.HtmlTextInput; + +@RunWith(SpringJUnit4ClassRunner.class) +@WebAppConfiguration +@ContextConfiguration(classes = { TestConfig.class }) +public class HtmlUnitAndSpringIntegrationTest { + + @Autowired + private WebApplicationContext wac; + + private WebClient webClient; + + @Before + public void setup() { + webClient = MockMvcWebClientBuilder.webAppContextSetup(wac).build(); + } + + // + + @Test + public void givenAMessage_whenSent_thenItShows() throws FailingHttpStatusCodeException, MalformedURLException, IOException { + final String text = "Hello world!"; + HtmlPage page = webClient.getPage("http://localhost/message/showForm"); + System.out.println(page.asXml()); + + final HtmlTextInput messageText = page.getHtmlElementById("message"); + messageText.setValueAttribute(text); + + final HtmlForm form = page.getForms().get(0); + final HtmlSubmitInput submit = form.getOneHtmlElementByAttribute("input", "type", "submit"); + final HtmlPage newPage = submit.click(); + + final String receivedText = newPage.getHtmlElementById("received").getTextContent(); + + Assert.assertEquals(receivedText, text); + System.out.println(newPage.asXml()); + } + + @Test + public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { + try (final WebClient client = new WebClient()) { + webClient.getOptions().setThrowExceptionOnScriptError(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); + Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); + } + } + +} diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java deleted file mode 100644 index dcc7555ae2..0000000000 --- a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringTest.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.baeldung.htmlunit; - -import java.io.IOException; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; -import org.springframework.test.web.servlet.htmlunit.MockMvcWebClientBuilder; -import org.springframework.web.context.WebApplicationContext; - -import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException; -import com.gargoylesoftware.htmlunit.WebClient; -import com.gargoylesoftware.htmlunit.html.HtmlForm; -import com.gargoylesoftware.htmlunit.html.HtmlPage; -import com.gargoylesoftware.htmlunit.html.HtmlSubmitInput; -import com.gargoylesoftware.htmlunit.html.HtmlTextInput; - -@RunWith(SpringJUnit4ClassRunner.class) -@WebAppConfiguration -@ContextConfiguration(classes = { TestConfig.class }) -public class HtmlUnitAndSpringTest { - - @Autowired - private WebApplicationContext wac; - - private WebClient webClient; - - @Before - public void setup() { - webClient = MockMvcWebClientBuilder.webAppContextSetup(wac).build(); - } - - @Test - @Ignore - public void givenAMessage_whenSent_thenItShows() { - final String text = "Hello world!"; - HtmlPage page; - - try { - - page = webClient.getPage("http://localhost/message/showForm"); - System.out.println(page.asXml()); - - final HtmlTextInput messageText = page.getHtmlElementById("message"); - messageText.setValueAttribute(text); - - final HtmlForm form = page.getForms().get(0); - final HtmlSubmitInput submit = form.getOneHtmlElementByAttribute("input", "type", "submit"); - final HtmlPage newPage = submit.click(); - - final String receivedText = newPage.getHtmlElementById("received").getTextContent(); - - Assert.assertEquals(receivedText, text); - System.out.println(newPage.asXml()); - - } catch (FailingHttpStatusCodeException | IOException e) { - e.printStackTrace(); - } - - } - - @Test - public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { - try (final WebClient client = new WebClient()) { - - webClient.getOptions().setThrowExceptionOnScriptError(false); - - final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); - Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); - } - } - -} diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitTest.java new file mode 100644 index 0000000000..6a7e961eb1 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitTest.java @@ -0,0 +1,21 @@ +package com.baeldung.htmlunit; + +import org.junit.Assert; +import org.junit.Test; + +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; + +public class HtmlUnitTest { + + @Test + public void givenAClient_whenEnteringBaeldung_thenPageTitleIsCorrect() throws Exception { + try (final WebClient webClient = new WebClient()) { + webClient.getOptions().setThrowExceptionOnScriptError(false); + + final HtmlPage page = webClient.getPage("http://www.baeldung.com/"); + Assert.assertEquals("Baeldung | Java, Spring and Web Development tutorials", page.getTitleText()); + } + } + +} diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java index 16d18717e6..9919d7571d 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitWebScraping.java @@ -10,31 +10,31 @@ import com.gargoylesoftware.htmlunit.html.HtmlPage; public class HtmlUnitWebScraping { - public static void main(final String[] args) throws Exception { - try (final WebClient webClient = new WebClient()) { + public static void main(final String[] args) throws Exception { + try (final WebClient webClient = new WebClient()) { - webClient.getOptions().setCssEnabled(false); - webClient.getOptions().setJavaScriptEnabled(false); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(false); - final HtmlPage page = webClient.getPage("http://www.baeldung.com/full_archive"); - final HtmlAnchor latestPostLink = (HtmlAnchor) page.getByXPath("(//ul[@class='car-monthlisting']/li)[1]/a").get(0); + final HtmlPage page = webClient.getPage("http://www.baeldung.com/full_archive"); + final HtmlAnchor latestPostLink = (HtmlAnchor) page.getByXPath("(//ul[@class='car-monthlisting']/li)[1]/a").get(0); - System.out.println("Entering: " + latestPostLink.getHrefAttribute()); + System.out.println("Entering: " + latestPostLink.getHrefAttribute()); - final HtmlPage postPage = latestPostLink.click(); + final HtmlPage postPage = latestPostLink.click(); - final HtmlHeading1 heading1 = (HtmlHeading1) postPage.getByXPath("//h1").get(0); - System.out.println("Title: " + heading1.getTextContent()); + final HtmlHeading1 heading1 = (HtmlHeading1) postPage.getByXPath("//h1").get(0); + System.out.println("Title: " + heading1.getTextContent()); - final List headings2 = (List) postPage.getByXPath("//h2"); + final List headings2 = (List) postPage.getByXPath("//h2"); - final StringBuilder sb = new StringBuilder(heading1.getTextContent()); - for (final HtmlHeading2 h2 : headings2) { - sb.append("\n").append(h2.getTextContent()); - } + final StringBuilder sb = new StringBuilder(heading1.getTextContent()); + for (final HtmlHeading2 h2 : headings2) { + sb.append("\n").append(h2.getTextContent()); + } - System.out.println(sb.toString()); - } - } + System.out.println(sb.toString()); + } + } } diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java index 1357310b1f..17a68d67a5 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/TestConfig.java @@ -15,28 +15,28 @@ import org.thymeleaf.templateresolver.ServletContextTemplateResolver; @ComponentScan(basePackages = { "com.baeldung.web.controller" }) public class TestConfig extends WebMvcConfigurerAdapter { - @Bean - public ViewResolver thymeleafViewResolver() { - final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); - viewResolver.setTemplateEngine(templateEngine()); - viewResolver.setOrder(1); - return viewResolver; - } + @Bean + public ViewResolver thymeleafViewResolver() { + final ThymeleafViewResolver viewResolver = new ThymeleafViewResolver(); + viewResolver.setTemplateEngine(templateEngine()); + viewResolver.setOrder(1); + return viewResolver; + } - @Bean - public ServletContextTemplateResolver templateResolver() { - final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); - templateResolver.setPrefix("/WEB-INF/templates/"); - templateResolver.setSuffix(".html"); - templateResolver.setTemplateMode("HTML5"); - return templateResolver; - } + @Bean + public ServletContextTemplateResolver templateResolver() { + final ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver(); + templateResolver.setPrefix("/WEB-INF/templates/"); + templateResolver.setSuffix(".html"); + templateResolver.setTemplateMode("HTML5"); + return templateResolver; + } - @Bean - public SpringTemplateEngine templateEngine() { - final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); - templateEngine.setTemplateResolver(templateResolver()); - return templateEngine; - } + @Bean + public SpringTemplateEngine templateEngine() { + final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); + templateEngine.setTemplateResolver(templateResolver()); + return templateEngine; + } } diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTest.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeMvcIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTest.java rename to spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeMvcIntegrationTest.java index c1e79a2a63..86420a5fbd 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeMvcIntegrationTest.java @@ -23,7 +23,7 @@ import com.baeldung.spring.web.config.WebConfig; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(classes = WebConfig.class) -public class EmployeeTest { +public class EmployeeMvcIntegrationTest { @Autowired private WebApplicationContext webAppContext; diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTestWithoutMockMvc.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeNoMvcIntegrationTest.java similarity index 97% rename from spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTestWithoutMockMvc.java rename to spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeNoMvcIntegrationTest.java index 19806e0559..e84c20c973 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeTestWithoutMockMvc.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/EmployeeNoMvcIntegrationTest.java @@ -1,7 +1,7 @@ package com.baeldung.web.controller; -import org.junit.Before; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +15,7 @@ import com.baeldung.spring.web.config.WebConfig; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(classes = WebConfig.class) -public class EmployeeTestWithoutMockMvc { +public class EmployeeNoMvcIntegrationTest { @Autowired private EmployeeController employeeController; @@ -25,9 +25,10 @@ public class EmployeeTestWithoutMockMvc { employeeController.initEmployees(); } + // + @Test public void whenInitEmployees_thenVerifyValuesInitiation() { - Employee employee1 = employeeController.employeeMap.get(1L); Employee employee2 = employeeController.employeeMap.get(2L); Employee employee3 = employeeController.employeeMap.get(3L); diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java index d1d1167369..db984eadfb 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerIntegrationTest.java @@ -1,6 +1,5 @@ package com.baeldung.web.controller; - import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import javax.servlet.ServletContext; @@ -25,7 +24,7 @@ import com.baeldung.spring.web.config.ApplicationConfig; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration -@ContextConfiguration(classes = {ApplicationConfig.class}) +@ContextConfiguration(classes = { ApplicationConfig.class }) public class GreetControllerIntegrationTest { @Autowired @@ -35,7 +34,6 @@ public class GreetControllerIntegrationTest { private static final String CONTENT_TYPE = "application/json"; - @Before public void setup() throws Exception { this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); @@ -74,8 +72,8 @@ public class GreetControllerIntegrationTest { @Test public void givenGreetURIWithQueryParameter_whenMockMVC_thenVerifyResponse() throws Exception { - this.mockMvc.perform(MockMvcRequestBuilders.get("/greetWithQueryVariable").param("name", "John Doe")).andDo(print()).andExpect(MockMvcResultMatchers.status().isOk()) - .andExpect(MockMvcResultMatchers.content().contentType(CONTENT_TYPE)).andExpect(MockMvcResultMatchers.jsonPath("$.message").value("Hello World John Doe!!!")); + this.mockMvc.perform(MockMvcRequestBuilders.get("/greetWithQueryVariable").param("name", "John Doe")).andDo(print()).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().contentType(CONTENT_TYPE)) + .andExpect(MockMvcResultMatchers.jsonPath("$.message").value("Hello World John Doe!!!")); } @Test diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerTest.java b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java similarity index 77% rename from spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerTest.java rename to spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java index 0fd71a46dd..eacd256438 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/GreetControllerUnitTest.java @@ -1,17 +1,19 @@ package com.baeldung.web.controller; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; + import org.junit.Before; import org.junit.Test; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; -import org.springframework.test.web.servlet.result.MockMvcResultMatchers; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; - -public class GreetControllerTest { +public class GreetControllerUnitTest { private MockMvc mockMvc; private static final String CONTENT_TYPE = "application/json"; @@ -43,19 +45,17 @@ public class GreetControllerTest { @Test public void givenGreetURIWithQueryParameter_whenMockMVC_thenVerifyResponse() throws Exception { - this.mockMvc.perform(get("/greetWithQueryVariable").param("name", "John Doe")).andDo(print()).andExpect(status().isOk()) - .andExpect(content().contentType(CONTENT_TYPE)).andExpect(jsonPath("$.message").value("Hello World John Doe!!!")); + this.mockMvc.perform(get("/greetWithQueryVariable").param("name", "John Doe")).andDo(print()).andExpect(status().isOk()).andExpect(content().contentType(CONTENT_TYPE)).andExpect(jsonPath("$.message").value("Hello World John Doe!!!")); } @Test public void givenGreetURIWithPost_whenMockMVC_thenVerifyResponse() throws Exception { - this.mockMvc.perform(MockMvcRequestBuilders.post("/greetWithPost")).andDo(print()).andExpect(status().isOk()).andExpect(content().contentType(CONTENT_TYPE)) - .andExpect(jsonPath("$.message").value("Hello World!!!")); + this.mockMvc.perform(MockMvcRequestBuilders.post("/greetWithPost")).andDo(print()).andExpect(status().isOk()).andExpect(content().contentType(CONTENT_TYPE)).andExpect(jsonPath("$.message").value("Hello World!!!")); } @Test public void givenGreetURIWithPostAndFormData_whenMockMVC_thenVerifyResponse() throws Exception { - this.mockMvc.perform(MockMvcRequestBuilders.post("/greetWithPostAndFormData").param("id", "1").param("name", "John Doe")).andDo(print()).andExpect(status().isOk()) - .andExpect(content().contentType(CONTENT_TYPE)).andExpect(jsonPath("$.message").value("Hello World John Doe!!!")).andExpect(jsonPath("$.id").value(1)); + this.mockMvc.perform(MockMvcRequestBuilders.post("/greetWithPostAndFormData").param("id", "1").param("name", "John Doe")).andDo(print()).andExpect(status().isOk()).andExpect(content().contentType(CONTENT_TYPE)) + .andExpect(jsonPath("$.message").value("Hello World John Doe!!!")).andExpect(jsonPath("$.id").value(1)); } } From 856be0a08a5ab123c82ead8a7a4db0dbd49bf0c7 Mon Sep 17 00:00:00 2001 From: eugenp Date: Wed, 12 Oct 2016 08:02:05 +0300 Subject: [PATCH 112/309] formatting work --- .../org/baeldung/akka/SpringExtension.java | 1 - .../org/baeldung/akka/SpringAkkaTest.java | 4 +- .../caching/example/AbstractService.java | 2 +- .../config/StudentControllerConfig.java | 26 +- .../baeldung/controller/config/WebConfig.java | 4 +- .../controller/controller/RestController.java | 16 +- .../baeldung/controller/student/Student.java | 50 +- .../PropertiesWithPlaceHolderConfigurer.java | 1 - .../scopes/HelloMessageGenerator.java | 14 +- .../main/java/org/baeldung/scopes/Person.java | 34 +- .../org/baeldung/scopes/ScopesController.java | 30 +- .../baeldung/spring/config/ScopesConfig.java | 66 +- .../java/org/baeldung/spring43/cache/Foo.java | 1 - .../controller/ControllerAnnotationTest.java | 21 +- .../baeldung/controller/ControllerTest.java | 14 +- .../java/org/baeldung/scopes/ScopesTest.java | 44 +- .../AttributeAnnotationTest.java | 10 +- .../composedmapping/ComposedMappingTest.java | 7 +- ...ConfigurationConstructorInjectionTest.java | 2 +- .../TransactionalTestConfiguration.java | 1 - .../ScopeAnnotationsTest.java | 52 +- .../com/baeldung/autowire/sample/App.java | 10 +- .../autowire/sample/BarFormatter.java | 2 +- .../autowire/sample/FooFormatter.java | 2 +- .../baeldung/autowire/sample/FooService.java | 8 +- .../baeldung/autowire/sample/Formatter.java | 2 +- .../autowire/sample/FormatterType.java | 4 +- .../autowire/sample/FooServiceTest.java | 8 +- .../java/com/baeldung/TestController.java | 10 +- .../com/baeldung/WebjarsdemoApplication.java | 6 +- .../com/baeldung/git/CommitIdApplication.java | 5 +- .../baeldung/git/CommitInfoController.java | 2 +- .../baeldung/WebjarsdemoApplicationTests.java | 6 +- .../java/com/baeldung/git/CommitIdTest.java | 9 +- .../baeldung/SpringBootApplicationTest.java | 13 +- .../java/org/baeldung/SpringBootMailTest.java | 1 - .../client/DetailsServiceClientTest.java | 3 +- .../com/baeldung/SpringDemoApplication.java | 6 +- .../spring/data/couchbase/model/Campus.java | 34 +- .../spring/data/couchbase/model/Person.java | 25 +- .../spring/data/couchbase/model/Student.java | 38 +- .../repos/CustomStudentRepositoryImpl.java | 5 +- .../couchbase/repos/PersonRepository.java | 1 + .../couchbase/repos/StudentRepository.java | 1 + .../service/PersonRepositoryService.java | 5 +- .../service/PersonTemplateService.java | 7 +- .../service/StudentRepositoryService.java | 5 +- .../service/StudentTemplateService.java | 7 +- .../couchbase2b/repos/CampusRepository.java | 4 +- .../couchbase2b/repos/PersonRepository.java | 1 + .../couchbase2b/repos/StudentRepository.java | 1 + .../couchbase2b/service/CampusService.java | 6 +- .../service/CampusServiceImpl.java | 9 +- .../service/PersonServiceImpl.java | 3 +- .../service/StudentServiceImpl.java | 3 +- .../data/couchbase/MyCouchbaseConfig.java | 4 +- .../couchbase/service/StudentServiceTest.java | 38 +- .../MultiBucketCouchbaseConfig.java | 14 +- .../service/CampusServiceImplTest.java | 70 +- .../service/StudentServiceImplTest.java | 38 +- .../elasticsearch/ElasticSearchUnitTests.java | 40 +- .../gridfs/GridFSIntegrationTest.java | 2 +- .../MovieDatabaseNeo4jConfiguration.java | 8 +- .../MovieDatabaseNeo4jTestConfiguration.java | 9 +- .../spring/data/neo4j/domain/Movie.java | 11 +- .../spring/data/neo4j/domain/Person.java | 8 +- .../spring/data/neo4j/domain/Role.java | 3 +- .../data/neo4j/repostory/MovieRepository.java | 4 +- .../neo4j/repostory/PersonRepository.java | 3 +- .../data/neo4j/services/MovieService.java | 20 +- .../data/neo4j/MovieRepositoryTest.java | 9 +- .../data/redis/queue/MessagePublisher.java | 1 - .../redis/queue/RedisMessagePublisher.java | 3 +- .../InvalidResourceUsageExceptionTest.java | 26 +- .../hibernate/criteria/model/Item.java | 122 +- .../criteria/util/HibernateUtil.java | 11 +- .../criteria/view/ApplicationView.java | 406 +++--- .../hibernate/fetching/model/OrderDetail.java | 96 +- .../hibernate/fetching/model/UserEager.java | 104 +- .../hibernate/fetching/model/UserLazy.java | 105 +- .../fetching/util/HibernateUtil.java | 35 +- .../com/baeldung/persistence/model/Foo.java | 134 +- .../criteria/HibernateCriteriaTest.java | 306 +++-- .../criteria/HibernateCriteriaTestRunner.java | 12 +- .../criteria/HibernateCriteriaTestSuite.java | 2 +- .../fetching/HibernateFetchingTest.java | 51 +- .../persistence/save/SaveMethodsTest.java | 16 +- .../FooStoredProceduresIntegrationTest.java | 17 +- .../jms/DefaultTextMessageSenderTest.java | 3 +- .../jms/MapMessageConvertAndSendTest.java | 3 +- .../SecondLevelCacheIntegrationTest.java | 13 +- .../org/baeldung/persistence/model/User.java | 2 +- .../java/com/baeldung/MocksApplication.java | 6 +- .../velocity/controller/MainController.java | 12 +- .../velocity/service/ITutorialsService.java | 2 +- .../velocity/service/TutorialsService.java | 5 +- .../mvc/velocity/spring/config/WebConfig.java | 2 +- .../test/DataContentControllerTest.java | 5 +- .../mvc/velocity/test/config/TestConfig.java | 5 +- .../com/baeldung/spring/ClientWebConfig.java | 8 +- .../baeldung/spring/ClientWebConfigJava.java | 54 +- .../spring/controller/EmployeeController.java | 40 +- .../spring/controller/HelloController.java | 3 +- .../controller/HelloGuestController.java | 3 +- .../controller/HelloWorldController.java | 3 +- .../spring/controller/PersonController.java | 89 +- .../spring/controller/WelcomeController.java | 3 +- .../java/com/baeldung/spring/form/Person.java | 218 ++-- .../spring/validator/PersonValidator.java | 16 +- .../springquartz/SpringQuartzApp.java | 3 +- .../basics/scheduler/QrtzScheduler.java | 13 +- .../basics/scheduler/SampleJob.java | 3 +- .../AutoWiringSpringBeanJobFactory.java | 10 +- .../web/controller/CompanyController.java | 10 +- .../web/controller/ItemController.java | 36 +- .../advice/JsonpControllerAdvice.java | 6 +- .../controller/status/ForbiddenException.java | 4 +- .../java/org/baeldung/web/dto/Company.java | 50 +- .../java/org/baeldung/web/dto/FooProtos.java | 1153 ++++++++--------- .../status/ExampleControllerTest.java | 6 +- .../service/MyUserDetailsService.java | 4 +- .../config/parent/SecurityConfig.java | 1 - .../org/baeldung/spring/ListenerConfig.java | 10 +- .../java/org/baeldung/spring/WebConfig.java | 14 +- .../interceptor/SessionTimerInterceptor.java | 69 +- .../web/interceptor/UserInterceptor.java | 3 +- .../SessionTimerInterceptorTest.java | 37 +- .../web/interceptor/UserInterceptorTest.java | 7 +- 128 files changed, 2039 insertions(+), 2275 deletions(-) diff --git a/spring-akka/src/main/java/org/baeldung/akka/SpringExtension.java b/spring-akka/src/main/java/org/baeldung/akka/SpringExtension.java index 624e289812..aa5941c763 100644 --- a/spring-akka/src/main/java/org/baeldung/akka/SpringExtension.java +++ b/spring-akka/src/main/java/org/baeldung/akka/SpringExtension.java @@ -29,5 +29,4 @@ public class SpringExtension extends AbstractExtensionId getCommitId() { Map result = new HashMap<>(); - result.put("Commit message",commitMessage); + result.put("Commit message", commitMessage); result.put("Commit branch", branch); result.put("Commit id", commitId); return result; diff --git a/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java b/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java index 284cda5d31..c43b13ea0b 100644 --- a/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java +++ b/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java @@ -11,8 +11,8 @@ import org.springframework.test.context.web.WebAppConfiguration; @WebAppConfiguration public class WebjarsdemoApplicationTests { - @Test - public void contextLoads() { - } + @Test + public void contextLoads() { + } } diff --git a/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java b/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java index e16791881e..c0fc1befd3 100644 --- a/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java +++ b/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java @@ -32,13 +32,10 @@ public class CommitIdTest { LOG.info(commitMessage); LOG.info(branch); - assertThat(commitMessage) - .isNotEqualTo("UNKNOWN"); + assertThat(commitMessage).isNotEqualTo("UNKNOWN"); - assertThat(branch) - .isNotEqualTo("UNKNOWN"); + assertThat(branch).isNotEqualTo("UNKNOWN"); - assertThat(commitId) - .isNotEqualTo("UNKNOWN"); + assertThat(commitId).isNotEqualTo("UNKNOWN"); } } \ No newline at end of file diff --git a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java index ac7bcd62a9..1255180e44 100644 --- a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java +++ b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java @@ -31,22 +31,15 @@ public class SpringBootApplicationTest { private WebApplicationContext webApplicationContext; private MockMvc mockMvc; - @Before public void setupMockMvc() { - mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext) - .build(); + mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } @Test public void givenRequestHasBeenMade_whenMeetsAllOfGivenConditions_thenCorrect() throws Exception { - MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(), - MediaType.APPLICATION_JSON.getSubtype(), - Charset.forName("utf8")); + MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8")); - mockMvc.perform(MockMvcRequestBuilders.get("/entity/all")). - andExpect(MockMvcResultMatchers.status().isOk()). - andExpect(MockMvcResultMatchers.content().contentType(contentType)). - andExpect(jsonPath("$", hasSize(4))); + mockMvc.perform(MockMvcRequestBuilders.get("/entity/all")).andExpect(MockMvcResultMatchers.status().isOk()).andExpect(MockMvcResultMatchers.content().contentType(contentType)).andExpect(jsonPath("$", hasSize(4))); } } diff --git a/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java b/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java index d36a7906a3..f4ce158661 100644 --- a/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java +++ b/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java @@ -69,7 +69,6 @@ public class SpringBootMailTest { return wiserMessage.getMimeMessage().getSubject(); } - private SimpleMailMessage composeEmailMessage() { SimpleMailMessage mailMessage = new SimpleMailMessage(); mailMessage.setTo(userTo); diff --git a/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java b/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java index c594610be2..ba0da968ad 100644 --- a/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java +++ b/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java @@ -30,8 +30,7 @@ public class DetailsServiceClientTest { @Before public void setUp() throws Exception { String detailsString = objectMapper.writeValueAsString(new Details("John Smith", "john")); - this.server.expect(requestTo("/john/details")) - .andRespond(withSuccess(detailsString, MediaType.APPLICATION_JSON)); + this.server.expect(requestTo("/john/details")).andRespond(withSuccess(detailsString, MediaType.APPLICATION_JSON)); } @Test diff --git a/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java b/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java index 60548dd6e3..820e7e8004 100644 --- a/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java +++ b/spring-cucumber/src/main/java/com/baeldung/SpringDemoApplication.java @@ -18,9 +18,9 @@ public class SpringDemoApplication extends SpringBootServletInitializer { protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(SpringDemoApplication.class); } - + @Bean - public RestTemplate getRestTemplate(){ - return new RestTemplate(); + public RestTemplate getRestTemplate() { + return new RestTemplate(); } } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java index 201b14cf0b..c357ab8596 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java @@ -19,22 +19,27 @@ public class Campus { @Field @NotNull private Point location; - + public String getId() { return id; } + public void setId(String id) { this.id = id; } + public String getName() { return name; } + public void setName(String name) { this.name = name; } + public Point getLocation() { return location; } + public void setLocation(Point location) { this.location = location; } @@ -42,13 +47,13 @@ public class Campus { @Override public int hashCode() { int hash = 1; - if(id != null) { + if (id != null) { hash = hash * 31 + id.hashCode(); } - if(name != null) { + if (name != null) { hash = hash * 31 + name.hashCode(); } - if(location != null) { + if (location != null) { hash = hash * 31 + location.hashCode(); } return hash; @@ -56,30 +61,33 @@ public class Campus { @Override public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; + if ((obj == null) || (obj.getClass() != this.getClass())) + return false; + if (obj == this) + return true; Campus other = (Campus) obj; return this.hashCode() == other.hashCode(); } - + @SuppressWarnings("unused") - private Campus() {} - + private Campus() { + } + public Campus(Builder b) { this.id = b.id; this.name = b.name; this.location = b.location; } - + public static class Builder { private String id; private String name; private Point location; - + public static Builder newInstance() { return new Builder(); } - + public Campus build() { return new Campus(this); } @@ -93,7 +101,7 @@ public class Campus { this.name = name; return this; } - + public Builder location(Point location) { this.location = location; return this; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java index 9220e157ed..fd41427d20 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java @@ -24,7 +24,7 @@ public class Person { private DateTime created; @Field private DateTime updated; - + public Person(String id, String firstName, String lastName) { this.id = id; this.firstName = firstName; @@ -34,44 +34,53 @@ public class Person { public String getId() { return id; } + public void setId(String id) { this.id = id; } + public String getFirstName() { return firstName; } + public void setFirstName(String firstName) { this.firstName = firstName; } + public String getLastName() { return lastName; } + public void setLastName(String lastName) { this.lastName = lastName; } + public DateTime getCreated() { return created; } + public void setCreated(DateTime created) { this.created = created; } + public DateTime getUpdated() { return updated; } + public void setUpdated(DateTime updated) { this.updated = updated; } - + @Override public int hashCode() { int hash = 1; - if(id != null) { + if (id != null) { hash = hash * 31 + id.hashCode(); } - if(firstName != null) { + if (firstName != null) { hash = hash * 31 + firstName.hashCode(); } - if(lastName != null) { + if (lastName != null) { hash = hash * 31 + lastName.hashCode(); } return hash; @@ -79,8 +88,10 @@ public class Person { @Override public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; + if ((obj == null) || (obj.getClass() != this.getClass())) + return false; + if (obj == this) + return true; Person other = (Person) obj; return this.hashCode() == other.hashCode(); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java index 9c266c2c62..726ed2347e 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java @@ -20,13 +20,13 @@ public class Student { private String id; @Field @NotNull - @Size(min=1, max=20) - @Pattern(regexp=NAME_REGEX) + @Size(min = 1, max = 20) + @Pattern(regexp = NAME_REGEX) private String firstName; @Field @NotNull - @Size(min=1, max=20) - @Pattern(regexp=NAME_REGEX) + @Size(min = 1, max = 20) + @Pattern(regexp = NAME_REGEX) private String lastName; @Field @Past @@ -38,8 +38,9 @@ public class Student { private DateTime updated; @Version private long version; - - public Student() {} + + public Student() { + } public Student(String id, String firstName, String lastName, DateTime dateOfBirth) { this.id = id; @@ -51,36 +52,47 @@ public class Student { public String getId() { return id; } + public void setId(String id) { this.id = id; } + public String getFirstName() { return firstName; } + public void setFirstName(String firstName) { this.firstName = firstName; } + public String getLastName() { return lastName; } + public void setLastName(String lastName) { this.lastName = lastName; } + public DateTime getDateOfBirth() { return dateOfBirth; } + public void setDateOfBirth(DateTime dateOfBirth) { this.dateOfBirth = dateOfBirth; } + public DateTime getCreated() { return created; } + public void setCreated(DateTime created) { this.created = created; } + public DateTime getUpdated() { return updated; } + public void setUpdated(DateTime updated) { this.updated = updated; } @@ -88,16 +100,16 @@ public class Student { @Override public int hashCode() { int hash = 1; - if(id != null) { + if (id != null) { hash = hash * 31 + id.hashCode(); } - if(firstName != null) { + if (firstName != null) { hash = hash * 31 + firstName.hashCode(); } - if(lastName != null) { + if (lastName != null) { hash = hash * 31 + lastName.hashCode(); } - if(dateOfBirth != null) { + if (dateOfBirth != null) { hash = hash * 31 + dateOfBirth.hashCode(); } return hash; @@ -105,8 +117,10 @@ public class Student { @Override public boolean equals(Object obj) { - if((obj == null) || (obj.getClass() != this.getClass())) return false; - if(obj == this) return true; + if ((obj == null) || (obj.getClass() != this.getClass())) + return false; + if (obj == this) + return true; Student other = (Student) obj; return this.hashCode() == other.hashCode(); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java index 66b672a4fd..751895502c 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java @@ -17,9 +17,6 @@ public class CustomStudentRepositoryImpl implements CustomStudentRepository { private CouchbaseTemplate template; public List findByFirstNameStartsWith(String s) { - return template.findByView(ViewQuery.from(DESIGN_DOC, "byFirstName") - .startKey(s) - .stale(Stale.FALSE), - Student.class); + return template.findByView(ViewQuery.from(DESIGN_DOC, "byFirstName").startKey(s).stale(Stale.FALSE), Student.class); } } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java index 14b77759e3..717feb858f 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java @@ -7,5 +7,6 @@ import org.springframework.data.repository.CrudRepository; public interface PersonRepository extends CrudRepository { List findByFirstName(String firstName); + List findByLastName(String lastName); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java index 331ddc553d..9bbdeec642 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java @@ -7,5 +7,6 @@ import org.springframework.data.repository.CrudRepository; public interface StudentRepository extends CrudRepository, CustomStudentRepository { List findByFirstName(String firstName); + List findByLastName(String lastName); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java index 90cc36780a..49548bdbfb 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java @@ -14,8 +14,9 @@ import org.springframework.stereotype.Service; @Service @Qualifier("PersonRepositoryService") public class PersonRepositoryService implements PersonService { - + private PersonRepository repo; + @Autowired public void setPersonRepository(PersonRepository repo) { this.repo = repo; @@ -28,7 +29,7 @@ public class PersonRepositoryService implements PersonService { public List findAll() { List people = new ArrayList(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { people.add(it.next()); } return people; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java index 45e9b90a19..8398847f65 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/PersonTemplateService.java @@ -14,17 +14,18 @@ import com.couchbase.client.java.view.ViewQuery; @Service @Qualifier("PersonTemplateService") public class PersonTemplateService implements PersonService { - + private static final String DESIGN_DOC = "person"; private CouchbaseTemplate template; + @Autowired public void setCouchbaseTemplate(CouchbaseTemplate template) { this.template = template; } - public Person findOne(String id) { - return template.findById(id, Person.class); + public Person findOne(String id) { + return template.findById(id, Person.class); } public List findAll() { diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java index 58304afc1c..65f5a6e78e 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java @@ -14,8 +14,9 @@ import org.springframework.stereotype.Service; @Service @Qualifier("StudentRepositoryService") public class StudentRepositoryService implements StudentService { - + private StudentRepository repo; + @Autowired public void setStudentRepository(StudentRepository repo) { this.repo = repo; @@ -28,7 +29,7 @@ public class StudentRepositoryService implements StudentService { public List findAll() { List people = new ArrayList(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { people.add(it.next()); } return people; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java index c3808e0015..8d1292b5e4 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java @@ -14,17 +14,18 @@ import com.couchbase.client.java.view.ViewQuery; @Service @Qualifier("StudentTemplateService") public class StudentTemplateService implements StudentService { - + private static final String DESIGN_DOC = "student"; private CouchbaseTemplate template; + @Autowired public void setCouchbaseTemplate(CouchbaseTemplate template) { this.template = template; } - public Student findOne(String id) { - return template.findById(id, Student.class); + public Student findOne(String id) { + return template.findById(id, Student.class); } public List findAll() { diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java index 2cf388f518..b1857222c5 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/CampusRepository.java @@ -11,9 +11,9 @@ import org.springframework.data.repository.CrudRepository; public interface CampusRepository extends CrudRepository { - @View(designDocument="campus", viewName="byName") + @View(designDocument = "campus", viewName = "byName") Set findByName(String name); - @Dimensional(dimensions=2, designDocument="campus_spatial", spatialViewName="byLocation") + @Dimensional(dimensions = 2, designDocument = "campus_spatial", spatialViewName = "byLocation") Set findByLocationNear(Point point, Distance distance); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java index e441bec6e4..ef37106c6d 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/PersonRepository.java @@ -7,5 +7,6 @@ import org.springframework.data.repository.CrudRepository; public interface PersonRepository extends CrudRepository { List findByFirstName(String firstName); + List findByLastName(String lastName); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java index 2a960d37de..0d790d2f39 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/repos/StudentRepository.java @@ -7,5 +7,6 @@ import org.springframework.data.repository.CrudRepository; public interface StudentRepository extends CrudRepository { List findByFirstName(String firstName); + List findByLastName(String lastName); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java index d098c39011..58f00dda25 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusService.java @@ -7,14 +7,14 @@ import org.springframework.data.geo.Distance; import org.springframework.data.geo.Point; public interface CampusService { - + Campus find(String id); Set findByName(String name); Set findByLocationNear(Point point, Distance distance); - + Set findAll(); - + void save(Campus campus); } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java index 612774fec9..586f5f0dc1 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImpl.java @@ -15,21 +15,22 @@ import org.springframework.stereotype.Service; public class CampusServiceImpl implements CampusService { private CampusRepository repo; + @Autowired public void setCampusRepository(CampusRepository repo) { this.repo = repo; } - + @Override public Campus find(String id) { return repo.findOne(id); } - + @Override public Set findByName(String name) { return repo.findByName(name); } - + @Override public Set findByLocationNear(Point point, Distance distance) { return repo.findByLocationNear(point, distance); @@ -39,7 +40,7 @@ public class CampusServiceImpl implements CampusService { public Set findAll() { Set campuses = new HashSet<>(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { campuses.add(it.next()); } return campuses; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java index f1ff513bff..fe0a9e48cd 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImpl.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; public class PersonServiceImpl implements PersonService { private PersonRepository repo; + @Autowired public void setPersonRepository(PersonRepository repo) { this.repo = repo; @@ -26,7 +27,7 @@ public class PersonServiceImpl implements PersonService { public List findAll() { List people = new ArrayList(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { people.add(it.next()); } return people; diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java index 65400636cf..248d824081 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImpl.java @@ -14,6 +14,7 @@ import org.springframework.stereotype.Service; public class StudentServiceImpl implements StudentService { private StudentRepository repo; + @Autowired public void setStudentRepository(StudentRepository repo) { this.repo = repo; @@ -26,7 +27,7 @@ public class StudentServiceImpl implements StudentService { public List findAll() { List people = new ArrayList(); Iterator it = repo.findAll().iterator(); - while(it.hasNext()) { + while (it.hasNext()) { people.add(it.next()); } return people; diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java index 8e6b971dbf..a37e918101 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java @@ -12,9 +12,9 @@ import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepos import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @Configuration -@EnableCouchbaseRepositories(basePackages={"org.baeldung.spring.data.couchbase"}) +@EnableCouchbaseRepositories(basePackages = { "org.baeldung.spring.data.couchbase" }) public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration { - + public static final List NODE_LIST = Arrays.asList("localhost"); public static final String BUCKET_NAME = "baeldung"; public static final String BUCKET_PASSWORD = ""; diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java index 79948cbedf..0bf2c5d673 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java @@ -30,27 +30,17 @@ public abstract class StudentServiceTest extends IntegrationTest { static final String joeCollegeId = "student:" + joe + ":" + college; static final DateTime joeCollegeDob = DateTime.now().minusYears(21); static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); - static final JsonObject jsonJoeCollege = JsonObject.empty() - .put(typeField, Student.class.getName()) - .put("firstName", joe) - .put("lastName", college) - .put("created", DateTime.now().getMillis()) - .put("version", 1); + static final JsonObject jsonJoeCollege = JsonObject.empty().put(typeField, Student.class.getName()).put("firstName", joe).put("lastName", college).put("created", DateTime.now().getMillis()).put("version", 1); static final String judy = "Judy"; static final String jetson = "Jetson"; static final String judyJetsonId = "student:" + judy + ":" + jetson; static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); - static final JsonObject jsonJudyJetson = JsonObject.empty() - .put(typeField, Student.class.getName()) - .put("firstName", judy) - .put("lastName", jetson) - .put("created", DateTime.now().getMillis()) - .put("version", 1); - + static final JsonObject jsonJudyJetson = JsonObject.empty().put(typeField, Student.class.getName()).put("firstName", judy).put("lastName", jetson).put("created", DateTime.now().getMillis()).put("version", 1); + StudentService studentService; - + @BeforeClass public static void setupBeforeClass() { Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); @@ -60,7 +50,7 @@ public abstract class StudentServiceTest extends IntegrationTest { bucket.close(); cluster.disconnect(); } - + @Test public void whenCreatingStudent_thenDocumentIsPersisted() { String firstName = "Eric"; @@ -75,7 +65,7 @@ public abstract class StudentServiceTest extends IntegrationTest { assertEquals(expectedStudent.getId(), actualStudent.getId()); } - @Test(expected=ConstraintViolationException.class) + @Test(expected = ConstraintViolationException.class) public void whenCreatingStudentWithInvalidFirstName_thenConstraintViolationException() { String firstName = "Er+ic"; String lastName = "Stratton"; @@ -85,7 +75,7 @@ public abstract class StudentServiceTest extends IntegrationTest { studentService.create(student); } - @Test(expected=ConstraintViolationException.class) + @Test(expected = ConstraintViolationException.class) public void whenCreatingStudentWithFutureDob_thenConstraintViolationException() { String firstName = "Jane"; String lastName = "Doe"; @@ -130,11 +120,11 @@ public abstract class StudentServiceTest extends IntegrationTest { assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - + private boolean resultContains(List resultList, Student student) { boolean found = false; - for(Student p : resultList) { - if(p.getId().equals(student.getId())) { + for (Student p : resultList) { + if (p.getId().equals(student.getId())) { found = true; break; } @@ -144,8 +134,8 @@ public abstract class StudentServiceTest extends IntegrationTest { private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { boolean found = false; - for(Student p : resultList) { - if(p.getFirstName().equals(firstName)) { + for (Student p : resultList) { + if (p.getFirstName().equals(firstName)) { found = true; break; } @@ -155,8 +145,8 @@ public abstract class StudentServiceTest extends IntegrationTest { private boolean allResultsContainExpectedLastName(List resultList, String lastName) { boolean found = false; - for(Student p : resultList) { - if(p.getLastName().equals(lastName)) { + for (Student p : resultList) { + if (p.getLastName().equals(lastName)) { found = true; break; } diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java index f419ba3499..fe32305feb 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/MultiBucketCouchbaseConfig.java @@ -38,29 +38,25 @@ public class MultiBucketCouchbaseConfig extends AbstractCouchbaseConfiguration { protected String getBucketPassword() { return DEFAULT_BUCKET_PASSWORD; } - + @Bean public Bucket campusBucket() throws Exception { return couchbaseCluster().openBucket("baeldung2", ""); } - + @Bean(name = "campusTemplate") public CouchbaseTemplate campusTemplate() throws Exception { - CouchbaseTemplate template = new CouchbaseTemplate( - couchbaseClusterInfo(), - campusBucket(), - mappingCouchbaseConverter(), - translationService()); + CouchbaseTemplate template = new CouchbaseTemplate(couchbaseClusterInfo(), campusBucket(), mappingCouchbaseConverter(), translationService()); template.setDefaultConsistency(getDefaultConsistency()); return template; } - + @Override public void configureRepositoryOperationsMapping(RepositoryOperationsMapping baseMapping) { try { baseMapping.mapEntity(Campus.class, campusTemplate()); } catch (Exception e) { - //custom Exception handling + // custom Exception handling } } diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java index 7e24952e32..d3982e1ecc 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java @@ -19,61 +19,29 @@ import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; public class CampusServiceImplTest extends MultiBucketIntegationTest { - + @Autowired private CampusServiceImpl campusService; - + @Autowired private CampusRepository campusRepo; - - private final Campus Brown = Campus.Builder.newInstance() - .id("campus:Brown") - .name("Brown") - .location(new Point(71.4025, 51.8268)) - .build(); - private final Campus Cornell = Campus.Builder.newInstance() - .id("campus:Cornell") - .name("Cornell") - .location(new Point(76.4833, 42.4459)) - .build(); - - private final Campus Columbia = Campus.Builder.newInstance() - .id("campus:Columbia") - .name("Columbia") - .location(new Point(73.9626, 40.8075)) - .build(); - - private final Campus Dartmouth = Campus.Builder.newInstance() - .id("campus:Dartmouth") - .name("Dartmouth") - .location(new Point(72.2887, 43.7044)) - .build(); + private final Campus Brown = Campus.Builder.newInstance().id("campus:Brown").name("Brown").location(new Point(71.4025, 51.8268)).build(); - private final Campus Harvard = Campus.Builder.newInstance() - .id("campus:Harvard") - .name("Harvard") - .location(new Point(71.1167, 42.3770)) - .build(); + private final Campus Cornell = Campus.Builder.newInstance().id("campus:Cornell").name("Cornell").location(new Point(76.4833, 42.4459)).build(); - private final Campus Penn = Campus.Builder.newInstance() - .id("campus:Penn") - .name("Penn") - .location(new Point(75.1932, 39.9522)) - .build(); + private final Campus Columbia = Campus.Builder.newInstance().id("campus:Columbia").name("Columbia").location(new Point(73.9626, 40.8075)).build(); + + private final Campus Dartmouth = Campus.Builder.newInstance().id("campus:Dartmouth").name("Dartmouth").location(new Point(72.2887, 43.7044)).build(); + + private final Campus Harvard = Campus.Builder.newInstance().id("campus:Harvard").name("Harvard").location(new Point(71.1167, 42.3770)).build(); + + private final Campus Penn = Campus.Builder.newInstance().id("campus:Penn").name("Penn").location(new Point(75.1932, 39.9522)).build(); + + private final Campus Princeton = Campus.Builder.newInstance().id("campus:Princeton").name("Princeton").location(new Point(74.6514, 40.3340)).build(); + + private final Campus Yale = Campus.Builder.newInstance().id("campus:Yale").name("Yale").location(new Point(72.9223, 41.3163)).build(); - private final Campus Princeton = Campus.Builder.newInstance() - .id("campus:Princeton") - .name("Princeton") - .location(new Point(74.6514, 40.3340)) - .build(); - - private final Campus Yale = Campus.Builder.newInstance() - .id("campus:Yale") - .name("Yale") - .location(new Point(72.9223, 41.3163)) - .build(); - private final Point Boston = new Point(71.0589, 42.3601); private final Point NewYorkCity = new Point(74.0059, 40.7128); @@ -88,7 +56,7 @@ public class CampusServiceImplTest extends MultiBucketIntegationTest { campusRepo.save(Princeton); campusRepo.save(Yale); } - + @Test public final void givenNameHarvard_whenFindByName_thenReturnsHarvard() throws Exception { Set campuses = campusService.findByName(Harvard.getName()); @@ -97,14 +65,14 @@ public class CampusServiceImplTest extends MultiBucketIntegationTest { assertTrue(campuses.size() == 1); assertTrue(campuses.contains(Harvard)); } - + @Test public final void givenHarvardId_whenFind_thenReturnsHarvard() throws Exception { Campus actual = campusService.find(Harvard.getId()); assertNotNull(actual); assertEquals(Harvard, actual); } - + @Test public final void whenFindAll_thenReturnsAll() throws Exception { Set campuses = campusService.findAll(); @@ -125,7 +93,7 @@ public class CampusServiceImplTest extends MultiBucketIntegationTest { assertTrue(campuses.contains(Harvard)); assertFalse(campuses.contains(Columbia)); } - + @Test public final void whenFindByLocationNearNewYorkCity_thenResultContainsColumbia() throws Exception { Set campuses = campusService.findByLocationNear(NewYorkCity, new Distance(1, Metrics.NEUTRAL)); diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java index 220c2c3b00..c503726377 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java @@ -31,28 +31,18 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { static final String joeCollegeId = "student:" + joe + ":" + college; static final DateTime joeCollegeDob = DateTime.now().minusYears(21); static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); - static final JsonObject jsonJoeCollege = JsonObject.empty() - .put(typeField, Student.class.getName()) - .put("firstName", joe) - .put("lastName", college) - .put("created", DateTime.now().getMillis()) - .put("version", 1); + static final JsonObject jsonJoeCollege = JsonObject.empty().put(typeField, Student.class.getName()).put("firstName", joe).put("lastName", college).put("created", DateTime.now().getMillis()).put("version", 1); static final String judy = "Judy"; static final String jetson = "Jetson"; static final String judyJetsonId = "student:" + judy + ":" + jetson; static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); - static final JsonObject jsonJudyJetson = JsonObject.empty() - .put(typeField, Student.class.getName()) - .put("firstName", judy) - .put("lastName", jetson) - .put("created", DateTime.now().getMillis()) - .put("version", 1); - + static final JsonObject jsonJudyJetson = JsonObject.empty().put(typeField, Student.class.getName()).put("firstName", judy).put("lastName", jetson).put("created", DateTime.now().getMillis()).put("version", 1); + @Autowired StudentServiceImpl studentService; - + @BeforeClass public static void setupBeforeClass() { Cluster cluster = CouchbaseCluster.create(MultiBucketCouchbaseConfig.NODE_LIST); @@ -62,7 +52,7 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { bucket.close(); cluster.disconnect(); } - + @Test public void whenCreatingStudent_thenDocumentIsPersisted() { String firstName = "Eric"; @@ -77,7 +67,7 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { assertEquals(expectedStudent.getId(), actualStudent.getId()); } - @Test(expected=ConstraintViolationException.class) + @Test(expected = ConstraintViolationException.class) public void whenCreatingStudentWithInvalidFirstName_thenConstraintViolationException() { String firstName = "Er+ic"; String lastName = "Stratton"; @@ -87,7 +77,7 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { studentService.create(student); } - @Test(expected=ConstraintViolationException.class) + @Test(expected = ConstraintViolationException.class) public void whenCreatingStudentWithFutureDob_thenConstraintViolationException() { String firstName = "Jane"; String lastName = "Doe"; @@ -132,11 +122,11 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - + private boolean resultContains(List resultList, Student student) { boolean found = false; - for(Student p : resultList) { - if(p.getId().equals(student.getId())) { + for (Student p : resultList) { + if (p.getId().equals(student.getId())) { found = true; break; } @@ -146,8 +136,8 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { boolean found = false; - for(Student p : resultList) { - if(p.getFirstName().equals(firstName)) { + for (Student p : resultList) { + if (p.getFirstName().equals(firstName)) { found = true; break; } @@ -157,8 +147,8 @@ public class StudentServiceImplTest extends MultiBucketIntegationTest { private boolean allResultsContainExpectedLastName(List resultList, String lastName) { boolean found = false; - for(Student p : resultList) { - if(p.getLastName().equals(lastName)) { + for (Student p : resultList) { + if (p.getLastName().equals(lastName)) { found = true; break; } diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java b/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java index db304ee78d..4ab5d40788 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/elasticsearch/ElasticSearchUnitTests.java @@ -43,8 +43,7 @@ public class ElasticSearchUnitTests { @Test public void givenJsonString_whenJavaObject_thenIndexDocument() { String jsonObject = "{\"age\":20,\"dateOfBirth\":1471466076564,\"fullName\":\"John Doe\"}"; - IndexResponse response = client.prepareIndex("people", "Doe") - .setSource(jsonObject).get(); + IndexResponse response = client.prepareIndex("people", "Doe").setSource(jsonObject).get(); String index = response.getIndex(); String type = response.getType(); assertTrue(response.isCreated()); @@ -55,8 +54,7 @@ public class ElasticSearchUnitTests { @Test public void givenDocumentId_whenJavaObject_thenDeleteDocument() { String jsonObject = "{\"age\":10,\"dateOfBirth\":1471455886564,\"fullName\":\"Johan Doe\"}"; - IndexResponse response = client.prepareIndex("people", "Doe") - .setSource(jsonObject).get(); + IndexResponse response = client.prepareIndex("people", "Doe").setSource(jsonObject).get(); String id = response.getId(); DeleteResponse deleteResponse = client.prepareDelete("people", "Doe", id).get(); assertTrue(deleteResponse.isFound()); @@ -77,29 +75,11 @@ public class ElasticSearchUnitTests { @Test public void givenSearchParamters_thenReturnResults() { boolean isExecutedSuccessfully = true; - SearchResponse response = client.prepareSearch() - .setTypes() - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setPostFilter(QueryBuilders.rangeQuery("age").from(5).to(15)) - .setFrom(0).setSize(60).setExplain(true) - .execute() - .actionGet(); + SearchResponse response = client.prepareSearch().setTypes().setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setPostFilter(QueryBuilders.rangeQuery("age").from(5).to(15)).setFrom(0).setSize(60).setExplain(true).execute().actionGet(); - SearchResponse response2 = client.prepareSearch() - .setTypes() - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setPostFilter(QueryBuilders.simpleQueryStringQuery("+John -Doe OR Janette")) - .setFrom(0).setSize(60).setExplain(true) - .execute() - .actionGet(); + SearchResponse response2 = client.prepareSearch().setTypes().setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setPostFilter(QueryBuilders.simpleQueryStringQuery("+John -Doe OR Janette")).setFrom(0).setSize(60).setExplain(true).execute().actionGet(); - SearchResponse response3 = client.prepareSearch() - .setTypes() - .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) - .setPostFilter(QueryBuilders.matchQuery("John", "Name*")) - .setFrom(0).setSize(60).setExplain(true) - .execute() - .actionGet(); + SearchResponse response3 = client.prepareSearch().setTypes().setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setPostFilter(QueryBuilders.matchQuery("John", "Name*")).setFrom(0).setSize(60).setExplain(true).execute().actionGet(); try { response2.getHits(); response3.getHits(); @@ -114,14 +94,8 @@ public class ElasticSearchUnitTests { @Test public void givenContentBuilder_whenHelpers_thanIndexJson() throws IOException { - XContentBuilder builder = XContentFactory.jsonBuilder() - .startObject() - .field("fullName", "Test") - .field("salary", "11500") - .field("age", "10") - .endObject(); - IndexResponse response = client.prepareIndex("people", "Doe") - .setSource(builder).get(); + XContentBuilder builder = XContentFactory.jsonBuilder().startObject().field("fullName", "Test").field("salary", "11500").field("age", "10").endObject(); + IndexResponse response = client.prepareIndex("people", "Doe").setSource(builder).get(); assertTrue(response.isCreated()); } } diff --git a/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java b/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java index 06ad21647b..bb4b268ca7 100644 --- a/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java +++ b/spring-data-mongodb/src/test/java/org/baeldung/gridfs/GridFSIntegrationTest.java @@ -140,7 +140,7 @@ public class GridFSIntegrationTest { assertNotNull(gridFSDBFiles); assertThat(gridFSDBFiles.size(), is(2)); } - + @Test public void givenMetadataAndFilesExist_whenFindingAllFilesOnQuery_thenFilesWithMetadataAreFoundOnQuery() { DBObject metaDataUser1 = new BasicDBObject(); diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java index ac9a7260be..fb4fda1497 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java @@ -9,8 +9,7 @@ import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; - -@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"}) +@ComponentScan(basePackages = { "com.baeldung.spring.data.neo4j.services" }) @Configuration @EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") public class MovieDatabaseNeo4jConfiguration extends Neo4jConfiguration { @@ -20,10 +19,7 @@ public class MovieDatabaseNeo4jConfiguration extends Neo4jConfiguration { @Bean public org.neo4j.ogm.config.Configuration getConfiguration() { org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration(); - config - .driverConfiguration() - .setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver") - .setURI(URL); + config.driverConfiguration().setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver").setURI(URL); return config; } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java index 2b6394184d..81935b2293 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java @@ -10,20 +10,17 @@ import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; import org.springframework.data.neo4j.server.Neo4jServer; import org.springframework.transaction.annotation.EnableTransactionManagement; - @EnableTransactionManagement -@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"}) +@ComponentScan(basePackages = { "com.baeldung.spring.data.neo4j.services" }) @Configuration @EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") -@Profile({"embedded", "test"}) +@Profile({ "embedded", "test" }) public class MovieDatabaseNeo4jTestConfiguration extends Neo4jConfiguration { @Bean public org.neo4j.ogm.config.Configuration getConfiguration() { org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration(); - config - .driverConfiguration() - .setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver"); + config.driverConfiguration().setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver"); return config; } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java index e48dfaf276..029754c0fc 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java @@ -9,7 +9,7 @@ import org.neo4j.ogm.annotation.Relationship; import java.util.Collection; import java.util.List; -@JsonIdentityInfo(generator=JSOGGenerator.class) +@JsonIdentityInfo(generator = JSOGGenerator.class) @NodeEntity public class Movie { @@ -21,9 +21,11 @@ public class Movie { private int released; private String tagline; - @Relationship(type="ACTED_IN", direction = Relationship.INCOMING) private List roles; + @Relationship(type = "ACTED_IN", direction = Relationship.INCOMING) + private List roles; - public Movie() { } + public Movie() { + } public String getTitle() { return title; @@ -56,6 +58,5 @@ public class Movie { public void setRoles(List roles) { this.roles = roles; } - - + } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java index d96dc07530..dc5a850f29 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java @@ -1,6 +1,5 @@ package com.baeldung.spring.data.neo4j.domain; - import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.voodoodyne.jackson.jsog.JSOGGenerator; import org.neo4j.ogm.annotation.GraphId; @@ -9,7 +8,7 @@ import org.neo4j.ogm.annotation.Relationship; import java.util.List; -@JsonIdentityInfo(generator=JSOGGenerator.class) +@JsonIdentityInfo(generator = JSOGGenerator.class) @NodeEntity public class Person { @GraphId @@ -21,7 +20,8 @@ public class Person { @Relationship(type = "ACTED_IN") private List movies; - public Person() { } + public Person() { + } public String getName() { return name; @@ -46,5 +46,5 @@ public class Person { public void setMovies(List movies) { this.movies = movies; } - + } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java index 20512a10ad..40dabb054b 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java @@ -1,6 +1,5 @@ package com.baeldung.spring.data.neo4j.domain; - import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.voodoodyne.jackson.jsog.JSOGGenerator; import org.neo4j.ogm.annotation.EndNode; @@ -10,7 +9,7 @@ import org.neo4j.ogm.annotation.StartNode; import java.util.Collection; -@JsonIdentityInfo(generator=JSOGGenerator.class) +@JsonIdentityInfo(generator = JSOGGenerator.class) @RelationshipEntity(type = "ACTED_IN") public class Role { @GraphId diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java index 850d2336ba..1bd605a7bc 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java @@ -18,7 +18,5 @@ public interface MovieRepository extends GraphRepository { Collection findByTitleContaining(@Param("title") String title); @Query("MATCH (m:Movie)<-[:ACTED_IN]-(a:Person) RETURN m.title as movie, collect(a.name) as cast LIMIT {limit}") - List> graph(@Param("limit") int limit); + List> graph(@Param("limit") int limit); } - - diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java index 4c287f99a4..f7f694c07f 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java @@ -4,8 +4,7 @@ import com.baeldung.spring.data.neo4j.domain.Person; import org.springframework.data.neo4j.repository.GraphRepository; import org.springframework.stereotype.Repository; - @Repository public interface PersonRepository extends GraphRepository { - + } diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java index 532cc79091..d760d19066 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java @@ -15,31 +15,31 @@ public class MovieService { MovieRepository movieRepository; private Map toD3Format(Iterator> result) { - List> nodes = new ArrayList>(); - List> rels= new ArrayList>(); - int i=0; + List> nodes = new ArrayList>(); + List> rels = new ArrayList>(); + int i = 0; while (result.hasNext()) { Map row = result.next(); - nodes.add(map("title",row.get("movie"),"label","movie")); - int target=i; + nodes.add(map("title", row.get("movie"), "label", "movie")); + int target = i; i++; for (Object name : (Collection) row.get("cast")) { - Map actor = map("title", name,"label","actor"); + Map actor = map("title", name, "label", "actor"); int source = nodes.indexOf(actor); if (source == -1) { nodes.add(actor); source = i++; } - rels.add(map("source",source,"target",target)); + rels.add(map("source", source, "target", target)); } } return map("nodes", nodes, "links", rels); } private Map map(String key1, Object value1, String key2, Object value2) { - Map result = new HashMap(2); - result.put(key1,value1); - result.put(key2,value2); + Map result = new HashMap(2); + result.put(key1, value1); + result.put(key2, value2); return result; } diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java index 8061b3c2a7..0e54208c31 100644 --- a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java +++ b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java @@ -82,8 +82,7 @@ public class MovieRepositoryTest { @DirtiesContext public void testFindAll() { System.out.println("findAll"); - Collection result = - (Collection) movieRepository.findAll(); + Collection result = (Collection) movieRepository.findAll(); assertNotNull(result); assertEquals(1, result.size()); } @@ -93,8 +92,7 @@ public class MovieRepositoryTest { public void testFindByTitleContaining() { System.out.println("findByTitleContaining"); String title = "Italian"; - Collection result = - movieRepository.findByTitleContaining(title); + Collection result = movieRepository.findByTitleContaining(title); assertNotNull(result); assertEquals(1, result.size()); } @@ -126,8 +124,7 @@ public class MovieRepositoryTest { public void testDeleteAll() { System.out.println("deleteAll"); movieRepository.deleteAll(); - Collection result = - (Collection) movieRepository.findAll(); + Collection result = (Collection) movieRepository.findAll(); assertEquals(0, result.size()); } } diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java b/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java index 9a42545d6c..4c55fc3179 100644 --- a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java +++ b/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/MessagePublisher.java @@ -1,6 +1,5 @@ package com.baeldung.spring.data.redis.queue; - public interface MessagePublisher { void publish(final String message); diff --git a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java b/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java index f4b3180a37..2a595305bd 100644 --- a/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java +++ b/spring-data-redis/src/main/java/com/baeldung/spring/data/redis/queue/RedisMessagePublisher.java @@ -16,8 +16,7 @@ public class RedisMessagePublisher implements MessagePublisher { public RedisMessagePublisher() { } - public RedisMessagePublisher(final RedisTemplate redisTemplate, - final ChannelTopic topic) { + public RedisMessagePublisher(final RedisTemplate redisTemplate, final ChannelTopic topic) { this.redisTemplate = redisTemplate; this.topic = topic; } diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java index 9c4fd55fa4..64f12e82e9 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java @@ -18,16 +18,16 @@ import javax.sql.DataSource; @ContextConfiguration(classes = { Cause1NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) public class InvalidResourceUsageExceptionTest { - @Autowired - private IFooService fooService; + @Autowired + private IFooService fooService; - @Autowired - private DataSource restDataSource; + @Autowired + private DataSource restDataSource; - @Test(expected = InvalidDataAccessResourceUsageException.class) - public void whenRetrievingDataUserNoSelectRights_thenInvalidResourceUsageException() { - final JdbcTemplate jdbcTemplate = new JdbcTemplate(restDataSource); - jdbcTemplate.execute("revoke select from tutorialuser"); + @Test(expected = InvalidDataAccessResourceUsageException.class) + public void whenRetrievingDataUserNoSelectRights_thenInvalidResourceUsageException() { + final JdbcTemplate jdbcTemplate = new JdbcTemplate(restDataSource); + jdbcTemplate.execute("revoke select from tutorialuser"); try { fooService.findAll(); @@ -36,11 +36,11 @@ public class InvalidResourceUsageExceptionTest { } } - @Test(expected = BadSqlGrammarException.class) - public void whenIncorrectSql_thenBadSqlGrammarException() { - final JdbcTemplate jdbcTemplate = new JdbcTemplate(restDataSource); + @Test(expected = BadSqlGrammarException.class) + public void whenIncorrectSql_thenBadSqlGrammarException() { + final JdbcTemplate jdbcTemplate = new JdbcTemplate(restDataSource); - jdbcTemplate.queryForObject("select * fro foo where id=3", Integer.class); - } + jdbcTemplate.queryForObject("select * fro foo where id=3", Integer.class); + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java index b8b012c061..957207b7e6 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/model/Item.java @@ -4,78 +4,78 @@ import java.io.Serializable; public class Item implements Serializable { - private static final long serialVersionUID = 1L; - private Integer itemId; - private String itemName; - private String itemDescription; - private Integer itemPrice; + private static final long serialVersionUID = 1L; + private Integer itemId; + private String itemName; + private String itemDescription; + private Integer itemPrice; - // constructors - public Item() { + // constructors + public Item() { - } + } - public Item(final Integer itemId, final String itemName, final String itemDescription) { - super(); - this.itemId = itemId; - this.itemName = itemName; - this.itemDescription = itemDescription; - } + public Item(final Integer itemId, final String itemName, final String itemDescription) { + super(); + this.itemId = itemId; + this.itemName = itemName; + this.itemDescription = itemDescription; + } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((itemId == null) ? 0 : itemId.hashCode()); - return result; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((itemId == null) ? 0 : itemId.hashCode()); + return result; + } - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final Item other = (Item) obj; - if (itemId == null) { - if (other.itemId != null) - return false; - } else if (!itemId.equals(other.itemId)) - return false; - return true; - } + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Item other = (Item) obj; + if (itemId == null) { + if (other.itemId != null) + return false; + } else if (!itemId.equals(other.itemId)) + return false; + return true; + } - public Integer getItemId() { - return itemId; - } + public Integer getItemId() { + return itemId; + } - public void setItemId(final Integer itemId) { - this.itemId = itemId; - } + public void setItemId(final Integer itemId) { + this.itemId = itemId; + } - public String getItemName() { - return itemName; - } + public String getItemName() { + return itemName; + } - public void setItemName(final String itemName) { - this.itemName = itemName; - } + public void setItemName(final String itemName) { + this.itemName = itemName; + } - public String getItemDescription() { - return itemDescription; - } + public String getItemDescription() { + return itemDescription; + } - public Integer getItemPrice() { - return itemPrice; - } + public Integer getItemPrice() { + return itemPrice; + } - public void setItemPrice(final Integer itemPrice) { - this.itemPrice = itemPrice; - } + public void setItemPrice(final Integer itemPrice) { + this.itemPrice = itemPrice; + } - public void setItemDescription(final String itemDescription) { - this.itemDescription = itemDescription; - } + public void setItemDescription(final String itemDescription) { + this.itemDescription = itemDescription; + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/util/HibernateUtil.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/util/HibernateUtil.java index 57f32cfe50..ff9ccb017b 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/util/HibernateUtil.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/util/HibernateUtil.java @@ -5,16 +5,15 @@ import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { - + @SuppressWarnings("deprecation") public static Session getHibernateSession() { - final SessionFactory sf = new Configuration() - .configure("criteria.cfg.xml").buildSessionFactory(); + final SessionFactory sf = new Configuration().configure("criteria.cfg.xml").buildSessionFactory(); - // factory = new Configuration().configure().buildSessionFactory(); - final Session session = sf.openSession(); - return session; + // factory = new Configuration().configure().buildSessionFactory(); + final Session session = sf.openSession(); + return session; } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/view/ApplicationView.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/view/ApplicationView.java index 4db94f2ad7..83e3c2f9a5 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/view/ApplicationView.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/criteria/view/ApplicationView.java @@ -26,228 +26,226 @@ import com.baeldung.hibernate.criteria.util.HibernateUtil; public class ApplicationView { - // default Constructor - public ApplicationView() { + // default Constructor + public ApplicationView() { - } + } - public boolean checkIfCriteriaTimeLower() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - Transaction tx = null; - - // calculate the time taken by criteria - final long startTimeCriteria = System.nanoTime(); - cr.add(Restrictions.like("itemName", "%item One%")); - final List results = cr.list(); - final long endTimeCriteria = System.nanoTime(); - final long durationCriteria = (endTimeCriteria - startTimeCriteria) / 1000; + public boolean checkIfCriteriaTimeLower() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + Transaction tx = null; - // calculate the time taken by HQL - final long startTimeHQL = System.nanoTime(); - tx = session.beginTransaction(); - final List items = session.createQuery("FROM Item where itemName like '%item One%'").list(); - final long endTimeHQL = System.nanoTime(); - final long durationHQL = (endTimeHQL - startTimeHQL) / 1000; + // calculate the time taken by criteria + final long startTimeCriteria = System.nanoTime(); + cr.add(Restrictions.like("itemName", "%item One%")); + final List results = cr.list(); + final long endTimeCriteria = System.nanoTime(); + final long durationCriteria = (endTimeCriteria - startTimeCriteria) / 1000; - if (durationCriteria > durationHQL) { - return false; - } else { - return true; - } - } + // calculate the time taken by HQL + final long startTimeHQL = System.nanoTime(); + tx = session.beginTransaction(); + final List items = session.createQuery("FROM Item where itemName like '%item One%'").list(); + final long endTimeHQL = System.nanoTime(); + final long durationHQL = (endTimeHQL - startTimeHQL) / 1000; - // To get items having price more than 1000 - public String[] greaterThanCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.gt("itemPrice", 1000)); - final List greaterThanItemsList = cr.list(); - final String greaterThanItems[] = new String[greaterThanItemsList.size()]; - for (int i = 0; i < greaterThanItemsList.size(); i++) { - greaterThanItems[i] = greaterThanItemsList.get(i).getItemName(); - } - session.close(); - return greaterThanItems; - } + if (durationCriteria > durationHQL) { + return false; + } else { + return true; + } + } - // To get items having price less than 1000 - public String[] lessThanCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.lt("itemPrice", 1000)); - final List lessThanItemsList = cr.list(); - final String lessThanItems[] = new String[lessThanItemsList.size()]; - for (int i = 0; i < lessThanItemsList.size(); i++) { - lessThanItems[i] = lessThanItemsList.get(i).getItemName(); - } - session.close(); - return lessThanItems; - } + // To get items having price more than 1000 + public String[] greaterThanCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.gt("itemPrice", 1000)); + final List greaterThanItemsList = cr.list(); + final String greaterThanItems[] = new String[greaterThanItemsList.size()]; + for (int i = 0; i < greaterThanItemsList.size(); i++) { + greaterThanItems[i] = greaterThanItemsList.get(i).getItemName(); + } + session.close(); + return greaterThanItems; + } - // To get items whose Name start with Chair - public String[] likeCriteria() { - final Session session = HibernateUtil.getHibernateSession(); + // To get items having price less than 1000 + public String[] lessThanCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.lt("itemPrice", 1000)); + final List lessThanItemsList = cr.list(); + final String lessThanItems[] = new String[lessThanItemsList.size()]; + for (int i = 0; i < lessThanItemsList.size(); i++) { + lessThanItems[i] = lessThanItemsList.get(i).getItemName(); + } + session.close(); + return lessThanItems; + } - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.like("itemName", "%chair%")); - final List likeItemsList = cr.list(); - final String likeItems[] = new String[likeItemsList.size()]; - for (int i = 0; i < likeItemsList.size(); i++) { - likeItems[i] = likeItemsList.get(i).getItemName(); - } - session.close(); - return likeItems; - } + // To get items whose Name start with Chair + public String[] likeCriteria() { + final Session session = HibernateUtil.getHibernateSession(); - // Case sensitive search - public String[] likeCaseCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.ilike("itemName", "%Chair%")); - final List ilikeItemsList = cr.list(); - final String ilikeItems[] = new String[ilikeItemsList.size()]; - for (int i = 0; i < ilikeItemsList.size(); i++) { - ilikeItems[i] = ilikeItemsList.get(i).getItemName(); - } - session.close(); - return ilikeItems; - } + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.like("itemName", "%chair%")); + final List likeItemsList = cr.list(); + final String likeItems[] = new String[likeItemsList.size()]; + for (int i = 0; i < likeItemsList.size(); i++) { + likeItems[i] = likeItemsList.get(i).getItemName(); + } + session.close(); + return likeItems; + } - // To get records having itemPrice in between 100 and 200 - public String[] betweenCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - // To get items having price more than 1000 - cr.add(Restrictions.between("itemPrice", 100, 200)); - final List betweenItemsList = cr.list(); - final String betweenItems[] = new String[betweenItemsList.size()]; - for (int i = 0; i < betweenItemsList.size(); i++) { - betweenItems[i] = betweenItemsList.get(i).getItemName(); - } - session.close(); - return betweenItems; - } + // Case sensitive search + public String[] likeCaseCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.ilike("itemName", "%Chair%")); + final List ilikeItemsList = cr.list(); + final String ilikeItems[] = new String[ilikeItemsList.size()]; + for (int i = 0; i < ilikeItemsList.size(); i++) { + ilikeItems[i] = ilikeItemsList.get(i).getItemName(); + } + session.close(); + return ilikeItems; + } - // To check if the given property is null - public String[] nullCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.isNull("itemDescription")); - final List nullItemsList = cr.list(); - final String nullDescItems[] = new String[nullItemsList.size()]; - for (int i = 0; i < nullItemsList.size(); i++) { - nullDescItems[i] = nullItemsList.get(i).getItemName(); - } - session.close(); - return nullDescItems; - } + // To get records having itemPrice in between 100 and 200 + public String[] betweenCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + // To get items having price more than 1000 + cr.add(Restrictions.between("itemPrice", 100, 200)); + final List betweenItemsList = cr.list(); + final String betweenItems[] = new String[betweenItemsList.size()]; + for (int i = 0; i < betweenItemsList.size(); i++) { + betweenItems[i] = betweenItemsList.get(i).getItemName(); + } + session.close(); + return betweenItems; + } - // To check if the given property is not null - public String[] notNullCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.isNotNull("itemDescription")); - final List notNullItemsList = cr.list(); - final String notNullDescItems[] = new String[notNullItemsList.size()]; - for (int i = 0; i < notNullItemsList.size(); i++) { - notNullDescItems[i] = notNullItemsList.get(i).getItemName(); - } - session.close(); - return notNullDescItems; - } + // To check if the given property is null + public String[] nullCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.isNull("itemDescription")); + final List nullItemsList = cr.list(); + final String nullDescItems[] = new String[nullItemsList.size()]; + for (int i = 0; i < nullItemsList.size(); i++) { + nullDescItems[i] = nullItemsList.get(i).getItemName(); + } + session.close(); + return nullDescItems; + } - // Adding more than one expression in one cr - public String[] twoCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.add(Restrictions.isNull("itemDescription")); - cr.add(Restrictions.like("itemName", "chair%")); - final List notNullItemsList = cr.list(); - final String notNullDescItems[] = new String[notNullItemsList.size()]; - for (int i = 0; i < notNullItemsList.size(); i++) { - notNullDescItems[i] = notNullItemsList.get(i).getItemName(); - } - session.close(); - return notNullDescItems; - } + // To check if the given property is not null + public String[] notNullCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.isNotNull("itemDescription")); + final List notNullItemsList = cr.list(); + final String notNullDescItems[] = new String[notNullItemsList.size()]; + for (int i = 0; i < notNullItemsList.size(); i++) { + notNullDescItems[i] = notNullItemsList.get(i).getItemName(); + } + session.close(); + return notNullDescItems; + } - // To get items matching with the above defined conditions joined - // with Logical AND - public String[] andLogicalCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000); - final Criterion chairItems = Restrictions.like("itemName", "Chair%"); - final LogicalExpression andExample = Restrictions.and(greaterThanPrice, chairItems); - cr.add(andExample); - final List andItemsList = cr.list(); - final String andItems[] = new String[andItemsList.size()]; - for (int i = 0; i < andItemsList.size(); i++) { - andItems[i] = andItemsList.get(i).getItemName(); - } - session.close(); - return andItems; - } + // Adding more than one expression in one cr + public String[] twoCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.add(Restrictions.isNull("itemDescription")); + cr.add(Restrictions.like("itemName", "chair%")); + final List notNullItemsList = cr.list(); + final String notNullDescItems[] = new String[notNullItemsList.size()]; + for (int i = 0; i < notNullItemsList.size(); i++) { + notNullDescItems[i] = notNullItemsList.get(i).getItemName(); + } + session.close(); + return notNullDescItems; + } - // To get items matching with the above defined conditions joined - // with Logical OR - public String[] orLogicalCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000); - final Criterion chairItems = Restrictions.like("itemName", "Chair%"); - final LogicalExpression orExample = Restrictions.or(greaterThanPrice, chairItems); - cr.add(orExample); - final List orItemsList = cr.list(); - final String orItems[] = new String[orItemsList.size()]; - for (int i = 0; i < orItemsList.size(); i++) { - orItems[i] = orItemsList.get(i).getItemName(); - } - session.close(); - return orItems; - } + // To get items matching with the above defined conditions joined + // with Logical AND + public String[] andLogicalCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000); + final Criterion chairItems = Restrictions.like("itemName", "Chair%"); + final LogicalExpression andExample = Restrictions.and(greaterThanPrice, chairItems); + cr.add(andExample); + final List andItemsList = cr.list(); + final String andItems[] = new String[andItemsList.size()]; + for (int i = 0; i < andItemsList.size(); i++) { + andItems[i] = andItemsList.get(i).getItemName(); + } + session.close(); + return andItems; + } - // Sorting example - public String[] sortingCriteria() { - final Session session = HibernateUtil.getHibernateSession(); - final Criteria cr = session.createCriteria(Item.class); - cr.addOrder(Order.asc("itemName")); - cr.addOrder(Order.desc("itemPrice")).list(); - final List sortedItemsList = cr.list(); - final String sortedItems[] = new String[sortedItemsList.size()]; - for (int i = 0; i < sortedItemsList.size(); i++) { - sortedItems[i] = sortedItemsList.get(i).getItemName(); - } - session.close(); - return sortedItems; - } + // To get items matching with the above defined conditions joined + // with Logical OR + public String[] orLogicalCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + final Criterion greaterThanPrice = Restrictions.gt("itemPrice", 1000); + final Criterion chairItems = Restrictions.like("itemName", "Chair%"); + final LogicalExpression orExample = Restrictions.or(greaterThanPrice, chairItems); + cr.add(orExample); + final List orItemsList = cr.list(); + final String orItems[] = new String[orItemsList.size()]; + for (int i = 0; i < orItemsList.size(); i++) { + orItems[i] = orItemsList.get(i).getItemName(); + } + session.close(); + return orItems; + } - // Set projections Row Count - public Long[] projectionRowCount() { - final Session session = HibernateUtil.getHibernateSession(); - final List itemProjected = session.createCriteria(Item.class).setProjection(Projections.rowCount()) - .list(); - final Long projectedRowCount[] = new Long[itemProjected.size()]; - for (int i = 0; i < itemProjected.size(); i++) { - projectedRowCount[i] = itemProjected.get(i); - } - session.close(); - return projectedRowCount; - } + // Sorting example + public String[] sortingCriteria() { + final Session session = HibernateUtil.getHibernateSession(); + final Criteria cr = session.createCriteria(Item.class); + cr.addOrder(Order.asc("itemName")); + cr.addOrder(Order.desc("itemPrice")).list(); + final List sortedItemsList = cr.list(); + final String sortedItems[] = new String[sortedItemsList.size()]; + for (int i = 0; i < sortedItemsList.size(); i++) { + sortedItems[i] = sortedItemsList.get(i).getItemName(); + } + session.close(); + return sortedItems; + } - // Set projections average of itemPrice - public Double[] projectionAverage() { - final Session session = HibernateUtil.getHibernateSession(); - final List avgItemPriceList = session.createCriteria(Item.class) - .setProjection(Projections.projectionList().add(Projections.avg("itemPrice"))).list(); + // Set projections Row Count + public Long[] projectionRowCount() { + final Session session = HibernateUtil.getHibernateSession(); + final List itemProjected = session.createCriteria(Item.class).setProjection(Projections.rowCount()).list(); + final Long projectedRowCount[] = new Long[itemProjected.size()]; + for (int i = 0; i < itemProjected.size(); i++) { + projectedRowCount[i] = itemProjected.get(i); + } + session.close(); + return projectedRowCount; + } - final Double avgItemPrice[] = new Double[avgItemPriceList.size()]; - for (int i = 0; i < avgItemPriceList.size(); i++) { - avgItemPrice[i] = (Double) avgItemPriceList.get(i); - } - session.close(); - return avgItemPrice; - } + // Set projections average of itemPrice + public Double[] projectionAverage() { + final Session session = HibernateUtil.getHibernateSession(); + final List avgItemPriceList = session.createCriteria(Item.class).setProjection(Projections.projectionList().add(Projections.avg("itemPrice"))).list(); + + final Double avgItemPrice[] = new Double[avgItemPriceList.size()]; + for (int i = 0; i < avgItemPriceList.size(); i++) { + avgItemPrice[i] = (Double) avgItemPriceList.get(i); + } + session.close(); + return avgItemPrice; + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java index ec8dc32200..f4a9b8a678 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/OrderDetail.java @@ -5,54 +5,54 @@ import java.io.Serializable; import java.sql.Date; @Entity -@Table (name = "USER_ORDER") -public class OrderDetail implements Serializable{ +@Table(name = "USER_ORDER") +public class OrderDetail implements Serializable { - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - @Column(name="ORDER_ID") - private Long orderId; - - public OrderDetail(){ - } - - public OrderDetail(Date orderDate, String orderDesc) { - super(); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((orderId == null) ? 0 : orderId.hashCode()); - return result; - } - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - OrderDetail other = (OrderDetail) obj; - if (orderId == null) { - if (other.orderId != null) - return false; - } else if (!orderId.equals(other.orderId)) - return false; - - return true; - } + private static final long serialVersionUID = 1L; - public Long getOrderId() { - return orderId; - } - public void setOrderId(Long orderId) { - this.orderId = orderId; - } + @Id + @GeneratedValue + @Column(name = "ORDER_ID") + private Long orderId; + + public OrderDetail() { + } + + public OrderDetail(Date orderDate, String orderDesc) { + super(); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((orderId == null) ? 0 : orderId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + OrderDetail other = (OrderDetail) obj; + if (orderId == null) { + if (other.orderId != null) + return false; + } else if (!orderId.equals(other.orderId)) + return false; + + return true; + } + + public Long getOrderId() { + return orderId; + } + + public void setOrderId(Long orderId) { + this.orderId = orderId; + } } - - diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java index 22b4fdc76c..2559d5f048 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserEager.java @@ -6,66 +6,66 @@ import java.util.HashSet; import java.util.Set; @Entity -@Table (name = "USER") +@Table(name = "USER") public class UserEager implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - @Column(name="USER_ID") - private Long userId; - - @OneToMany(fetch = FetchType.EAGER, mappedBy = "user") - private Set orderDetail = new HashSet(); - public UserEager() { - } + private static final long serialVersionUID = 1L; - public UserEager(final Long userId) { - super(); - this.userId = userId; - } + @Id + @GeneratedValue + @Column(name = "USER_ID") + private Long userId; - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((userId == null) ? 0 : userId.hashCode()); - return result; - } + @OneToMany(fetch = FetchType.EAGER, mappedBy = "user") + private Set orderDetail = new HashSet(); - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final UserEager other = (UserEager) obj; - if (userId == null) { - if (other.userId != null) - return false; - } else if (!userId.equals(other.userId)) - return false; - return true; - } + public UserEager() { + } - public Long getUserId() { - return userId; - } + public UserEager(final Long userId) { + super(); + this.userId = userId; + } - public void setUserId(final Long userId) { - this.userId = userId; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((userId == null) ? 0 : userId.hashCode()); + return result; + } - public Set getOrderDetail() { - return orderDetail; - } + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final UserEager other = (UserEager) obj; + if (userId == null) { + if (other.userId != null) + return false; + } else if (!userId.equals(other.userId)) + return false; + return true; + } - public void setOrderDetail(Set orderDetail) { - this.orderDetail = orderDetail; - } + public Long getUserId() { + return userId; + } + + public void setUserId(final Long userId) { + this.userId = userId; + } + + public Set getOrderDetail() { + return orderDetail; + } + + public void setOrderDetail(Set orderDetail) { + this.orderDetail = orderDetail; + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java index 5038fb90ef..5852e74418 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/model/UserLazy.java @@ -6,67 +6,66 @@ import java.util.HashSet; import java.util.Set; @Entity -@Table (name = "USER") +@Table(name = "USER") public class UserLazy implements Serializable { - - private static final long serialVersionUID = 1L; - - @Id - @GeneratedValue - @Column(name="USER_ID") - private Long userId; - - @OneToMany(fetch = FetchType.LAZY, mappedBy = "user") - private Set orderDetail = new HashSet(); - public UserLazy() { - } + private static final long serialVersionUID = 1L; - public UserLazy(final Long userId) { - super(); - this.userId = userId; - } + @Id + @GeneratedValue + @Column(name = "USER_ID") + private Long userId; - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((userId == null) ? 0 : userId.hashCode()); - return result; - } + @OneToMany(fetch = FetchType.LAZY, mappedBy = "user") + private Set orderDetail = new HashSet(); - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final UserLazy other = (UserLazy) obj; - if (userId == null) { - if (other.userId != null) - return false; - } else if (!userId.equals(other.userId)) - return false; - return true; - } + public UserLazy() { + } - public Long getUserId() { - return userId; - } + public UserLazy(final Long userId) { + super(); + this.userId = userId; + } - public void setUserId(final Long userId) { - this.userId = userId; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((userId == null) ? 0 : userId.hashCode()); + return result; + } - - public Set getOrderDetail() { - return orderDetail; - } + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final UserLazy other = (UserLazy) obj; + if (userId == null) { + if (other.userId != null) + return false; + } else if (!userId.equals(other.userId)) + return false; + return true; + } - public void setOrderDetail(Set orderDetail) { - this.orderDetail = orderDetail; - } + public Long getUserId() { + return userId; + } + + public void setUserId(final Long userId) { + this.userId = userId; + } + + public Set getOrderDetail() { + return orderDetail; + } + + public void setOrderDetail(Set orderDetail) { + this.orderDetail = orderDetail; + } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java index bbd7729232..c7be96abb7 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java +++ b/spring-hibernate4/src/main/java/com/baeldung/hibernate/fetching/util/HibernateUtil.java @@ -6,27 +6,24 @@ import org.hibernate.cfg.Configuration; public class HibernateUtil { - @SuppressWarnings("deprecation") - public static Session getHibernateSession(String fetchMethod) { - //two config files are there - //one with lazy loading enabled - //another lazy = false - SessionFactory sf; - if ("lazy".equals(fetchMethod)) { - sf = new Configuration().configure("fetchingLazy.cfg.xml").buildSessionFactory(); - } else { - sf = new Configuration().configure("fetching.cfg.xml").buildSessionFactory(); - } - - // fetching.cfg.xml is used for this example - return sf.openSession(); - } + @SuppressWarnings("deprecation") + public static Session getHibernateSession(String fetchMethod) { + // two config files are there + // one with lazy loading enabled + // another lazy = false + SessionFactory sf; + if ("lazy".equals(fetchMethod)) { + sf = new Configuration().configure("fetchingLazy.cfg.xml").buildSessionFactory(); + } else { + sf = new Configuration().configure("fetching.cfg.xml").buildSessionFactory(); + } + + // fetching.cfg.xml is used for this example + return sf.openSession(); + } public static Session getHibernateSession() { - return new Configuration() - .configure("fetching.cfg.xml") - .buildSessionFactory() - .openSession(); + return new Configuration().configure("fetching.cfg.xml").buildSessionFactory().openSession(); } } diff --git a/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java b/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java index bdd48d6aa6..d36a1e58cf 100644 --- a/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java +++ b/spring-hibernate4/src/main/java/com/baeldung/persistence/model/Foo.java @@ -16,92 +16,90 @@ import javax.persistence.NamedNativeQuery; import org.hibernate.envers.Audited; -@NamedNativeQueries({ - @NamedNativeQuery(name = "callGetAllFoos", query = "CALL GetAllFoos()", resultClass = Foo.class), - @NamedNativeQuery(name = "callGetFoosByName", query = "CALL GetFoosByName(:fooName)", resultClass = Foo.class) }) +@NamedNativeQueries({ @NamedNativeQuery(name = "callGetAllFoos", query = "CALL GetAllFoos()", resultClass = Foo.class), @NamedNativeQuery(name = "callGetFoosByName", query = "CALL GetFoosByName(:fooName)", resultClass = Foo.class) }) @Entity @Audited // @Proxy(lazy = false) public class Foo implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.AUTO) - @Column(name = "id") - private long id; + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + @Column(name = "id") + private long id; - @Column(name = "name") - private String name; + @Column(name = "name") + private String name; - @ManyToOne(targetEntity = Bar.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER) - @JoinColumn(name = "BAR_ID") - private Bar bar = new Bar(); + @ManyToOne(targetEntity = Bar.class, cascade = CascadeType.ALL, fetch = FetchType.EAGER) + @JoinColumn(name = "BAR_ID") + private Bar bar = new Bar(); - public Foo() { - super(); - } + public Foo() { + super(); + } - public Foo(final String name) { - super(); - this.name = name; - } + public Foo(final String name) { + super(); + this.name = name; + } - // + // - public Bar getBar() { - return bar; - } + public Bar getBar() { + return bar; + } - public void setBar(final Bar bar) { - this.bar = bar; - } + public void setBar(final Bar bar) { + this.bar = bar; + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(final long id) { - this.id = id; - } + public void setId(final long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(final String name) { - this.name = name; - } + public void setName(final String name) { + this.name = name; + } - // + // - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } - @Override - public boolean equals(final Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - final Foo other = (Foo) obj; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - return true; - } + @Override + public boolean equals(final Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Foo other = (Foo) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Foo [name=").append(name).append("]"); - return builder.toString(); - } + @Override + public String toString() { + final StringBuilder builder = new StringBuilder(); + builder.append("Foo [name=").append(name).append("]"); + return builder.toString(); + } } diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java index 3bd8c5ee00..88186098cc 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java @@ -14,178 +14,170 @@ import com.baeldung.hibernate.criteria.view.ApplicationView; public class HibernateCriteriaTest { - final private ApplicationView av = new ApplicationView(); + final private ApplicationView av = new ApplicationView(); - @Test - public void testPerformanceOfCriteria() { - assertTrue(av.checkIfCriteriaTimeLower()); - } - - @Test - public void testLikeCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedLikeList = session.createQuery("From Item where itemName like '%chair%'").list(); - final String expectedLikeItems[] = new String[expectedLikeList.size()]; - for (int i = 0; i < expectedLikeList.size(); i++) { - expectedLikeItems[i] = expectedLikeList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedLikeItems, av.likeCriteria()); - } + @Test + public void testPerformanceOfCriteria() { + assertTrue(av.checkIfCriteriaTimeLower()); + } - @Test - public void testILikeCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedChairCaseList = session.createQuery("From Item where itemName like '%Chair%'").list(); - final String expectedChairCaseItems[] = new String[expectedChairCaseList.size()]; - for (int i = 0; i < expectedChairCaseList.size(); i++) { - expectedChairCaseItems[i] = expectedChairCaseList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedChairCaseItems, av.likeCaseCriteria()); + @Test + public void testLikeCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedLikeList = session.createQuery("From Item where itemName like '%chair%'").list(); + final String expectedLikeItems[] = new String[expectedLikeList.size()]; + for (int i = 0; i < expectedLikeList.size(); i++) { + expectedLikeItems[i] = expectedLikeList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedLikeItems, av.likeCriteria()); + } - } + @Test + public void testILikeCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedChairCaseList = session.createQuery("From Item where itemName like '%Chair%'").list(); + final String expectedChairCaseItems[] = new String[expectedChairCaseList.size()]; + for (int i = 0; i < expectedChairCaseList.size(); i++) { + expectedChairCaseItems[i] = expectedChairCaseList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedChairCaseItems, av.likeCaseCriteria()); - @Test - public void testNullCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedIsNullDescItemsList = session.createQuery("From Item where itemDescription is null") - .list(); - final String expectedIsNullDescItems[] = new String[expectedIsNullDescItemsList.size()]; - for (int i = 0; i < expectedIsNullDescItemsList.size(); i++) { - expectedIsNullDescItems[i] = expectedIsNullDescItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedIsNullDescItems, av.nullCriteria()); - } + } - @Test - public void testIsNotNullCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedIsNotNullDescItemsList = session - .createQuery("From Item where itemDescription is not null").list(); - final String expectedIsNotNullDescItems[] = new String[expectedIsNotNullDescItemsList.size()]; - for (int i = 0; i < expectedIsNotNullDescItemsList.size(); i++) { - expectedIsNotNullDescItems[i] = expectedIsNotNullDescItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedIsNotNullDescItems, av.notNullCriteria()); + @Test + public void testNullCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedIsNullDescItemsList = session.createQuery("From Item where itemDescription is null").list(); + final String expectedIsNullDescItems[] = new String[expectedIsNullDescItemsList.size()]; + for (int i = 0; i < expectedIsNullDescItemsList.size(); i++) { + expectedIsNullDescItems[i] = expectedIsNullDescItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedIsNullDescItems, av.nullCriteria()); + } - } + @Test + public void testIsNotNullCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedIsNotNullDescItemsList = session.createQuery("From Item where itemDescription is not null").list(); + final String expectedIsNotNullDescItems[] = new String[expectedIsNotNullDescItemsList.size()]; + for (int i = 0; i < expectedIsNotNullDescItemsList.size(); i++) { + expectedIsNotNullDescItems[i] = expectedIsNotNullDescItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedIsNotNullDescItems, av.notNullCriteria()); - @Test - public void testAverageProjection() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedAvgProjItemsList = session.createQuery("Select avg(itemPrice) from Item item") - .list(); + } - final Double expectedAvgProjItems[] = new Double[expectedAvgProjItemsList.size()]; - for (int i = 0; i < expectedAvgProjItemsList.size(); i++) { - expectedAvgProjItems[i] = expectedAvgProjItemsList.get(i); - } - session.close(); - assertArrayEquals(expectedAvgProjItems, av.projectionAverage()); + @Test + public void testAverageProjection() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedAvgProjItemsList = session.createQuery("Select avg(itemPrice) from Item item").list(); - } + final Double expectedAvgProjItems[] = new Double[expectedAvgProjItemsList.size()]; + for (int i = 0; i < expectedAvgProjItemsList.size(); i++) { + expectedAvgProjItems[i] = expectedAvgProjItemsList.get(i); + } + session.close(); + assertArrayEquals(expectedAvgProjItems, av.projectionAverage()); - @Test - public void testRowCountProjection() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedCountProjItemsList = session.createQuery("Select count(*) from Item").list(); - final Long expectedCountProjItems[] = new Long[expectedCountProjItemsList.size()]; - for (int i = 0; i < expectedCountProjItemsList.size(); i++) { - expectedCountProjItems[i] = expectedCountProjItemsList.get(i); - } - session.close(); - assertArrayEquals(expectedCountProjItems, av.projectionRowCount()); - } + } - @Test - public void testOrCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedOrCritItemsList = session - .createQuery("From Item where itemPrice>1000 or itemName like 'Chair%'").list(); - final String expectedOrCritItems[] = new String[expectedOrCritItemsList.size()]; - for (int i = 0; i < expectedOrCritItemsList.size(); i++) { - expectedOrCritItems[i] = expectedOrCritItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedOrCritItems, av.orLogicalCriteria()); - } + @Test + public void testRowCountProjection() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedCountProjItemsList = session.createQuery("Select count(*) from Item").list(); + final Long expectedCountProjItems[] = new Long[expectedCountProjItemsList.size()]; + for (int i = 0; i < expectedCountProjItemsList.size(); i++) { + expectedCountProjItems[i] = expectedCountProjItemsList.get(i); + } + session.close(); + assertArrayEquals(expectedCountProjItems, av.projectionRowCount()); + } - @Test - public void testAndCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedAndCritItemsList = session - .createQuery("From Item where itemPrice>1000 and itemName like 'Chair%'").list(); - final String expectedAndCritItems[] = new String[expectedAndCritItemsList.size()]; - for (int i = 0; i < expectedAndCritItemsList.size(); i++) { - expectedAndCritItems[i] = expectedAndCritItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedAndCritItems, av.andLogicalCriteria()); - } + @Test + public void testOrCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedOrCritItemsList = session.createQuery("From Item where itemPrice>1000 or itemName like 'Chair%'").list(); + final String expectedOrCritItems[] = new String[expectedOrCritItemsList.size()]; + for (int i = 0; i < expectedOrCritItemsList.size(); i++) { + expectedOrCritItems[i] = expectedOrCritItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedOrCritItems, av.orLogicalCriteria()); + } - @Test - public void testMultiCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedMultiCritItemsList = session - .createQuery("From Item where itemDescription is null and itemName like'chair%'").list(); - final String expectedMultiCritItems[] = new String[expectedMultiCritItemsList.size()]; - for (int i = 0; i < expectedMultiCritItemsList.size(); i++) { - expectedMultiCritItems[i] = expectedMultiCritItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedMultiCritItems, av.twoCriteria()); - } + @Test + public void testAndCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedAndCritItemsList = session.createQuery("From Item where itemPrice>1000 and itemName like 'Chair%'").list(); + final String expectedAndCritItems[] = new String[expectedAndCritItemsList.size()]; + for (int i = 0; i < expectedAndCritItemsList.size(); i++) { + expectedAndCritItems[i] = expectedAndCritItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedAndCritItems, av.andLogicalCriteria()); + } - @Test - public void testSortCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedSortCritItemsList = session - .createQuery("From Item order by itemName asc, itemPrice desc").list(); - final String expectedSortCritItems[] = new String[expectedSortCritItemsList.size()]; - for (int i = 0; i < expectedSortCritItemsList.size(); i++) { - expectedSortCritItems[i] = expectedSortCritItemsList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedSortCritItems, av.sortingCriteria()); - } + @Test + public void testMultiCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedMultiCritItemsList = session.createQuery("From Item where itemDescription is null and itemName like'chair%'").list(); + final String expectedMultiCritItems[] = new String[expectedMultiCritItemsList.size()]; + for (int i = 0; i < expectedMultiCritItemsList.size(); i++) { + expectedMultiCritItems[i] = expectedMultiCritItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedMultiCritItems, av.twoCriteria()); + } - @Test - public void testGreaterThanCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedGreaterThanList = session.createQuery("From Item where itemPrice>1000").list(); - final String expectedGreaterThanItems[] = new String[expectedGreaterThanList.size()]; - for (int i = 0; i < expectedGreaterThanList.size(); i++) { - expectedGreaterThanItems[i] = expectedGreaterThanList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedGreaterThanItems, av.greaterThanCriteria()); - } + @Test + public void testSortCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedSortCritItemsList = session.createQuery("From Item order by itemName asc, itemPrice desc").list(); + final String expectedSortCritItems[] = new String[expectedSortCritItemsList.size()]; + for (int i = 0; i < expectedSortCritItemsList.size(); i++) { + expectedSortCritItems[i] = expectedSortCritItemsList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedSortCritItems, av.sortingCriteria()); + } - @Test - public void testLessThanCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedLessList = session.createQuery("From Item where itemPrice<1000").list(); - final String expectedLessThanItems[] = new String[expectedLessList.size()]; - for (int i = 0; i < expectedLessList.size(); i++) { - expectedLessThanItems[i] = expectedLessList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedLessThanItems, av.lessThanCriteria()); - } + @Test + public void testGreaterThanCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedGreaterThanList = session.createQuery("From Item where itemPrice>1000").list(); + final String expectedGreaterThanItems[] = new String[expectedGreaterThanList.size()]; + for (int i = 0; i < expectedGreaterThanList.size(); i++) { + expectedGreaterThanItems[i] = expectedGreaterThanList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedGreaterThanItems, av.greaterThanCriteria()); + } - @Test - public void betweenCriteriaQuery() { - final Session session = HibernateUtil.getHibernateSession(); - final List expectedBetweenList = session.createQuery("From Item where itemPrice between 100 and 200") - .list(); - final String expectedPriceBetweenItems[] = new String[expectedBetweenList.size()]; - for (int i = 0; i < expectedBetweenList.size(); i++) { - expectedPriceBetweenItems[i] = expectedBetweenList.get(i).getItemName(); - } - session.close(); - assertArrayEquals(expectedPriceBetweenItems, av.betweenCriteria()); - } + @Test + public void testLessThanCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedLessList = session.createQuery("From Item where itemPrice<1000").list(); + final String expectedLessThanItems[] = new String[expectedLessList.size()]; + for (int i = 0; i < expectedLessList.size(); i++) { + expectedLessThanItems[i] = expectedLessList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedLessThanItems, av.lessThanCriteria()); + } + + @Test + public void betweenCriteriaQuery() { + final Session session = HibernateUtil.getHibernateSession(); + final List expectedBetweenList = session.createQuery("From Item where itemPrice between 100 and 200").list(); + final String expectedPriceBetweenItems[] = new String[expectedBetweenList.size()]; + for (int i = 0; i < expectedBetweenList.size(); i++) { + expectedPriceBetweenItems[i] = expectedBetweenList.get(i).getItemName(); + } + session.close(); + assertArrayEquals(expectedPriceBetweenItems, av.betweenCriteria()); + } } diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestRunner.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestRunner.java index 8341df9fcb..99164efb7a 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestRunner.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestRunner.java @@ -6,10 +6,10 @@ import org.junit.runner.notification.Failure; public class HibernateCriteriaTestRunner { - public static void main(final String[] args) { - Result result = JUnitCore.runClasses(HibernateCriteriaTestSuite.class); - for (Failure failure : result.getFailures()) { - - } - } + public static void main(final String[] args) { + Result result = JUnitCore.runClasses(HibernateCriteriaTestSuite.class); + for (Failure failure : result.getFailures()) { + + } + } } diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java index ab27a6ba82..2911fb4725 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java @@ -7,5 +7,5 @@ import org.junit.runners.Suite; @Suite.SuiteClasses({ HibernateCriteriaTest.class }) public class HibernateCriteriaTestSuite { - + } diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java index a650f8eb37..42245ca89e 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java @@ -13,31 +13,30 @@ import static org.junit.Assert.assertTrue; public class HibernateFetchingTest { + // this loads sample data in the database + @Before + public void addFecthingTestData() { + FetchingAppView fav = new FetchingAppView(); + fav.createTestData(); + } - //this loads sample data in the database - @Before - public void addFecthingTestData(){ - FetchingAppView fav = new FetchingAppView(); - fav.createTestData(); - } - - //testLazyFetching() tests the lazy loading - //Since it lazily loaded so orderDetalSetLazy won't - //be initialized - @Test - public void testLazyFetching() { - FetchingAppView fav = new FetchingAppView(); - Set orderDetalSetLazy = fav.lazyLoaded(); - assertFalse(Hibernate.isInitialized(orderDetalSetLazy)); - } - - //testEagerFetching() tests the eager loading - //Since it eagerly loaded so orderDetalSetLazy would - //be initialized - @Test - public void testEagerFetching() { - FetchingAppView fav = new FetchingAppView(); - Set orderDetalSetEager = fav.eagerLoaded(); - assertTrue(Hibernate.isInitialized(orderDetalSetEager)); - } + // testLazyFetching() tests the lazy loading + // Since it lazily loaded so orderDetalSetLazy won't + // be initialized + @Test + public void testLazyFetching() { + FetchingAppView fav = new FetchingAppView(); + Set orderDetalSetLazy = fav.lazyLoaded(); + assertFalse(Hibernate.isInitialized(orderDetalSetLazy)); + } + + // testEagerFetching() tests the eager loading + // Since it eagerly loaded so orderDetalSetLazy would + // be initialized + @Test + public void testEagerFetching() { + FetchingAppView fav = new FetchingAppView(); + Set orderDetalSetEager = fav.eagerLoaded(); + assertTrue(Hibernate.isInitialized(orderDetalSetEager)); + } } diff --git a/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsTest.java b/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsTest.java index aadaefbe44..2e729c5680 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/persistence/save/SaveMethodsTest.java @@ -1,6 +1,5 @@ package com.baeldung.persistence.save; - import com.baeldung.persistence.model.Person; import org.hibernate.HibernateException; import org.hibernate.Session; @@ -25,16 +24,9 @@ public class SaveMethodsTest { @BeforeClass public static void beforeTests() { - Configuration configuration = new Configuration() - .addAnnotatedClass(Person.class) - .setProperty("hibernate.dialect", HSQLDialect.class.getName()) - .setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName()) - .setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test") - .setProperty("hibernate.connection.username", "sa") - .setProperty("hibernate.connection.password", "") - .setProperty("hibernate.hbm2ddl.auto", "update"); - ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings( - configuration.getProperties()).build(); + Configuration configuration = new Configuration().addAnnotatedClass(Person.class).setProperty("hibernate.dialect", HSQLDialect.class.getName()).setProperty("hibernate.connection.driver_class", org.hsqldb.jdbcDriver.class.getName()) + .setProperty("hibernate.connection.url", "jdbc:hsqldb:mem:test").setProperty("hibernate.connection.username", "sa").setProperty("hibernate.connection.password", "").setProperty("hibernate.hbm2ddl.auto", "update"); + ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build(); sessionFactory = configuration.buildSessionFactory(serviceRegistry); } @@ -44,7 +36,6 @@ public class SaveMethodsTest { session.beginTransaction(); } - @Test public void whenPersistTransient_thenSavedToDatabaseOnCommit() { @@ -244,7 +235,6 @@ public class SaveMethodsTest { assertNotNull(session.get(Person.class, person.getId())); - } @Test diff --git a/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresIntegrationTest.java b/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresIntegrationTest.java index 238b228101..db64107405 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresIntegrationTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/persistence/service/FooStoredProceduresIntegrationTest.java @@ -25,7 +25,7 @@ import com.baeldung.persistence.model.Foo; import com.baeldung.spring.PersistenceConfig; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = {PersistenceConfig.class}, loader = AnnotationConfigContextLoader.class) +@ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) public class FooStoredProceduresIntegrationTest { private static final Logger LOGGER = LoggerFactory.getLogger(FooStoredProceduresIntegrationTest.class); @@ -47,8 +47,7 @@ public class FooStoredProceduresIntegrationTest { private boolean getFoosByNameExists() { try { - Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()") - .addEntity(Foo.class); + Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()").addEntity(Foo.class); sqlQuery.list(); return true; } catch (SQLGrammarException e) { @@ -59,8 +58,7 @@ public class FooStoredProceduresIntegrationTest { private boolean getAllFoosExists() { try { - Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()") - .addEntity(Foo.class); + Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()").addEntity(Foo.class); sqlQuery.list(); return true; } catch (SQLGrammarException e) { @@ -80,8 +78,7 @@ public class FooStoredProceduresIntegrationTest { fooService.create(new Foo(randomAlphabetic(6))); // Stored procedure getAllFoos using createSQLQuery - Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()").addEntity( - Foo.class); + Query sqlQuery = session.createSQLQuery("CALL GetAllFoos()").addEntity(Foo.class); @SuppressWarnings("unchecked") List allFoos = sqlQuery.list(); for (Foo foo : allFoos) { @@ -105,8 +102,7 @@ public class FooStoredProceduresIntegrationTest { fooService.create(new Foo("NewFooName")); // Stored procedure getFoosByName using createSQLQuery() - Query sqlQuery = session.createSQLQuery("CALL GetFoosByName(:fooName)") - .addEntity(Foo.class).setParameter("fooName", "NewFooName"); + Query sqlQuery = session.createSQLQuery("CALL GetFoosByName(:fooName)").addEntity(Foo.class).setParameter("fooName", "NewFooName"); @SuppressWarnings("unchecked") List allFoosByName = sqlQuery.list(); for (Foo foo : allFoosByName) { @@ -114,8 +110,7 @@ public class FooStoredProceduresIntegrationTest { } // Stored procedure getFoosByName using getNamedQuery() - Query namedQuery = session.getNamedQuery("callGetFoosByName") - .setParameter("fooName", "NewFooName"); + Query namedQuery = session.getNamedQuery("callGetFoosByName").setParameter("fooName", "NewFooName"); @SuppressWarnings("unchecked") List allFoosByName2 = namedQuery.list(); for (Foo foo : allFoosByName2) { diff --git a/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java b/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java index 439bc6caad..c0761939ad 100644 --- a/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java +++ b/spring-jms/src/test/java/com/baeldung/spring/jms/DefaultTextMessageSenderTest.java @@ -12,8 +12,7 @@ public class DefaultTextMessageSenderTest { @SuppressWarnings("resource") @BeforeClass public static void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext( - "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); + ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); } diff --git a/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java index da9bb0294d..117f8bed82 100644 --- a/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java +++ b/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java @@ -12,8 +12,7 @@ public class MapMessageConvertAndSendTest { @SuppressWarnings("resource") @BeforeClass public static void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext( - "classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); + ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); } diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java b/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java index f97f53b82c..907043b8ce 100644 --- a/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java +++ b/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java @@ -43,8 +43,7 @@ public class SecondLevelCacheIntegrationTest { final Foo foo = new Foo(randomAlphabetic(6)); fooService.create(foo); fooService.findOne(foo.getId()); - final int size = CacheManager.ALL_CACHE_MANAGERS.get(0) - .getCache("org.baeldung.persistence.model.Foo").getSize(); + final int size = CacheManager.ALL_CACHE_MANAGERS.get(0).getCache("org.baeldung.persistence.model.Foo").getSize(); assertThat(size, greaterThan(0)); } @@ -64,21 +63,17 @@ public class SecondLevelCacheIntegrationTest { return nativeQuery.executeUpdate(); }); - final int size = CacheManager.ALL_CACHE_MANAGERS.get(0) - .getCache("org.baeldung.persistence.model.Foo").getSize(); + final int size = CacheManager.ALL_CACHE_MANAGERS.get(0).getCache("org.baeldung.persistence.model.Foo").getSize(); assertThat(size, greaterThan(0)); } @Test public final void givenCacheableQueryIsExecuted_thenItIsCached() { new TransactionTemplate(platformTransactionManager).execute(status -> { - return entityManager.createQuery("select f from Foo f") - .setHint("org.hibernate.cacheable", true) - .getResultList(); + return entityManager.createQuery("select f from Foo f").setHint("org.hibernate.cacheable", true).getResultList(); }); - final int size = CacheManager.ALL_CACHE_MANAGERS.get(0) - .getCache("org.hibernate.cache.internal.StandardQueryCache").getSize(); + final int size = CacheManager.ALL_CACHE_MANAGERS.get(0).getCache("org.hibernate.cache.internal.StandardQueryCache").getSize(); assertThat(size, greaterThan(0)); } } diff --git a/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java b/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java index 67e4c6ae1d..58a92002c8 100644 --- a/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java +++ b/spring-katharsis/src/main/java/org/baeldung/persistence/model/User.java @@ -30,7 +30,7 @@ public class User { private String email; @ManyToMany(fetch = FetchType.EAGER) - @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id") , inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id") ) + @JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id")) @JsonApiToMany @JsonApiIncludeByDefault private Set roles; diff --git a/spring-mockito/src/main/java/com/baeldung/MocksApplication.java b/spring-mockito/src/main/java/com/baeldung/MocksApplication.java index 32be4c6a0a..94309cf1a6 100644 --- a/spring-mockito/src/main/java/com/baeldung/MocksApplication.java +++ b/spring-mockito/src/main/java/com/baeldung/MocksApplication.java @@ -5,7 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class MocksApplication { - public static void main(String[] args) { - SpringApplication.run(MocksApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(MocksApplication.class, args); + } } diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java index 679a455f3f..10b54e345c 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/controller/MainController.java @@ -17,13 +17,12 @@ public class MainController { @Autowired private ITutorialsService tutService; - @RequestMapping(value ="/", method = RequestMethod.GET) + @RequestMapping(value = "/", method = RequestMethod.GET) public String welcomePage() { - return "index"; + return "index"; } - - - @RequestMapping(value ="/list", method = RequestMethod.GET) + + @RequestMapping(value = "/list", method = RequestMethod.GET) public String listTutorialsPage(Model model) { List list = tutService.listTutorials(); model.addAttribute("tutorials", list); @@ -37,6 +36,5 @@ public class MainController { public void setTutService(ITutorialsService tutService) { this.tutService = tutService; } - - + } \ No newline at end of file diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java index 24059f2662..237b603590 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/ITutorialsService.java @@ -6,5 +6,5 @@ import java.util.List; public interface ITutorialsService { - List listTutorials(); + List listTutorials(); } diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java index f67cc0824f..9d48e130c8 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/service/TutorialsService.java @@ -10,9 +10,6 @@ import java.util.List; public class TutorialsService implements ITutorialsService { public List listTutorials() { - return Arrays.asList( - new Tutorial(1, "Guava", "Introduction to Guava", "GuavaAuthor"), - new Tutorial(2, "Android", "Introduction to Android", "AndroidAuthor") - ); + return Arrays.asList(new Tutorial(1, "Guava", "Introduction to Guava", "GuavaAuthor"), new Tutorial(2, "Android", "Introduction to Android", "AndroidAuthor")); } } diff --git a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/spring/config/WebConfig.java b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/spring/config/WebConfig.java index ce8ce1919a..17388b52b0 100644 --- a/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/spring/config/WebConfig.java +++ b/spring-mvc-velocity/src/main/java/com/baeldung/mvc/velocity/spring/config/WebConfig.java @@ -13,7 +13,7 @@ import org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver; @Configuration @EnableWebMvc -@ComponentScan(basePackages = { "com.baeldung.mvc.velocity.controller", "com.baeldung.mvc.velocity.service"}) +@ComponentScan(basePackages = { "com.baeldung.mvc.velocity.controller", "com.baeldung.mvc.velocity.service" }) public class WebConfig extends WebMvcConfigurerAdapter { @Override diff --git a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java index a9fb242755..1f90b0fc67 100644 --- a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java +++ b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java @@ -38,7 +38,6 @@ public class DataContentControllerTest { @Before public void setUp() { - mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); } @@ -53,9 +52,9 @@ public class DataContentControllerTest { mockMvc.perform(get("/list")).andExpect(xpath("//table").exists()); mockMvc.perform(get("/list")).andExpect(xpath("//td[@id='tutId_1']").exists()); } - + @Test - public void whenCallingIndex_thenViewOK() throws Exception{ + public void whenCallingIndex_thenViewOK() throws Exception { mockMvc.perform(get("/")).andExpect(status().isOk()).andExpect(view().name("index")).andExpect(model().size(0)); } } diff --git a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/config/TestConfig.java b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/config/TestConfig.java index 8b84bcdd23..a75cd1291a 100644 --- a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/config/TestConfig.java +++ b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/config/TestConfig.java @@ -8,7 +8,6 @@ import org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver; @Configuration public class TestConfig { - @Bean public ViewResolver viewResolver() { @@ -19,14 +18,12 @@ public class TestConfig { bean.setSuffix(".vm"); return bean; } - + @Bean public VelocityConfigurer velocityConfig() { VelocityConfigurer velocityConfigurer = new VelocityConfigurer(); velocityConfigurer.setResourceLoaderPath("/"); return velocityConfigurer; } - - } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java index 76351b96f7..b5238b04d5 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfig.java @@ -8,10 +8,10 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter @Configuration public class ClientWebConfig extends WebMvcConfigurerAdapter { - public ClientWebConfig() { - super(); - } + public ClientWebConfig() { + super(); + } - // API + // API } \ No newline at end of file diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java index bee09b742a..f299c46dbc 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/ClientWebConfigJava.java @@ -17,40 +17,40 @@ import org.springframework.web.servlet.view.JstlView; //@Configuration public class ClientWebConfigJava extends WebMvcConfigurerAdapter { - public ClientWebConfigJava() { - super(); - } + public ClientWebConfigJava() { + super(); + } - @Bean - public MessageSource messageSource() { + @Bean + public MessageSource messageSource() { - final ResourceBundleMessageSource ms = new ResourceBundleMessageSource(); - ms.setBasenames("messages"); - return ms; - } + final ResourceBundleMessageSource ms = new ResourceBundleMessageSource(); + ms.setBasenames("messages"); + return ms; + } - @Bean - public ResourceBundle getBeanResourceBundle() { + @Bean + public ResourceBundle getBeanResourceBundle() { - final Locale locale = Locale.getDefault(); - return new MessageSourceResourceBundle(messageSource(), locale); - } + final Locale locale = Locale.getDefault(); + return new MessageSourceResourceBundle(messageSource(), locale); + } - @Override - public void addViewControllers(final ViewControllerRegistry registry) { - super.addViewControllers(registry); + @Override + public void addViewControllers(final ViewControllerRegistry registry) { + super.addViewControllers(registry); - registry.addViewController("/sample.html"); - } + registry.addViewController("/sample.html"); + } - @Bean - public ViewResolver viewResolver() { - final InternalResourceViewResolver bean = new InternalResourceViewResolver(); + @Bean + public ViewResolver viewResolver() { + final InternalResourceViewResolver bean = new InternalResourceViewResolver(); - bean.setViewClass(JstlView.class); - bean.setPrefix("/WEB-INF/view/"); - bean.setSuffix(".jsp"); + bean.setViewClass(JstlView.class); + bean.setPrefix("/WEB-INF/view/"); + bean.setSuffix(".jsp"); - return bean; - } + return bean; + } } \ No newline at end of file diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java index aa25f47a2a..fa76933f8f 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/EmployeeController.java @@ -18,28 +18,28 @@ import com.baeldung.spring.form.Employee; @Controller public class EmployeeController { - Map employeeMap = new HashMap<>(); + Map employeeMap = new HashMap<>(); - @RequestMapping(value = "/employee", method = RequestMethod.GET) - public ModelAndView showForm() { - return new ModelAndView("employeeHome", "employee", new Employee()); - } + @RequestMapping(value = "/employee", method = RequestMethod.GET) + public ModelAndView showForm() { + return new ModelAndView("employeeHome", "employee", new Employee()); + } - @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) - public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { - return employeeMap.get(Id); - } + @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) + public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { + return employeeMap.get(Id); + } - @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) - public String submit(@ModelAttribute("employee") final Employee employee, final BindingResult result, final ModelMap model) { - if (result.hasErrors()) { - return "error"; - } - model.addAttribute("name", employee.getName()); - model.addAttribute("contactNumber", employee.getContactNumber()); - model.addAttribute("id", employee.getId()); - employeeMap.put(employee.getId(), employee); - return "employeeView"; - } + @RequestMapping(value = "/addEmployee", method = RequestMethod.POST) + public String submit(@ModelAttribute("employee") final Employee employee, final BindingResult result, final ModelMap model) { + if (result.hasErrors()) { + return "error"; + } + model.addAttribute("name", employee.getName()); + model.addAttribute("contactNumber", employee.getContactNumber()); + model.addAttribute("id", employee.getId()); + employeeMap.put(employee.getId(), employee); + return "employeeView"; + } } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloController.java index cc9d66d4d4..17f0801a6e 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloController.java @@ -11,8 +11,7 @@ public class HelloController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("helloworld"); - model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + - " using SimpleUrlHandlerMapping."); + model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + " using SimpleUrlHandlerMapping."); return model; } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloGuestController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloGuestController.java index 614888ae42..c7f3adb594 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloGuestController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloGuestController.java @@ -10,8 +10,7 @@ public class HelloGuestController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("helloworld"); - model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + - " using ControllerClassNameHandlerMapping."); + model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + " using ControllerClassNameHandlerMapping."); return model; } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloWorldController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloWorldController.java index 6ed3d06ab7..a0be507125 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloWorldController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/HelloWorldController.java @@ -10,8 +10,7 @@ public class HelloWorldController extends AbstractController { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("helloworld"); - model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + - " using BeanNameUrlHandlerMapping."); + model.addObject("msg", "Welcome to Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + " using BeanNameUrlHandlerMapping."); return model; } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java index 39dabf86ed..71d9ad7845 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/PersonController.java @@ -22,63 +22,62 @@ import org.springframework.web.servlet.ModelAndView; @Controller public class PersonController { - @Autowired - PersonValidator validator; + @Autowired + PersonValidator validator; - @RequestMapping(value = "/person", method = RequestMethod.GET) - public ModelAndView showForm(final Model model) { + @RequestMapping(value = "/person", method = RequestMethod.GET) + public ModelAndView showForm(final Model model) { - initData(model); - return new ModelAndView("personForm", "person", new Person()); - } + initData(model); + return new ModelAndView("personForm", "person", new Person()); + } - @RequestMapping(value = "/addPerson", method = RequestMethod.POST) - public String submit(@Valid @ModelAttribute("person") final Person person, final BindingResult result, - final ModelMap modelMap, final Model model) { + @RequestMapping(value = "/addPerson", method = RequestMethod.POST) + public String submit(@Valid @ModelAttribute("person") final Person person, final BindingResult result, final ModelMap modelMap, final Model model) { - validator.validate(person, result); + validator.validate(person, result); - if (result.hasErrors()) { + if (result.hasErrors()) { - initData(model); - return "personForm"; - } + initData(model); + return "personForm"; + } - modelMap.addAttribute("person", person); + modelMap.addAttribute("person", person); - return "personView"; - } + return "personView"; + } - private void initData(final Model model) { + private void initData(final Model model) { - final List favouriteLanguageItem = new ArrayList(); - favouriteLanguageItem.add("Java"); - favouriteLanguageItem.add("C++"); - favouriteLanguageItem.add("Perl"); - model.addAttribute("favouriteLanguageItem", favouriteLanguageItem); + final List favouriteLanguageItem = new ArrayList(); + favouriteLanguageItem.add("Java"); + favouriteLanguageItem.add("C++"); + favouriteLanguageItem.add("Perl"); + model.addAttribute("favouriteLanguageItem", favouriteLanguageItem); - final List jobItem = new ArrayList(); - jobItem.add("Full time"); - jobItem.add("Part time"); - model.addAttribute("jobItem", jobItem); + final List jobItem = new ArrayList(); + jobItem.add("Full time"); + jobItem.add("Part time"); + model.addAttribute("jobItem", jobItem); - final Map countryItems = new LinkedHashMap(); - countryItems.put("US", "United Stated"); - countryItems.put("IT", "Italy"); - countryItems.put("UK", "United Kingdom"); - countryItems.put("FR", "Grance"); - model.addAttribute("countryItems", countryItems); + final Map countryItems = new LinkedHashMap(); + countryItems.put("US", "United Stated"); + countryItems.put("IT", "Italy"); + countryItems.put("UK", "United Kingdom"); + countryItems.put("FR", "Grance"); + model.addAttribute("countryItems", countryItems); - final List fruit = new ArrayList(); - fruit.add("Banana"); - fruit.add("Mango"); - fruit.add("Apple"); - model.addAttribute("fruit", fruit); + final List fruit = new ArrayList(); + fruit.add("Banana"); + fruit.add("Mango"); + fruit.add("Apple"); + model.addAttribute("fruit", fruit); - final List books = new ArrayList(); - books.add("The Great Gatsby"); - books.add("Nineteen Eighty-Four"); - books.add("The Lord of the Rings"); - model.addAttribute("books", books); - } + final List books = new ArrayList(); + books.add("The Great Gatsby"); + books.add("Nineteen Eighty-Four"); + books.add("The Lord of the Rings"); + model.addAttribute("books", books); + } } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/WelcomeController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/WelcomeController.java index 5459481674..2760fb8f89 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/WelcomeController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/WelcomeController.java @@ -11,8 +11,7 @@ public class WelcomeController extends AbstractController { protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { ModelAndView model = new ModelAndView("welcome"); - model.addObject("msg", " Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + - " using SimpleUrlHandlerMapping."); + model.addObject("msg", " Baeldung's Spring Handler Mappings Guide.
    This request was mapped" + " using SimpleUrlHandlerMapping."); return model; } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java index 88e4f9ff4c..01638fbe76 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/form/Person.java @@ -7,146 +7,146 @@ import org.springframework.web.multipart.MultipartFile; public class Person { - private long id; + private long id; - private String name; - private String email; - private String dateOfBirth; + private String name; + private String email; + private String dateOfBirth; - @NotEmpty - private String password; - private String sex; - private String country; - private String book; - private String job; - private boolean receiveNewsletter; - private String[] hobbies; - private List favouriteLanguage; - private List fruit; - private String notes; - private MultipartFile file; + @NotEmpty + private String password; + private String sex; + private String country; + private String book; + private String job; + private boolean receiveNewsletter; + private String[] hobbies; + private List favouriteLanguage; + private List fruit; + private String notes; + private MultipartFile file; - public Person() { - super(); - } + public Person() { + super(); + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(final long id) { - this.id = id; - } + public void setId(final long id) { + this.id = id; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(final String name) { - this.name = name; - } + public void setName(final String name) { + this.name = name; + } - public String getEmail() { - return email; - } + public String getEmail() { + return email; + } - public void setEmail(final String email) { - this.email = email; - } + public void setEmail(final String email) { + this.email = email; + } - public String getDateOfBirth() { - return dateOfBirth; - } + public String getDateOfBirth() { + return dateOfBirth; + } - public void setDateOfBirth(final String dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } + public void setDateOfBirth(final String dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } - public String getPassword() { - return password; - } + public String getPassword() { + return password; + } - public void setPassword(final String password) { - this.password = password; - } + public void setPassword(final String password) { + this.password = password; + } - public String getSex() { - return sex; - } + public String getSex() { + return sex; + } - public void setSex(final String sex) { - this.sex = sex; - } + public void setSex(final String sex) { + this.sex = sex; + } - public String getCountry() { - return country; - } + public String getCountry() { + return country; + } - public void setCountry(final String country) { - this.country = country; - } + public void setCountry(final String country) { + this.country = country; + } - public String getJob() { - return job; - } + public String getJob() { + return job; + } - public void setJob(final String job) { - this.job = job; - } + public void setJob(final String job) { + this.job = job; + } - public boolean isReceiveNewsletter() { - return receiveNewsletter; - } + public boolean isReceiveNewsletter() { + return receiveNewsletter; + } - public void setReceiveNewsletter(final boolean receiveNewsletter) { - this.receiveNewsletter = receiveNewsletter; - } + public void setReceiveNewsletter(final boolean receiveNewsletter) { + this.receiveNewsletter = receiveNewsletter; + } - public String[] getHobbies() { - return hobbies; - } + public String[] getHobbies() { + return hobbies; + } - public void setHobbies(final String[] hobbies) { - this.hobbies = hobbies; - } + public void setHobbies(final String[] hobbies) { + this.hobbies = hobbies; + } - public List getFavouriteLanguage() { - return favouriteLanguage; - } + public List getFavouriteLanguage() { + return favouriteLanguage; + } - public void setFavouriteLanguage(final List favouriteLanguage) { - this.favouriteLanguage = favouriteLanguage; - } + public void setFavouriteLanguage(final List favouriteLanguage) { + this.favouriteLanguage = favouriteLanguage; + } - public String getNotes() { - return notes; - } + public String getNotes() { + return notes; + } - public void setNotes(final String notes) { - this.notes = notes; - } + public void setNotes(final String notes) { + this.notes = notes; + } - public List getFruit() { - return fruit; - } + public List getFruit() { + return fruit; + } - public void setFruit(final List fruit) { - this.fruit = fruit; - } + public void setFruit(final List fruit) { + this.fruit = fruit; + } - public String getBook() { - return book; - } + public String getBook() { + return book; + } - public void setBook(final String book) { - this.book = book; - } + public void setBook(final String book) { + this.book = book; + } - public MultipartFile getFile() { - return file; - } + public MultipartFile getFile() { + return file; + } - public void setFile(final MultipartFile file) { - this.file = file; - } + public void setFile(final MultipartFile file) { + this.file = file; + } } diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java index 3a271f6545..f7625bacd9 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/validator/PersonValidator.java @@ -9,14 +9,14 @@ import org.springframework.validation.Validator; @Component public class PersonValidator implements Validator { - @Override - public boolean supports(final Class calzz) { - return Person.class.isAssignableFrom(calzz); - } + @Override + public boolean supports(final Class calzz) { + return Person.class.isAssignableFrom(calzz); + } - @Override - public void validate(final Object obj, final Errors errors) { + @Override + public void validate(final Object obj, final Errors errors) { - ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required.name"); - } + ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "required.name"); + } } \ No newline at end of file diff --git a/spring-quartz/src/main/java/org/baeldung/springquartz/SpringQuartzApp.java b/spring-quartz/src/main/java/org/baeldung/springquartz/SpringQuartzApp.java index e51e4ad43d..547ef78d84 100644 --- a/spring-quartz/src/main/java/org/baeldung/springquartz/SpringQuartzApp.java +++ b/spring-quartz/src/main/java/org/baeldung/springquartz/SpringQuartzApp.java @@ -10,7 +10,6 @@ import org.springframework.scheduling.annotation.EnableScheduling; public class SpringQuartzApp { public static void main(String[] args) { - new SpringApplicationBuilder(SpringQuartzApp.class) - .showBanner(false).run(args); + new SpringApplicationBuilder(SpringQuartzApp.class).showBanner(false).run(args); } } diff --git a/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/QrtzScheduler.java b/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/QrtzScheduler.java index a944f8fe43..6601df6c94 100644 --- a/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/QrtzScheduler.java +++ b/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/QrtzScheduler.java @@ -45,8 +45,7 @@ public class QrtzScheduler { } @Bean - public Scheduler scheduler(Trigger trigger, JobDetail job) - throws SchedulerException, IOException { + public Scheduler scheduler(Trigger trigger, JobDetail job) throws SchedulerException, IOException { StdSchedulerFactory factory = new StdSchedulerFactory(); factory.initialize(new ClassPathResource("quartz.properties").getInputStream()); @@ -64,9 +63,7 @@ public class QrtzScheduler { @Bean public JobDetail jobDetail() { - return newJob().ofType(SampleJob.class).storeDurably() - .withIdentity(JobKey.jobKey("Qrtz_Job_Detail")) - .withDescription("Invoke Sample Job service...").build(); + return newJob().ofType(SampleJob.class).storeDurably().withIdentity(JobKey.jobKey("Qrtz_Job_Detail")).withDescription("Invoke Sample Job service...").build(); } @Bean @@ -75,10 +72,6 @@ public class QrtzScheduler { int frequencyInSec = 10; logger.info("Configuring trigger to fire every {} seconds", frequencyInSec); - return newTrigger().forJob(job).withIdentity(TriggerKey.triggerKey("Qrtz_Trigger")) - .withDescription("Sample trigger") - .withSchedule( - simpleSchedule().withIntervalInSeconds(frequencyInSec).repeatForever()) - .build(); + return newTrigger().forJob(job).withIdentity(TriggerKey.triggerKey("Qrtz_Trigger")).withDescription("Sample trigger").withSchedule(simpleSchedule().withIntervalInSeconds(frequencyInSec).repeatForever()).build(); } } diff --git a/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/SampleJob.java b/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/SampleJob.java index 9474272a3c..7c50f9a231 100644 --- a/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/SampleJob.java +++ b/spring-quartz/src/main/java/org/baeldung/springquartz/basics/scheduler/SampleJob.java @@ -19,8 +19,7 @@ public class SampleJob implements Job { public void execute(JobExecutionContext context) throws JobExecutionException { - logger.info("Job ** {} ** fired @ {}", context.getJobDetail().getKey().getName(), - context.getFireTime()); + logger.info("Job ** {} ** fired @ {}", context.getJobDetail().getKey().getName(), context.getFireTime()); jobService.executeSampleJob(); diff --git a/spring-quartz/src/main/java/org/baeldung/springquartz/config/AutoWiringSpringBeanJobFactory.java b/spring-quartz/src/main/java/org/baeldung/springquartz/config/AutoWiringSpringBeanJobFactory.java index 0e24238467..d3034ae7af 100644 --- a/spring-quartz/src/main/java/org/baeldung/springquartz/config/AutoWiringSpringBeanJobFactory.java +++ b/spring-quartz/src/main/java/org/baeldung/springquartz/config/AutoWiringSpringBeanJobFactory.java @@ -11,21 +11,17 @@ import org.springframework.scheduling.quartz.SpringBeanJobFactory; * Adds auto-wiring support to quartz jobs. * @see "https://gist.github.com/jelies/5085593" */ -public final class AutoWiringSpringBeanJobFactory extends SpringBeanJobFactory - implements ApplicationContextAware { +public final class AutoWiringSpringBeanJobFactory extends SpringBeanJobFactory implements ApplicationContextAware { private transient AutowireCapableBeanFactory beanFactory; - - public void setApplicationContext(ApplicationContext applicationContext) - throws BeansException { + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { beanFactory = applicationContext.getAutowireCapableBeanFactory(); } @Override - protected Object createJobInstance(final TriggerFiredBundle bundle) - throws Exception { + protected Object createJobInstance(final TriggerFiredBundle bundle) throws Exception { final Object job = super.createJobInstance(bundle); beanFactory.autowireBean(job); diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/CompanyController.java b/spring-rest/src/main/java/org/baeldung/web/controller/CompanyController.java index d640ac671d..aa694c08ed 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/CompanyController.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/CompanyController.java @@ -8,9 +8,9 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class CompanyController { - @RequestMapping(value = "/companyRest", produces = MediaType.APPLICATION_JSON_VALUE) - public Company getCompanyRest() { - final Company company = new Company(1, "Xpto"); - return company; - } + @RequestMapping(value = "/companyRest", produces = MediaType.APPLICATION_JSON_VALUE) + public Company getCompanyRest() { + final Company company = new Company(1, "Xpto"); + return company; + } } diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java b/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java index f3e3738bfe..1cc3eae432 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/ItemController.java @@ -14,26 +14,26 @@ import com.fasterxml.jackson.annotation.JsonView; @RestController public class ItemController { - @JsonView(Views.Public.class) - @RequestMapping("/items/{id}") - public Item getItemPublic(@PathVariable final int id) { - return ItemManager.getById(id); - } + @JsonView(Views.Public.class) + @RequestMapping("/items/{id}") + public Item getItemPublic(@PathVariable final int id) { + return ItemManager.getById(id); + } - @JsonView(Views.Internal.class) - @RequestMapping("/items/internal/{id}") - public Item getItemInternal(@PathVariable final int id) { - return ItemManager.getById(id); - } + @JsonView(Views.Internal.class) + @RequestMapping("/items/internal/{id}") + public Item getItemInternal(@PathVariable final int id) { + return ItemManager.getById(id); + } - @RequestMapping("/date") - public Date getCurrentDate() throws Exception { - return new Date(); - } + @RequestMapping("/date") + public Date getCurrentDate() throws Exception { + return new Date(); + } - @RequestMapping("/delay/{seconds}") - public void getCurrentTime(@PathVariable final int seconds) throws Exception { + @RequestMapping("/delay/{seconds}") + public void getCurrentTime(@PathVariable final int seconds) throws Exception { - Thread.sleep(seconds * 1000); - } + Thread.sleep(seconds * 1000); + } } \ No newline at end of file diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/advice/JsonpControllerAdvice.java b/spring-rest/src/main/java/org/baeldung/web/controller/advice/JsonpControllerAdvice.java index 7d62cc0c66..996f229128 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/advice/JsonpControllerAdvice.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/advice/JsonpControllerAdvice.java @@ -6,8 +6,8 @@ import org.springframework.web.servlet.mvc.method.annotation.AbstractJsonpRespon @ControllerAdvice public class JsonpControllerAdvice extends AbstractJsonpResponseBodyAdvice { - public JsonpControllerAdvice() { - super("callback"); - } + public JsonpControllerAdvice() { + super("callback"); + } } diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java b/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java index 348ee6d596..458bdaf170 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/status/ForbiddenException.java @@ -3,8 +3,8 @@ package org.baeldung.web.controller.status; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ResponseStatus; -@ResponseStatus(value = HttpStatus.FORBIDDEN, reason="To show an example of a custom message") +@ResponseStatus(value = HttpStatus.FORBIDDEN, reason = "To show an example of a custom message") public class ForbiddenException extends RuntimeException { - private static final long serialVersionUID = 6826605655586311552L; + private static final long serialVersionUID = 6826605655586311552L; } diff --git a/spring-rest/src/main/java/org/baeldung/web/dto/Company.java b/spring-rest/src/main/java/org/baeldung/web/dto/Company.java index c7d0718140..3164d604ad 100644 --- a/spring-rest/src/main/java/org/baeldung/web/dto/Company.java +++ b/spring-rest/src/main/java/org/baeldung/web/dto/Company.java @@ -2,37 +2,37 @@ package org.baeldung.web.dto; public class Company { - private long id; - private String name; + private long id; + private String name; - public Company() { - super(); - } + public Company() { + super(); + } - public Company(final long id, final String name) { - this.id = id; - this.name = name; - } + public Company(final long id, final String name) { + this.id = id; + this.name = name; + } - public String getName() { - return name; - } + public String getName() { + return name; + } - public void setName(final String name) { - this.name = name; - } + public void setName(final String name) { + this.name = name; + } - public long getId() { - return id; - } + public long getId() { + return id; + } - public void setId(final long id) { - this.id = id; - } + public void setId(final long id) { + this.id = id; + } - @Override - public String toString() { - return "Company [id=" + id + ", name=" + name + "]"; - } + @Override + public String toString() { + return "Company [id=" + id + ", name=" + name + "]"; + } } diff --git a/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java b/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java index 61251ea33a..8ca96c38fc 100644 --- a/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java +++ b/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java @@ -4,617 +4,594 @@ package org.baeldung.web.dto; public final class FooProtos { - private FooProtos() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface FooOrBuilder extends - // @@protoc_insertion_point(interface_extends:baeldung.Foo) - com.google.protobuf.MessageOrBuilder { - - /** - * required int64 id = 1; - */ - boolean hasId(); - /** - * required int64 id = 1; - */ - long getId(); - - /** - * required string name = 2; - */ - boolean hasName(); - /** - * required string name = 2; - */ - java.lang.String getName(); - /** - * required string name = 2; - */ - com.google.protobuf.ByteString - getNameBytes(); - } - /** - * Protobuf type {@code baeldung.Foo} - */ - public static final class Foo extends - com.google.protobuf.GeneratedMessage implements - // @@protoc_insertion_point(message_implements:baeldung.Foo) - FooOrBuilder { - // Use Foo.newBuilder() to construct. - private Foo(com.google.protobuf.GeneratedMessage.Builder builder) { - super(builder); - this.unknownFields = builder.getUnknownFields(); - } - private Foo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } - - private static final Foo defaultInstance; - public static Foo getDefaultInstance() { - return defaultInstance; + private FooProtos() { } - public Foo getDefaultInstanceForType() { - return defaultInstance; + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { } - private final com.google.protobuf.UnknownFieldSet unknownFields; - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private Foo( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - initFields(); - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!parseUnknownField(input, unknownFields, - extensionRegistry, tag)) { - done = true; - } - break; - } - case 8: { - bitField0_ |= 0x00000001; - id_ = input.readInt64(); - break; - } - case 18: { - com.google.protobuf.ByteString bs = input.readBytes(); - bitField0_ |= 0x00000002; - name_ = bs; - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e.getMessage()).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; + public interface FooOrBuilder extends + // @@protoc_insertion_point(interface_extends:baeldung.Foo) + com.google.protobuf.MessageOrBuilder { + + /** + * required int64 id = 1; + */ + boolean hasId(); + + /** + * required int64 id = 1; + */ + long getId(); + + /** + * required string name = 2; + */ + boolean hasName(); + + /** + * required string name = 2; + */ + java.lang.String getName(); + + /** + * required string name = 2; + */ + com.google.protobuf.ByteString getNameBytes(); } - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); - } - - public static com.google.protobuf.Parser PARSER = - new com.google.protobuf.AbstractParser() { - public Foo parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new Foo(input, extensionRegistry); - } - }; - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - private int bitField0_; - public static final int ID_FIELD_NUMBER = 1; - private long id_; - /** - * required int64 id = 1; - */ - public boolean hasId() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * required int64 id = 1; - */ - public long getId() { - return id_; - } - - public static final int NAME_FIELD_NUMBER = 2; - private java.lang.Object name_; - /** - * required string name = 2; - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * required string name = 2; - */ - public java.lang.String getName() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - name_ = s; - } - return s; - } - } - /** - * required string name = 2; - */ - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - private void initFields() { - id_ = 0L; - name_ = ""; - } - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - if (!hasId()) { - memoizedIsInitialized = 0; - return false; - } - if (!hasName()) { - memoizedIsInitialized = 0; - return false; - } - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - getSerializedSize(); - if (((bitField0_ & 0x00000001) == 0x00000001)) { - output.writeInt64(1, id_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - output.writeBytes(2, getNameBytes()); - } - getUnknownFields().writeTo(output); - } - - private int memoizedSerializedSize = -1; - public int getSerializedSize() { - int size = memoizedSerializedSize; - if (size != -1) return size; - - size = 0; - if (((bitField0_ & 0x00000001) == 0x00000001)) { - size += com.google.protobuf.CodedOutputStream - .computeInt64Size(1, id_); - } - if (((bitField0_ & 0x00000002) == 0x00000002)) { - size += com.google.protobuf.CodedOutputStream - .computeBytesSize(2, getNameBytes()); - } - size += getUnknownFields().getSerializedSize(); - memoizedSerializedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - @java.lang.Override - protected java.lang.Object writeReplace() - throws java.io.ObjectStreamException { - return super.writeReplace(); - } - - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom(java.io.InputStream input) - throws java.io.IOException { - return PARSER.parseFrom(input); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseFrom(input, extensionRegistry); - } - public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return PARSER.parseDelimitedFrom(input); - } - public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseDelimitedFrom(input, extensionRegistry); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return PARSER.parseFrom(input); - } - public static org.baeldung.web.dto.FooProtos.Foo parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return PARSER.parseFrom(input, extensionRegistry); - } - - public static Builder newBuilder() { return Builder.create(); } - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder(org.baeldung.web.dto.FooProtos.Foo prototype) { - return newBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { return newBuilder(this); } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } /** * Protobuf type {@code baeldung.Foo} */ - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder implements - // @@protoc_insertion_point(builder_implements:baeldung.Foo) - org.baeldung.web.dto.FooProtos.FooOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable - .ensureFieldAccessorsInitialized( - org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); - } - - // Construct using org.baeldung.web.dto.FooProtos.Foo.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + public static final class Foo extends com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:baeldung.Foo) + FooOrBuilder { + // Use Foo.newBuilder() to construct. + private Foo(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); } - } - private static Builder create() { - return new Builder(); - } - public Builder clear() { - super.clear(); - id_ = 0L; - bitField0_ = (bitField0_ & ~0x00000001); - name_ = ""; - bitField0_ = (bitField0_ & ~0x00000002); - return this; - } - - public Builder clone() { - return create().mergeFrom(buildPartial()); - } - - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; - } - - public org.baeldung.web.dto.FooProtos.Foo getDefaultInstanceForType() { - return org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance(); - } - - public org.baeldung.web.dto.FooProtos.Foo build() { - org.baeldung.web.dto.FooProtos.Foo result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); + private Foo(boolean noInit) { + this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } - return result; - } - public org.baeldung.web.dto.FooProtos.Foo buildPartial() { - org.baeldung.web.dto.FooProtos.Foo result = new org.baeldung.web.dto.FooProtos.Foo(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - if (((from_bitField0_ & 0x00000001) == 0x00000001)) { - to_bitField0_ |= 0x00000001; + private static final Foo defaultInstance; + + public static Foo getDefaultInstance() { + return defaultInstance; } - result.id_ = id_; - if (((from_bitField0_ & 0x00000002) == 0x00000002)) { - to_bitField0_ |= 0x00000002; + + public Foo getDefaultInstanceForType() { + return defaultInstance; } - result.name_ = name_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof org.baeldung.web.dto.FooProtos.Foo) { - return mergeFrom((org.baeldung.web.dto.FooProtos.Foo)other); - } else { - super.mergeFrom(other); - return this; + private final com.google.protobuf.UnknownFieldSet unknownFields; + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return this.unknownFields; } - } - public Builder mergeFrom(org.baeldung.web.dto.FooProtos.Foo other) { - if (other == org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance()) return this; - if (other.hasId()) { - setId(other.getId()); + private Foo(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + case 8: { + bitField0_ |= 0x00000001; + id_ = input.readInt64(); + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + name_ = bs; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } } - if (other.hasName()) { - bitField0_ |= 0x00000002; - name_ = other.name_; - onChanged(); + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; } - this.mergeUnknownFields(other.getUnknownFields()); - return this; - } - public final boolean isInitialized() { - if (!hasId()) { - - return false; + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable.ensureFieldAccessorsInitialized(org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); } - if (!hasName()) { - - return false; - } - return true; - } - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - org.baeldung.web.dto.FooProtos.Foo parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (org.baeldung.web.dto.FooProtos.Foo) e.getUnfinishedMessage(); - throw e; - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private long id_ ; - /** - * required int64 id = 1; - */ - public boolean hasId() { - return ((bitField0_ & 0x00000001) == 0x00000001); - } - /** - * required int64 id = 1; - */ - public long getId() { - return id_; - } - /** - * required int64 id = 1; - */ - public Builder setId(long value) { - bitField0_ |= 0x00000001; - id_ = value; - onChanged(); - return this; - } - /** - * required int64 id = 1; - */ - public Builder clearId() { - bitField0_ = (bitField0_ & ~0x00000001); - id_ = 0L; - onChanged(); - return this; - } - - private java.lang.Object name_ = ""; - /** - * required string name = 2; - */ - public boolean hasName() { - return ((bitField0_ & 0x00000002) == 0x00000002); - } - /** - * required string name = 2; - */ - public java.lang.String getName() { - java.lang.Object ref = name_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - if (bs.isValidUtf8()) { - name_ = s; - } - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * required string name = 2; - */ - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * required string name = 2; - */ - public Builder setName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - name_ = value; - onChanged(); - return this; - } - /** - * required string name = 2; - */ - public Builder clearName() { - bitField0_ = (bitField0_ & ~0x00000002); - name_ = getDefaultInstance().getName(); - onChanged(); - return this; - } - /** - * required string name = 2; - */ - public Builder setNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - bitField0_ |= 0x00000002; - name_ = value; - onChanged(); - return this; - } - - // @@protoc_insertion_point(builder_scope:baeldung.Foo) - } - - static { - defaultInstance = new Foo(true); - defaultInstance.initFields(); - } - - // @@protoc_insertion_point(class_scope:baeldung.Foo) - } - - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_baeldung_Foo_descriptor; - private static - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_baeldung_Foo_fieldAccessorTable; - - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\017FooProtos.proto\022\010baeldung\"\037\n\003Foo\022\n\n\002id" + - "\030\001 \002(\003\022\014\n\004name\030\002 \002(\tB!\n\024org.baeldung.web" + - ".dtoB\tFooProtos" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } + public static com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() { + public Foo parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return new Foo(input, extensionRegistry); + } }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - internal_static_baeldung_Foo_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_baeldung_Foo_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_baeldung_Foo_descriptor, - new java.lang.String[] { "Id", "Name", }); - } - // @@protoc_insertion_point(outer_class_scope) + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int ID_FIELD_NUMBER = 1; + private long id_; + + /** + * required int64 id = 1; + */ + public boolean hasId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + + /** + * required int64 id = 1; + */ + public long getId() { + return id_; + } + + public static final int NAME_FIELD_NUMBER = 2; + private java.lang.Object name_; + + /** + * required string name = 2; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + + /** + * required string name = 2; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + + /** + * required string name = 2; + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + id_ = 0L; + name_ = ""; + } + + private byte memoizedIsInitialized = -1; + + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) + return true; + if (isInitialized == 0) + return false; + + if (!hasId()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasName()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeInt64(1, id_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getNameBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) + return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream.computeInt64Size(1, id_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream.computeBytesSize(2, getNameBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + + @java.lang.Override + protected java.lang.Object writeReplace() throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(java.io.InputStream input) throws java.io.IOException { + return PARSER.parseFrom(input); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return PARSER.parseFrom(input); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { + return Builder.create(); + } + + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder(org.baeldung.web.dto.FooProtos.Foo prototype) { + return newBuilder().mergeFrom(prototype); + } + + public Builder toBuilder() { + return newBuilder(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * Protobuf type {@code baeldung.Foo} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:baeldung.Foo) + org.baeldung.web.dto.FooProtos.FooOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable.ensureFieldAccessorsInitialized(org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); + } + + // Construct using org.baeldung.web.dto.FooProtos.Foo.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + id_ = 0L; + bitField0_ = (bitField0_ & ~0x00000001); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; + } + + public org.baeldung.web.dto.FooProtos.Foo getDefaultInstanceForType() { + return org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance(); + } + + public org.baeldung.web.dto.FooProtos.Foo build() { + org.baeldung.web.dto.FooProtos.Foo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.baeldung.web.dto.FooProtos.Foo buildPartial() { + org.baeldung.web.dto.FooProtos.Foo result = new org.baeldung.web.dto.FooProtos.Foo(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.id_ = id_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.name_ = name_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.baeldung.web.dto.FooProtos.Foo) { + return mergeFrom((org.baeldung.web.dto.FooProtos.Foo) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.baeldung.web.dto.FooProtos.Foo other) { + if (other == org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance()) + return this; + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasName()) { + bitField0_ |= 0x00000002; + name_ = other.name_; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasId()) { + + return false; + } + if (!hasName()) { + + return false; + } + return true; + } + + public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + org.baeldung.web.dto.FooProtos.Foo parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.baeldung.web.dto.FooProtos.Foo) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int bitField0_; + + private long id_; + + /** + * required int64 id = 1; + */ + public boolean hasId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + + /** + * required int64 id = 1; + */ + public long getId() { + return id_; + } + + /** + * required int64 id = 1; + */ + public Builder setId(long value) { + bitField0_ |= 0x00000001; + id_ = value; + onChanged(); + return this; + } + + /** + * required int64 id = 1; + */ + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000001); + id_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object name_ = ""; + + /** + * required string name = 2; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + + /** + * required string name = 2; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * required string name = 2; + */ + public com.google.protobuf.ByteString getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * required string name = 2; + */ + public Builder setName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + name_ = value; + onChanged(); + return this; + } + + /** + * required string name = 2; + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000002); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + + /** + * required string name = 2; + */ + public Builder setNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + name_ = value; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:baeldung.Foo) + } + + static { + defaultInstance = new Foo(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:baeldung.Foo) + } + + private static final com.google.protobuf.Descriptors.Descriptor internal_static_baeldung_Foo_descriptor; + private static com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_baeldung_Foo_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + static { + java.lang.String[] descriptorData = { "\n\017FooProtos.proto\022\010baeldung\"\037\n\003Foo\022\n\n\002id" + "\030\001 \002(\003\022\014\n\004name\030\002 \002(\tB!\n\024org.baeldung.web" + ".dtoB\tFooProtos" }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors(com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}, assigner); + internal_static_baeldung_Foo_descriptor = getDescriptor().getMessageTypes().get(0); + internal_static_baeldung_Foo_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_baeldung_Foo_descriptor, new java.lang.String[] { "Id", "Name", }); + } + + // @@protoc_insertion_point(outer_class_scope) } diff --git a/spring-rest/src/test/java/org/baeldung/web/controller/status/ExampleControllerTest.java b/spring-rest/src/test/java/org/baeldung/web/controller/status/ExampleControllerTest.java index 1344d2d40e..c50e1b4f43 100644 --- a/spring-rest/src/test/java/org/baeldung/web/controller/status/ExampleControllerTest.java +++ b/spring-rest/src/test/java/org/baeldung/web/controller/status/ExampleControllerTest.java @@ -32,13 +32,11 @@ public class ExampleControllerTest { @Test public void whenGetRequestSentToController_thenReturnsStatusNotAcceptable() throws Exception { - mockMvc.perform(get("/controller")) - .andExpect(status().isNotAcceptable()); + mockMvc.perform(get("/controller")).andExpect(status().isNotAcceptable()); } @Test public void whenGetRequestSentToException_thenReturnsStatusForbidden() throws Exception { - mockMvc.perform(get("/exception")) - .andExpect(status().isForbidden()); + mockMvc.perform(get("/exception")).andExpect(status().isForbidden()); } } diff --git a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java index c662c32738..e6c77110b3 100644 --- a/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java +++ b/spring-security-mvc-persisted-remember-me/src/main/java/org/baeldung/service/MyUserDetailsService.java @@ -51,9 +51,7 @@ public class MyUserDetailsService implements UserDetailsService { private User createUser(final String username, final String password, final List roles) { logger.info("Create user " + username); - final List authorities = roles.stream() - .map(role -> new SimpleGrantedAuthority(role.toString())) - .collect(Collectors.toList()); + final List authorities = roles.stream().map(role -> new SimpleGrantedAuthority(role.toString())).collect(Collectors.toList()); return new User(username, password, true, true, true, true, authorities); } diff --git a/spring-security-rest-custom/src/main/java/org/baeldung/config/parent/SecurityConfig.java b/spring-security-rest-custom/src/main/java/org/baeldung/config/parent/SecurityConfig.java index 67d9abbae5..616c2a7684 100644 --- a/spring-security-rest-custom/src/main/java/org/baeldung/config/parent/SecurityConfig.java +++ b/spring-security-rest-custom/src/main/java/org/baeldung/config/parent/SecurityConfig.java @@ -37,5 +37,4 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { // @formatter:on } - } diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java index 80af01aeeb..3d727fc19f 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/ListenerConfig.java @@ -8,9 +8,9 @@ import org.springframework.web.context.request.RequestContextListener; public class ListenerConfig implements WebApplicationInitializer { - @Override - public void onStartup(ServletContext sc) throws ServletException { - // Manages the lifecycle of the root application context - sc.addListener(new RequestContextListener()); - } + @Override + public void onStartup(ServletContext sc) throws ServletException { + // Manages the lifecycle of the root application context + sc.addListener(new RequestContextListener()); + } } \ No newline at end of file diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java index 57e9b32a62..efdb2bc8d4 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/WebConfig.java @@ -16,7 +16,7 @@ import org.springframework.web.servlet.view.InternalResourceViewResolver; @Configuration @ComponentScan("org.baeldung.web") @EnableWebMvc -public class WebConfig extends WebMvcConfigurerAdapter{ +public class WebConfig extends WebMvcConfigurerAdapter { public WebConfig() { super(); @@ -39,11 +39,11 @@ public class WebConfig extends WebMvcConfigurerAdapter{ registry.addViewController("/homepage.html"); } - @Override - public void addInterceptors(final InterceptorRegistry registry) { - registry.addInterceptor(new LoggerInterceptor()); - registry.addInterceptor(new UserInterceptor()); - registry.addInterceptor(new SessionTimerInterceptor()); - } + @Override + public void addInterceptors(final InterceptorRegistry registry) { + registry.addInterceptor(new LoggerInterceptor()); + registry.addInterceptor(new UserInterceptor()); + registry.addInterceptor(new SessionTimerInterceptor()); + } } \ No newline at end of file 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 f5c1626989..90199347b4 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 @@ -13,44 +13,41 @@ import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class SessionTimerInterceptor extends HandlerInterceptorAdapter { - private static Logger log = LoggerFactory.getLogger(SessionTimerInterceptor.class); + private static Logger log = LoggerFactory.getLogger(SessionTimerInterceptor.class); - private static final long MAX_INACTIVE_SESSION_TIME = 5 * 10000; + private static final long MAX_INACTIVE_SESSION_TIME = 5 * 10000; - @Autowired - private HttpSession session; + @Autowired + private HttpSession session; - /** - * Executed before actual handler is executed - **/ - @Override - public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) - throws Exception { - log.info("Pre handle method - check handling start time"); - long startTime = System.currentTimeMillis(); - request.setAttribute("executionTime", startTime); - if (UserInterceptor.isUserLogged()) { - session = request.getSession(); - 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(); - request.logout(); - response.sendRedirect("/spring-security-rest-full/logout"); - } - } - return true; - } + /** + * Executed before actual handler is executed + **/ + @Override + public boolean preHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler) throws Exception { + log.info("Pre handle method - check handling start time"); + long startTime = System.currentTimeMillis(); + request.setAttribute("executionTime", startTime); + if (UserInterceptor.isUserLogged()) { + session = request.getSession(); + 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(); + request.logout(); + response.sendRedirect("/spring-security-rest-full/logout"); + } + } + return true; + } - /** - * Executed before after handler is executed - **/ - @Override - public void postHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler, - 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: {} ms", System.currentTimeMillis() - startTime); - } + /** + * Executed before after handler is executed + **/ + @Override + public void postHandle(final HttpServletRequest request, final HttpServletResponse response, final Object handler, 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: {} ms", System.currentTimeMillis() - startTime); + } } diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/UserInterceptor.java b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/UserInterceptor.java index 4ba12d0138..6b808d885e 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/UserInterceptor.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/interceptor/UserInterceptor.java @@ -31,8 +31,7 @@ public class UserInterceptor extends HandlerInterceptorAdapter { * Executed before after handler is executed. If view is a redirect view, we don't need to execute postHandle **/ @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model) - throws Exception { + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView model) throws Exception { if (model != null && !isRedirectView(model)) { if (isUserLogged()) { addToModelUserDetails(model); diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java index a29de04bb4..916a849c63 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java @@ -30,27 +30,26 @@ import org.springframework.web.context.WebApplicationContext; @WithMockUser(username = "admin", roles = { "USER", "ADMIN" }) public class SessionTimerInterceptorTest { - @Autowired - WebApplicationContext wac; + @Autowired + WebApplicationContext wac; - private MockMvc mockMvc; + private MockMvc mockMvc; - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); - } + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + mockMvc = MockMvcBuilders.webAppContextSetup(wac).build(); + } - /** - * After execution of HTTP GET logs from interceptor will be displayed in - * the console - */ - @Test - public void testInterceptors() throws Exception { - HttpSession session = mockMvc.perform(get("/auth/admin")).andExpect(status().is2xxSuccessful()).andReturn() - .getRequest().getSession(); - Thread.sleep(51000); - mockMvc.perform(get("/auth/admin").session((MockHttpSession) session)).andExpect(status().is2xxSuccessful()); - } + /** + * After execution of HTTP GET logs from interceptor will be displayed in + * the console + */ + @Test + public void testInterceptors() throws Exception { + HttpSession session = mockMvc.perform(get("/auth/admin")).andExpect(status().is2xxSuccessful()).andReturn().getRequest().getSession(); + Thread.sleep(51000); + mockMvc.perform(get("/auth/admin").session((MockHttpSession) session)).andExpect(status().is2xxSuccessful()); + } } diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java index 0b65311203..ff40c86906 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java @@ -23,8 +23,8 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @Transactional -@ContextConfiguration(classes = {SecurityWithoutCsrfConfig.class, PersistenceConfig.class, WebConfig.class}) -@WithMockUser(username = "admin", roles = {"USER", "ADMIN"}) +@ContextConfiguration(classes = { SecurityWithoutCsrfConfig.class, PersistenceConfig.class, WebConfig.class }) +@WithMockUser(username = "admin", roles = { "USER", "ADMIN" }) public class UserInterceptorTest { @Autowired @@ -46,8 +46,7 @@ public class UserInterceptorTest { */ @Test public void testInterceptors() throws Exception { - mockMvc.perform(get("/auth/admin")) - .andExpect(status().is2xxSuccessful()); + mockMvc.perform(get("/auth/admin")).andExpect(status().is2xxSuccessful()); } } From 3a27d6b50e844626ad525d4a5363e5cb73ca3649 Mon Sep 17 00:00:00 2001 From: Sunil Gulabani Date: Wed, 12 Oct 2016 10:33:48 +0530 Subject: [PATCH 113/309] BAEL-255: Added encode-decode of url --- .../encoderdecoder/EncoderDecoder.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java diff --git a/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java b/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java new file mode 100644 index 0000000000..62d2663994 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java @@ -0,0 +1,38 @@ +package com.baeldung.encoderdecoder; + +import org.hamcrest.CoreMatchers; +import org.junit.Assert; +import org.junit.Test; + +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; + +public class EncoderDecoder { + + @Test + public void givenPlainURL_whenUsingUTF8EncodingScheme_thenEncodeURL() throws UnsupportedEncodingException { + String plainURL = "http://www.baeldung.com" ; + String encodedURL = URLEncoder.encode(plainURL, StandardCharsets.UTF_8.toString()); + + Assert.assertThat("http%3A%2F%2Fwww.baeldung.com", CoreMatchers.is(encodedURL)); + } + + @Test + public void givenEncodedURL_whenUsingUTF8EncodingScheme_thenDecodeURL() throws UnsupportedEncodingException { + String encodedURL = "http%3A%2F%2Fwww.baeldung.com" ; + String decodedURL = URLDecoder.decode(encodedURL, StandardCharsets.UTF_8.toString()); + + Assert.assertThat("http://www.baeldung.com", CoreMatchers.is(decodedURL)); + } + + @Test + public void givenEncodedURL_whenUsingWrongEncodingScheme_thenDecodeInvalidURL() throws UnsupportedEncodingException { + String encodedURL = "http%3A%2F%2Fwww.baeldung.com"; + + String decodedURL = URLDecoder.decode(encodedURL, StandardCharsets.UTF_16.toString()); + + Assert.assertFalse("http://www.baeldung.com".equals(decodedURL)); + } +} From 51729209ed21820bda42bae0ef4ee75f37d93c0f Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 12 Oct 2016 08:40:56 +0200 Subject: [PATCH 114/309] Remove unnecessary field initialization --- .../main/java/com/baeldung/java/nio/selector/EchoClient.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java index 188db21641..1c034051aa 100644 --- a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java +++ b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoClient.java @@ -6,9 +6,9 @@ import java.nio.ByteBuffer; import java.nio.channels.SocketChannel; public class EchoClient { - private static SocketChannel client = null; + private static SocketChannel client; private static ByteBuffer buffer; - private static EchoClient instance = null; + private static EchoClient instance; public static EchoClient start() { if (instance == null) From 7ad97523318e247fd9dce8e3e23b8b5c65c414bc Mon Sep 17 00:00:00 2001 From: "lcrusoveanu@optaros.com" Date: Wed, 12 Oct 2016 12:32:19 +0300 Subject: [PATCH 115/309] update test with after method --- .../web/CustomUserDetailsServiceTest.java | 40 +++++++++---------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java index 6917cea99a..0c82a4e98b 100644 --- a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java +++ b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java @@ -39,37 +39,33 @@ public class CustomUserDetailsServiceTest { @Test public void givenExistingUser_whenAuthenticate_thenRetrieveFromDb() { - try { - User user = new User(); - user.setUsername(USERNAME); - user.setPassword(passwordEncoder.encode(PASSWORD)); + User user = new User(); + user.setUsername(USERNAME); + user.setPassword(passwordEncoder.encode(PASSWORD)); - myUserRepository.save(user); + myUserRepository.save(user); - UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(USERNAME, PASSWORD); - Authentication authentication = authenticationProvider.authenticate(auth); + UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(USERNAME, PASSWORD); + Authentication authentication = authenticationProvider.authenticate(auth); - assertEquals(authentication.getName(), USERNAME); - - } finally { - myUserRepository.removeUserByUsername(USERNAME); - } + assertEquals(authentication.getName(), USERNAME); } @Test(expected = BadCredentialsException.class) public void givenIncorrectUser_whenAuthenticate_thenBadCredentialsException() { - try { - User user = new User(); - user.setUsername(USERNAME); - user.setPassword(passwordEncoder.encode(PASSWORD)); + User user = new User(); + user.setUsername(USERNAME); + user.setPassword(passwordEncoder.encode(PASSWORD)); - myUserRepository.save(user); + myUserRepository.save(user); - UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(USERNAME2, PASSWORD); - authenticationProvider.authenticate(auth); - } finally { - myUserRepository.removeUserByUsername(USERNAME); - } + UsernamePasswordAuthenticationToken auth = new UsernamePasswordAuthenticationToken(USERNAME2, PASSWORD); + authenticationProvider.authenticate(auth); + } + + @After + public void tearDown() { + myUserRepository.removeUserByUsername(USERNAME); } } From c0d4eee6697575f0c5dd84845cb08283de90e4b1 Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 12 Oct 2016 16:29:30 +0200 Subject: [PATCH 116/309] configure live tests --- spring-security-custom-permission/pom.xml | 48 ++++++++++++++++++- .../src/main/resources/application.properties | 2 +- .../test/java/org/baeldung/web/LiveTest.java | 24 +++++++--- 3 files changed, 65 insertions(+), 9 deletions(-) diff --git a/spring-security-custom-permission/pom.xml b/spring-security-custom-permission/pom.xml index 6f460f1751..b2854fe7c5 100644 --- a/spring-security-custom-permission/pom.xml +++ b/spring-security-custom-permission/pom.xml @@ -55,7 +55,12 @@
    - + + org.springframework.boot + spring-boot-starter-test + test + + junit junit @@ -95,13 +100,54 @@ org.springframework.boot spring-boot-maven-plugin + + + maven-surefire-plugin + + ${unit-tests.skip} + + **/*LiveTest.java + + + + + + maven-failsafe-plugin + + + integration-test + + integration-test + + + ${live-tests.skip} + + **/*LiveTest.class + + + + + + + + + live + + false + false + + + + UTF-8 1.8 2.4.0 + false + true diff --git a/spring-security-custom-permission/src/main/resources/application.properties b/spring-security-custom-permission/src/main/resources/application.properties index 0b40f62fa9..4433a53ac7 100644 --- a/spring-security-custom-permission/src/main/resources/application.properties +++ b/spring-security-custom-permission/src/main/resources/application.properties @@ -1,6 +1,6 @@ server.port=8081 spring.datasource.driver-class-name=org.h2.Driver -spring.datasource.url=jdbc:h2:mem:security_permission;DB_CLOSE_DELAY=-1 +spring.datasource.url=jdbc:h2:mem:security_permission;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.datasource.username=sa spring.datasource.password= spring.jpa.hibernate.ddl-auto=create-drop diff --git a/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java b/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java index 80b1390083..7e92765dcd 100644 --- a/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java +++ b/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java @@ -3,35 +3,45 @@ package org.baeldung.web; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import org.baeldung.Application; import org.baeldung.persistence.model.Foo; import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.IntegrationTest; +import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.http.MediaType; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; import com.jayway.restassured.RestAssured; import com.jayway.restassured.authentication.FormAuthConfig; import com.jayway.restassured.response.Response; import com.jayway.restassured.specification.RequestSpecification; +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = Application.class) +@WebAppConfiguration +@IntegrationTest("server.port:8082") public class LiveTest { - private final FormAuthConfig formAuthConfig = new FormAuthConfig("http://localhost:8081/login", "username", "password"); + private final FormAuthConfig formAuthConfig = new FormAuthConfig("http://localhost:8082/login", "username", "password"); @Test public void givenUserWithReadPrivilegeAndHasPermission_whenGetFooById_thenOK() { - final Response response = givenAuth("john", "123").get("http://localhost:8081/foos/1"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/foos/1"); assertEquals(200, response.getStatusCode()); assertTrue(response.asString().contains("id")); } @Test public void givenUserWithNoWritePrivilegeAndHasPermission_whenPostFoo_thenForbidden() { - final Response response = givenAuth("john", "123").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8081/foos"); + final Response response = givenAuth("john", "123").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8082/foos"); assertEquals(403, response.getStatusCode()); } @Test public void givenUserWithWritePrivilegeAndHasPermission_whenPostFoo_thenOk() { - final Response response = givenAuth("tom", "111").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8081/foos"); + final Response response = givenAuth("tom", "111").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8082/foos"); assertEquals(201, response.getStatusCode()); assertTrue(response.asString().contains("id")); } @@ -40,14 +50,14 @@ public class LiveTest { @Test public void givenUserMemberInOrganization_whenGetOrganization_thenOK() { - final Response response = givenAuth("john", "123").get("http://localhost:8081/organizations/1"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/organizations/1"); assertEquals(200, response.getStatusCode()); assertTrue(response.asString().contains("id")); } @Test public void givenUserMemberNotInOrganization_whenGetOrganization_thenForbidden() { - final Response response = givenAuth("john", "123").get("http://localhost:8081/organizations/2"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/organizations/2"); assertEquals(403, response.getStatusCode()); } @@ -55,7 +65,7 @@ public class LiveTest { @Test public void givenDisabledSecurityExpression_whenGetFooByName_thenError() { - final Response response = givenAuth("john", "123").get("http://localhost:8081/foos?name=sample"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/foos?name=sample"); assertEquals(500, response.getStatusCode()); assertTrue(response.asString().contains("method hasAuthority() not allowed")); } From 65cd2dfb064dcae0c98112d4b37c470e59385e38 Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 12 Oct 2016 12:08:13 -0400 Subject: [PATCH 117/309] Code refactored and updated (#746) * Updated indentation and refactored code * Updated indentation and refactored code * Updated indentation and refactored code * Updated indentation and refactored code * Updated indentation * Updated indentation and refactored code * Updated indentation and refactored code --- spring-jms/pom.xml | 27 +++++----- .../spring/jms/SampleJmsMessageSender.java | 6 +-- .../baeldung/spring/jms/SampleListener.java | 17 +++--- .../src/main/resources/EmbeddedActiveMQ.xml | 27 +++++----- .../src/main/resources/applicationContext.xml | 53 +++++++++++-------- .../jms/MapMessageConvertAndSendTest.java | 6 +-- 6 files changed, 76 insertions(+), 60 deletions(-) diff --git a/spring-jms/pom.xml b/spring-jms/pom.xml index b15c18f991..8e83f82f38 100644 --- a/spring-jms/pom.xml +++ b/spring-jms/pom.xml @@ -11,6 +11,7 @@ 4.3.2.RELEASE 5.12.0 + 4.12 @@ -29,7 +30,7 @@ junit junit - 4.12 + ${junit.version} test @@ -58,16 +59,16 @@ - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - - - spring-jms + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + spring-jms - \ No newline at end of file + diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java index 1ef3902a31..927762f05b 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleJmsMessageSender.java @@ -24,10 +24,6 @@ public class SampleJmsMessageSender { } public void sendMessage(final Employee employee) { - System.out.println("Jms Message Sender : " + employee); - Map map = new HashMap<>(); - map.put("name", employee.getName()); - map.put("age", employee.getAge()); - this.jmsTemplate.convertAndSend(map); + this.jmsTemplate.convertAndSend(employee); } } diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java index eb9d51160d..6d4bef5402 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java @@ -5,13 +5,21 @@ import org.springframework.jms.core.JmsTemplate; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; +import javax.jms.Queue; import javax.jms.TextMessage; import java.util.Map; public class SampleListener implements MessageListener { - public JmsTemplate getJmsTemplate() { - return getJmsTemplate(); + private JmsTemplate jmsTemplate; + private Queue queue; + + public void setJmsTemplate(JmsTemplate jmsTemplate) { + this.jmsTemplate = jmsTemplate; + } + + public void setQueue(Queue queue) { + this.queue = queue; } public void onMessage(Message message) { @@ -19,17 +27,14 @@ public class SampleListener implements MessageListener { try { String msg = ((TextMessage) message).getText(); - System.out.println("Message has been consumed : " + msg); } catch (JMSException ex) { throw new RuntimeException(ex); } - } else { - throw new IllegalArgumentException("Message Error"); } } public Employee receiveMessage() throws JMSException { - Map map = (Map) getJmsTemplate().receiveAndConvert(); + Map map = (Map) this.jmsTemplate.receiveAndConvert(); return new Employee((String) map.get("name"), (Integer) map.get("age")); } } diff --git a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml index 6b419c3270..016b07e831 100644 --- a/spring-jms/src/main/resources/EmbeddedActiveMQ.xml +++ b/spring-jms/src/main/resources/EmbeddedActiveMQ.xml @@ -1,15 +1,18 @@ - - - - - - - - + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" + xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" + xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx" + xmlns:util="http://www.springframework.org/schema/util" xmlns:task="http://www.springframework.org/schema/task" + xmlns:amq="http://activemq.apache.org/schema/core" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://activemq.apache.org/schema/core + http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"> + + + + + + + diff --git a/spring-jms/src/main/resources/applicationContext.xml b/spring-jms/src/main/resources/applicationContext.xml index d94eb4c371..28bf848e59 100644 --- a/spring-jms/src/main/resources/applicationContext.xml +++ b/spring-jms/src/main/resources/applicationContext.xml @@ -1,34 +1,45 @@ + xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd + http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + + + - + + + + + Date: Wed, 12 Oct 2016 19:58:56 +0200 Subject: [PATCH 118/309] modify live test configuration --- spring-security-custom-permission/pom.xml | 129 ++++++++++++------ .../main/java/org/baeldung/Application.java | 3 +- .../src/main/resources/application.properties | 3 +- .../test/java/org/baeldung/web/LiveTest.java | 24 +--- 4 files changed, 102 insertions(+), 57 deletions(-) diff --git a/spring-security-custom-permission/pom.xml b/spring-security-custom-permission/pom.xml index b2854fe7c5..74134ba260 100644 --- a/spring-security-custom-permission/pom.xml +++ b/spring-security-custom-permission/pom.xml @@ -101,53 +101,106 @@ spring-boot-maven-plugin + - maven-surefire-plugin - - ${unit-tests.skip} - - **/*LiveTest.java - - - - - - maven-failsafe-plugin - - - integration-test - - integration-test - - - ${live-tests.skip} - - **/*LiveTest.class - - - - - - + org.apache.maven.plugins + maven-surefire-plugin + + + **/*LiveTest.java + + + + + + + + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + tomcat8x + embedded + + + + + + + 8082 + + + + + + - - - live - - false - false - - - + + + 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 + + + + + + + + + + + UTF-8 1.8 2.4.0 - false - true + 1.6.0 diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/Application.java b/spring-security-custom-permission/src/main/java/org/baeldung/Application.java index a9d6f3b8b1..b4e8d04b49 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/Application.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/Application.java @@ -2,9 +2,10 @@ package org.baeldung; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.web.SpringBootServletInitializer; @SpringBootApplication -public class Application { +public class Application extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Application.class, args); diff --git a/spring-security-custom-permission/src/main/resources/application.properties b/spring-security-custom-permission/src/main/resources/application.properties index 4433a53ac7..9b140b3c69 100644 --- a/spring-security-custom-permission/src/main/resources/application.properties +++ b/spring-security-custom-permission/src/main/resources/application.properties @@ -1,4 +1,5 @@ -server.port=8081 +server.port=8082 +server.context-path=/spring-security-custom-permission spring.datasource.driver-class-name=org.h2.Driver spring.datasource.url=jdbc:h2:mem:security_permission;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE spring.datasource.username=sa diff --git a/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java b/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java index 7e92765dcd..47626b814a 100644 --- a/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java +++ b/spring-security-custom-permission/src/test/java/org/baeldung/web/LiveTest.java @@ -3,45 +3,35 @@ package org.baeldung.web; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import org.baeldung.Application; import org.baeldung.persistence.model.Foo; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.IntegrationTest; -import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.http.MediaType; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; import com.jayway.restassured.RestAssured; import com.jayway.restassured.authentication.FormAuthConfig; import com.jayway.restassured.response.Response; import com.jayway.restassured.specification.RequestSpecification; -@RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = Application.class) -@WebAppConfiguration -@IntegrationTest("server.port:8082") public class LiveTest { - private final FormAuthConfig formAuthConfig = new FormAuthConfig("http://localhost:8082/login", "username", "password"); + private final FormAuthConfig formAuthConfig = new FormAuthConfig("http://localhost:8082/spring-security-custom-permission/login", "username", "password"); @Test public void givenUserWithReadPrivilegeAndHasPermission_whenGetFooById_thenOK() { - final Response response = givenAuth("john", "123").get("http://localhost:8082/foos/1"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/spring-security-custom-permission/foos/1"); assertEquals(200, response.getStatusCode()); assertTrue(response.asString().contains("id")); } @Test public void givenUserWithNoWritePrivilegeAndHasPermission_whenPostFoo_thenForbidden() { - final Response response = givenAuth("john", "123").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8082/foos"); + final Response response = givenAuth("john", "123").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8082/spring-security-custom-permission/foos"); assertEquals(403, response.getStatusCode()); } @Test public void givenUserWithWritePrivilegeAndHasPermission_whenPostFoo_thenOk() { - final Response response = givenAuth("tom", "111").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8082/foos"); + final Response response = givenAuth("tom", "111").contentType(MediaType.APPLICATION_JSON_VALUE).body(new Foo("sample")).post("http://localhost:8082/spring-security-custom-permission/foos"); assertEquals(201, response.getStatusCode()); assertTrue(response.asString().contains("id")); } @@ -50,14 +40,14 @@ public class LiveTest { @Test public void givenUserMemberInOrganization_whenGetOrganization_thenOK() { - final Response response = givenAuth("john", "123").get("http://localhost:8082/organizations/1"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/spring-security-custom-permission/organizations/1"); assertEquals(200, response.getStatusCode()); assertTrue(response.asString().contains("id")); } @Test public void givenUserMemberNotInOrganization_whenGetOrganization_thenForbidden() { - final Response response = givenAuth("john", "123").get("http://localhost:8082/organizations/2"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/spring-security-custom-permission/organizations/2"); assertEquals(403, response.getStatusCode()); } @@ -65,7 +55,7 @@ public class LiveTest { @Test public void givenDisabledSecurityExpression_whenGetFooByName_thenError() { - final Response response = givenAuth("john", "123").get("http://localhost:8082/foos?name=sample"); + final Response response = givenAuth("john", "123").get("http://localhost:8082/spring-security-custom-permission/foos?name=sample"); assertEquals(500, response.getStatusCode()); assertTrue(response.asString().contains("method hasAuthority() not allowed")); } From d2ede5b6ceb459635f3d698b30f8d94182f9fa59 Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 13 Oct 2016 00:14:52 +0200 Subject: [PATCH 119/309] minor fix --- .../baeldung/persistence/query/JPACriteriaQueryTest.java | 2 +- .../baeldung/persistence/query/JPASpecificationTest.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java index f9f9435d75..e9c8659347 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java @@ -98,7 +98,7 @@ public class JPACriteriaQueryTest { @Test public void givenPartialFirst_whenGettingListOfUsers_thenCorrect() { final List params = new ArrayList(); - params.add(new SearchCriteria("firstName", ":", "jo")); + params.add(new SearchCriteria("firstName", ":", "Jo")); final List results = userApi.searchUser(params); diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java index 97b2274cf9..52bd43cc8c 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java @@ -54,8 +54,8 @@ public class JPASpecificationTest { @Test public void givenFirstAndLastName_whenGettingListOfUsers_thenCorrect() { - final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.EQUALITY, "john")); - final UserSpecification spec1 = new UserSpecification(new SpecSearchCriteria("lastName", SearchOperation.EQUALITY, "doe")); + final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.EQUALITY, "John")); + final UserSpecification spec1 = new UserSpecification(new SpecSearchCriteria("lastName", SearchOperation.EQUALITY, "Doe")); final List results = repository.findAll(Specifications.where(spec).and(spec1)); assertThat(userJohn, isIn(results)); @@ -64,7 +64,7 @@ public class JPASpecificationTest { @Test public void givenFirstNameInverse_whenGettingListOfUsers_thenCorrect() { - final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.NEGATION, "john")); + final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.NEGATION, "John")); final List results = repository.findAll(Specifications.where(spec)); assertThat(userTom, isIn(results)); @@ -82,7 +82,7 @@ public class JPASpecificationTest { @Test public void givenFirstNamePrefix_whenGettingListOfUsers_thenCorrect() { - final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.STARTS_WITH, "jo")); + final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.STARTS_WITH, "Jo")); final List results = repository.findAll(spec); assertThat(userJohn, isIn(results)); From 15f5a9eca1a2a984b70bd375a417a99c24e907a1 Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 13 Oct 2016 00:15:09 +0200 Subject: [PATCH 120/309] config test db --- spring-security-rest-full/pom.xml | 5 +++++ .../resources/persistence-mysql.properties | 22 ++++++++++++++----- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/spring-security-rest-full/pom.xml b/spring-security-rest-full/pom.xml index dff9f7ed4f..b354e61b35 100644 --- a/spring-security-rest-full/pom.xml +++ b/spring-security-rest-full/pom.xml @@ -173,6 +173,11 @@ runtime + + com.h2database + h2 + + diff --git a/spring-security-rest-full/src/test/resources/persistence-mysql.properties b/spring-security-rest-full/src/test/resources/persistence-mysql.properties index 8263b0d9ac..839a466533 100644 --- a/spring-security-rest-full/src/test/resources/persistence-mysql.properties +++ b/spring-security-rest-full/src/test/resources/persistence-mysql.properties @@ -1,10 +1,22 @@ +## jdbc.X +#jdbc.driverClassName=com.mysql.jdbc.Driver +#jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate4_01?createDatabaseIfNotExist=true +#jdbc.user=tutorialuser +#jdbc.pass=tutorialmy5ql +# +## hibernate.X +#hibernate.dialect=org.hibernate.dialect.MySQL5Dialect +#hibernate.show_sql=false +#hibernate.hbm2ddl.auto=create-drop + + # jdbc.X -jdbc.driverClassName=com.mysql.jdbc.Driver -jdbc.url=jdbc:mysql://localhost:3306/spring_hibernate4_01?createDatabaseIfNotExist=true -jdbc.user=tutorialuser -jdbc.pass=tutorialmy5ql +jdbc.driverClassName=org.h2.Driver +jdbc.url=jdbc:h2:mem:security_permission;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE +jdbc.user=sa +jdbc.pass= # hibernate.X -hibernate.dialect=org.hibernate.dialect.MySQL5Dialect +hibernate.dialect=org.hibernate.dialect.H2Dialect hibernate.show_sql=false hibernate.hbm2ddl.auto=create-drop From 131b695268342726e8e7e78d77ca8b983912164b Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Thu, 13 Oct 2016 11:17:46 +0700 Subject: [PATCH 121/309] Refactors Apache CXF JAXRS implementation --- .../java/com/baeldung/cxf/jaxrs/implementation/Course.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java index 9ab74bea58..802a19e961 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java @@ -61,13 +61,11 @@ public class Course { @Path("{studentOrder}") public Response deleteStudent(@PathParam("studentOrder") int studentOrder) { Student student = students.get(studentOrder); - Response response; if (student != null) { students.remove(studentOrder); - response = Response.ok().build(); + return Response.ok().build(); } else { - response = Response.notModified().build(); + return Response.notModified().build(); } - return response; } } \ No newline at end of file From 08c9791cb4559e27857bfdc5c911072c4ffd3ba8 Mon Sep 17 00:00:00 2001 From: maibin Date: Thu, 13 Oct 2016 07:08:59 +0200 Subject: [PATCH 122/309] Thymeleaf decorator (#747) * 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 * Thymeleaf Natural Processing and Inlining * Expression Utility Objects, Thymeleaf * listOfStudents edited * Thymeleaf layout decorators --- spring-thymeleaf/pom.xml | 356 +++++++++--------- .../thymeleaf/config/WebMVCConfig.java | 4 + .../controller/LayoutDialectController.java | 16 + .../main/webapp/WEB-INF/views/content.html | 16 + .../webapp/WEB-INF/views/listStudents.html | 2 +- .../main/webapp/WEB-INF/views/template.html | 20 + .../LayoutDialectControllerTest.java | 58 +++ 7 files changed, 296 insertions(+), 176 deletions(-) create mode 100644 spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/LayoutDialectController.java create mode 100644 spring-thymeleaf/src/main/webapp/WEB-INF/views/content.html create mode 100644 spring-thymeleaf/src/main/webapp/WEB-INF/views/template.html create mode 100644 spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerTest.java diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index a13f1de4c7..960b358fe2 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -5,186 +5,192 @@ 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 + + 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 - + + 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} + + + + nz.net.ultraq.thymeleaf + thymeleaf-layout-dialect + 2.0.4 + + + + 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/WebMVCConfig.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/config/WebMVCConfig.java index 444b780673..ab048bdd87 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 @@ -22,6 +22,9 @@ import org.thymeleaf.templateresolver.ITemplateResolver; import com.baeldung.thymeleaf.formatter.NameFormatter; import com.baeldung.thymeleaf.utils.ArrayUtil; +import nz.net.ultraq.thymeleaf.LayoutDialect; +import nz.net.ultraq.thymeleaf.decorators.strategies.GroupingStrategy; + @Configuration @EnableWebMvc @@ -70,6 +73,7 @@ public class WebMVCConfig extends WebMvcConfigurerAdapter implements Application private TemplateEngine templateEngine(ITemplateResolver templateResolver) { SpringTemplateEngine engine = new SpringTemplateEngine(); + engine.addDialect(new LayoutDialect(new GroupingStrategy())); engine.setTemplateResolver(templateResolver); return engine; } diff --git a/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/LayoutDialectController.java b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/LayoutDialectController.java new file mode 100644 index 0000000000..28a38ce30b --- /dev/null +++ b/spring-thymeleaf/src/main/java/com/baeldung/thymeleaf/controller/LayoutDialectController.java @@ -0,0 +1,16 @@ +package com.baeldung.thymeleaf.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; + +@Controller +public class LayoutDialectController { + + @RequestMapping(value = "/layout", method = RequestMethod.GET) + public String getNewPage(Model model) { + return "content.html"; + } + +} diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/content.html b/spring-thymeleaf/src/main/webapp/WEB-INF/views/content.html new file mode 100644 index 0000000000..1184e28e13 --- /dev/null +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/views/content.html @@ -0,0 +1,16 @@ + + + +Layout Dialect Example + + +
    +

    This is a custom content that you can provide

    +
    +
    +

    This is some footer content + that you can change

    +
    + + \ No newline at end of file diff --git a/spring-thymeleaf/src/main/webapp/WEB-INF/views/listStudents.html b/spring-thymeleaf/src/main/webapp/WEB-INF/views/listStudents.html index a894e41e88..c7d17a4f66 100644 --- a/spring-thymeleaf/src/main/webapp/WEB-INF/views/listStudents.html +++ b/spring-thymeleaf/src/main/webapp/WEB-INF/views/listStudents.html @@ -6,7 +6,7 @@ - + + +
    +

    New dialect example

    +
    +
    +

    Your page content goes here

    +
    +
    +

    My custom footer

    +

    Your custom footer here

    +
    + + \ No newline at end of file diff --git a/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerTest.java b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerTest.java new file mode 100644 index 0000000000..33731f130d --- /dev/null +++ b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerTest.java @@ -0,0 +1,58 @@ +package com.baeldung.thymeleaf.controller; + +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.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view; + +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.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 LayoutDialectControllerTest { + + @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 testGetDates() throws Exception{ + mockMvc.perform(get("/layout").with(testUser()).with(csrf())).andExpect(status().isOk()).andExpect(view().name("content.html")); + } + +} From e92dbccb7834c6769634be174b00293606331fd3 Mon Sep 17 00:00:00 2001 From: nguyennamthai Date: Thu, 13 Oct 2016 12:16:33 +0700 Subject: [PATCH 123/309] Refactors Apache CXF JAXRS implementation (#748) --- .../java/com/baeldung/cxf/jaxrs/implementation/Course.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java index 9ab74bea58..802a19e961 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java @@ -61,13 +61,11 @@ public class Course { @Path("{studentOrder}") public Response deleteStudent(@PathParam("studentOrder") int studentOrder) { Student student = students.get(studentOrder); - Response response; if (student != null) { students.remove(studentOrder); - response = Response.ok().build(); + return Response.ok().build(); } else { - response = Response.notModified().build(); + return Response.notModified().build(); } - return response; } } \ No newline at end of file From 6a7e380efd723779d337ae241281fe34282cbba0 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 13 Oct 2016 07:22:11 +0200 Subject: [PATCH 124/309] Refactor REST with CXF example --- .../cxf/jaxrs/implementation/Baeldung.java | 18 ++++------- .../cxf/jaxrs/implementation/Course.java | 14 +++------ .../cxf/jaxrs/implementation/ServiceTest.java | 30 ++++++++----------- 3 files changed, 23 insertions(+), 39 deletions(-) diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java index 5617f482f8..592df4b7c3 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java @@ -1,17 +1,12 @@ package com.baeldung.cxf.jaxrs.implementation; +import javax.ws.rs.*; +import javax.ws.rs.core.Response; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.ws.rs.GET; -import javax.ws.rs.PUT; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.Produces; -import javax.ws.rs.core.Response; - @Path("baeldung") @Produces("text/xml") public class Baeldung { @@ -51,14 +46,13 @@ public class Baeldung { @Path("courses/{courseOrder}") public Response putCourse(@PathParam("courseOrder") int courseOrder, Course course) { Course existingCourse = courses.get(courseOrder); - Response response; + if (existingCourse == null || existingCourse.getId() != course.getId() || !(existingCourse.getName().equals(course.getName()))) { courses.put(courseOrder, course); - response = Response.ok().build(); - } else { - response = Response.notModified().build(); + return Response.ok().build(); } - return response; + + return Response.notModified().build(); } @Path("courses/{courseOrder}/students") diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java index 802a19e961..32689a332f 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java @@ -1,17 +1,11 @@ package com.baeldung.cxf.jaxrs.implementation; +import javax.ws.rs.*; +import javax.ws.rs.core.Response; +import javax.xml.bind.annotation.XmlRootElement; import java.util.ArrayList; import java.util.List; -import javax.ws.rs.DELETE; -import javax.ws.rs.GET; -import javax.ws.rs.POST; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.core.Response; - -import javax.xml.bind.annotation.XmlRootElement; - @XmlRootElement(name = "Course") public class Course { private int id; @@ -51,7 +45,7 @@ public class Course { @POST public Response postStudent(Student student) { if (students == null) { - students = new ArrayList(); + students = new ArrayList<>(); } students.add(student); return Response.ok(student).build(); diff --git a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java index 48749a568e..8c606436c8 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java @@ -1,18 +1,5 @@ package com.baeldung.cxf.jaxrs.implementation; -import static org.junit.Assert.assertEquals; - -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; - -import javax.xml.bind.JAXB; - import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPost; @@ -20,6 +7,17 @@ import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.InputStreamEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; + +import javax.xml.bind.JAXB; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; + +import static org.junit.Assert.assertEquals; public class ServiceTest { private static final String BASE_URL = "http://localhost:8080/baeldung/courses/"; @@ -80,14 +78,12 @@ public class ServiceTest { private Course getCourse(int courseOrder) throws IOException { URL url = new URL(BASE_URL + courseOrder); InputStream input = url.openStream(); - Course course = JAXB.unmarshal(new InputStreamReader(input), Course.class); - return course; + return JAXB.unmarshal(new InputStreamReader(input), Course.class); } private Student getStudent(int courseOrder, int studentOrder) throws IOException { URL url = new URL(BASE_URL + courseOrder + "/students/" + studentOrder); InputStream input = url.openStream(); - Student student = JAXB.unmarshal(new InputStreamReader(input), Student.class); - return student; + return JAXB.unmarshal(new InputStreamReader(input), Student.class); } } \ No newline at end of file From c8e034a07b114dd2329ec6c5cc12aca34c8c67fe Mon Sep 17 00:00:00 2001 From: "lcrusoveanu@optaros.com" Date: Thu, 13 Oct 2016 09:53:11 +0300 Subject: [PATCH 125/309] fix imports --- .../test/java/org/baeldung/web/CustomUserDetailsServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java index 0c82a4e98b..fbc0c20144 100644 --- a/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java +++ b/spring-security-custom-permission/src/test/java/org/baeldung/web/CustomUserDetailsServiceTest.java @@ -9,6 +9,7 @@ import org.baeldung.persistence.dao.UserRepository; import org.baeldung.persistence.model.User; import org.junit.Test; import org.junit.runner.RunWith; +import org.junit.After; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.security.authentication.AuthenticationProvider; From 70eb0501c651b13cc74f9fff1164e7d3aac9bd5b Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Thu, 13 Oct 2016 10:02:09 +0200 Subject: [PATCH 126/309] Delete okhttp project --- okhttp/pom.xml | 76 ------------ .../okhttp/DefaultContentTypeInterceptor.java | 26 ----- .../okhttp/ProgressRequestWrapper.java | 74 ------------ .../okhttp/OkHttpFileUploadingTest.java | 81 ------------- .../org/baeldung/okhttp/OkHttpGetTest.java | 78 ------------- .../org/baeldung/okhttp/OkHttpHeaderTest.java | 48 -------- .../org/baeldung/okhttp/OkHttpMiscTest.java | 107 ----------------- .../baeldung/okhttp/OkHttpPostingTest.java | 109 ------------------ .../baeldung/okhttp/OkHttpRedirectTest.java | 33 ------ okhttp/src/test/resources/test.txt | 1 - 10 files changed, 633 deletions(-) delete mode 100644 okhttp/pom.xml delete mode 100644 okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java delete mode 100644 okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java delete mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java delete mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java delete mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java delete mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java delete mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java delete mode 100644 okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java delete mode 100644 okhttp/src/test/resources/test.txt diff --git a/okhttp/pom.xml b/okhttp/pom.xml deleted file mode 100644 index 4d371f40b0..0000000000 --- a/okhttp/pom.xml +++ /dev/null @@ -1,76 +0,0 @@ - - 4.0.0 - org.baeldung.okhttp - okhttp - 0.0.1-SNAPSHOT - - - - - - - com.squareup.okhttp3 - okhttp - ${com.squareup.okhttp3.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} - - - - - junit - junit - ${junit.version} - test - - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - - - - - - 3.4.1 - - - 1.7.13 - 1.1.3 - - - 1.3 - 4.12 - - - - diff --git a/okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java b/okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java deleted file mode 100644 index 2a33a1febd..0000000000 --- a/okhttp/src/main/java/org/baeldung/okhttp/DefaultContentTypeInterceptor.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.baeldung.okhttp; - -import java.io.IOException; - -import okhttp3.Interceptor; -import okhttp3.Request; -import okhttp3.Response; - -public class DefaultContentTypeInterceptor implements Interceptor { - - private final String contentType; - - public DefaultContentTypeInterceptor(String contentType) { - this.contentType = contentType; - } - - public Response intercept(Interceptor.Chain chain) throws IOException { - - Request originalRequest = chain.request(); - Request requestWithUserAgent = originalRequest.newBuilder() - .header("Content-Type", contentType) - .build(); - - return chain.proceed(requestWithUserAgent); - } -} diff --git a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java b/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java deleted file mode 100644 index 255d10b98a..0000000000 --- a/okhttp/src/main/java/org/baeldung/okhttp/ProgressRequestWrapper.java +++ /dev/null @@ -1,74 +0,0 @@ -package org.baeldung.okhttp; - -import okhttp3.RequestBody; -import okhttp3.MediaType; - -import java.io.IOException; - -import okio.Buffer; -import okio.BufferedSink; -import okio.ForwardingSink; -import okio.Okio; -import okio.Sink; - -public class ProgressRequestWrapper extends RequestBody { - - protected RequestBody delegate; - protected ProgressListener listener; - - protected CountingSink countingSink; - - public ProgressRequestWrapper(RequestBody delegate, ProgressListener listener) { - this.delegate = delegate; - this.listener = listener; - } - - @Override - public MediaType contentType() { - return delegate.contentType(); - } - - @Override - public long contentLength() throws IOException { - return delegate.contentLength(); - } - - @Override - public void writeTo(BufferedSink sink) throws IOException { - - BufferedSink bufferedSink; - - countingSink = new CountingSink(sink); - bufferedSink = Okio.buffer(countingSink); - - delegate.writeTo(bufferedSink); - - bufferedSink.flush(); - } - - protected final class CountingSink extends ForwardingSink { - - private long bytesWritten = 0; - - public CountingSink(Sink delegate) { - super(delegate); - } - - @Override - public void write(Buffer source, long byteCount) throws IOException { - - super.write(source, byteCount); - - bytesWritten += byteCount; - listener.onRequestProgress(bytesWritten, contentLength()); - } - - } - - public interface ProgressListener { - - void onRequestProgress(long bytesWritten, long contentLength); - - } -} - diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java deleted file mode 100644 index 77219b8e22..0000000000 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java +++ /dev/null @@ -1,81 +0,0 @@ -package org.baeldung.okhttp; - -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; - -import java.io.File; -import java.io.IOException; - -import org.baeldung.okhttp.ProgressRequestWrapper; -import org.junit.Test; - -import okhttp3.Call; -import okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; - -public class OkHttpFileUploadingTest { - - private static final String BASE_URL = "http://localhost:8080/spring-rest"; - - @Test - public void whenUploadFile_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - RequestBody requestBody = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.txt", - RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) - .build(); - - Request request = new Request.Builder() - .url(BASE_URL + "/users/upload") - .post(requestBody) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - } - - @Test - public void whenGetUploadFileProgress_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - RequestBody requestBody = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("file", "file.txt", - RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) - .build(); - - - ProgressRequestWrapper.ProgressListener listener = new ProgressRequestWrapper.ProgressListener() { - - public void onRequestProgress(long bytesWritten, long contentLength) { - - float percentage = 100f * bytesWritten / contentLength; - assertFalse(Float.compare(percentage, 100) > 0); - } - }; - - ProgressRequestWrapper countingBody = new ProgressRequestWrapper(requestBody, listener); - - Request request = new Request.Builder() - .url(BASE_URL + "/users/upload") - .post(countingBody) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - - } -} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java deleted file mode 100644 index de954e3dd7..0000000000 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java +++ /dev/null @@ -1,78 +0,0 @@ -package org.baeldung.okhttp; - -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; - -import java.io.IOException; - -import org.junit.Test; - -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.HttpUrl; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; - -public class OkHttpGetTest { - - private static final String BASE_URL = "http://localhost:8080/spring-rest"; - - @Test - public void whenGetRequest_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - Request request = new Request.Builder() - .url(BASE_URL + "/date") - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - } - - @Test - public void whenGetRequestWithQueryParameter_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - HttpUrl.Builder urlBuilder = HttpUrl.parse(BASE_URL + "/ex/bars").newBuilder(); - urlBuilder.addQueryParameter("id", "1"); - - String url = urlBuilder.build().toString(); - - Request request = new Request.Builder() - .url(url) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - } - - @Test - public void whenAsynchronousGetRequest_thenCorrect() { - - OkHttpClient client = new OkHttpClient(); - - Request request = new Request.Builder() - .url(BASE_URL + "/date") - .build(); - - Call call = client.newCall(request); - - call.enqueue(new Callback() { - - public void onResponse(Call call, Response response) throws IOException { - assertThat(response.code(), equalTo(200)); - } - - public void onFailure(Call call, IOException e) { - - } - }); - } -} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java deleted file mode 100644 index 958eeb51ce..0000000000 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package org.baeldung.okhttp; - -import java.io.IOException; - -import org.junit.Test; - -import okhttp3.Call; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; - -public class OkHttpHeaderTest { - - private static final String SAMPLE_URL = "http://www.github.com"; - - @Test - public void whenSetHeader_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - Request request = new Request.Builder() - .url(SAMPLE_URL) - .addHeader("Content-Type", "application/json") - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - response.close(); - } - - @Test - public void whenSetDefaultHeader_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient.Builder() - .addInterceptor(new DefaultContentTypeInterceptor("application/json")) - .build(); - - Request request = new Request.Builder() - .url(SAMPLE_URL) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - response.close(); - } - - -} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java deleted file mode 100644 index fe15a76200..0000000000 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.baeldung.okhttp; - -import java.io.File; -import java.io.IOException; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import okhttp3.Cache; -import okhttp3.Call; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; - -public class OkHttpMiscTest { - - private static final String BASE_URL = "http://localhost:8080/spring-rest"; - private static Logger logger = LoggerFactory.getLogger(OkHttpMiscTest.class); - - @Test - public void whenSetRequestTimeout_thenFail() throws IOException { - - OkHttpClient client = new OkHttpClient.Builder() - .readTimeout(1, TimeUnit.SECONDS) - .build(); - - Request request = new Request.Builder() - .url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay. - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - response.close(); - } - - @Test - public void whenCancelRequest_thenCorrect() throws IOException { - - ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); - - OkHttpClient client = new OkHttpClient(); - - Request request = new Request.Builder() - .url(BASE_URL + "/delay/2") // This URL is served with a 2 second delay. - .build(); - - final int seconds = 1; - - final long startNanos = System.nanoTime(); - final Call call = client.newCall(request); - - // Schedule a job to cancel the call in 1 second. - executor.schedule(new Runnable() { - public void run() { - - logger.debug("Canceling call: " + (System.nanoTime() - startNanos) / 1e9f); - call.cancel(); - logger.debug("Canceled call: " + (System.nanoTime() - startNanos) / 1e9f); - } - }, seconds, TimeUnit.SECONDS); - - try { - - logger.debug("Executing call: " + (System.nanoTime() - startNanos) / 1e9f); - Response response = call.execute(); - logger.debug("Call was expected to fail, but completed: " + (System.nanoTime() - startNanos) / 1e9f, response); - - } catch (IOException e) { - - logger.debug("Call failed as expected: " + (System.nanoTime() - startNanos) / 1e9f, e); - } - } - - @Test - public void whenSetResponseCache_thenCorrect() throws IOException { - - int cacheSize = 10 * 1024 * 1024; // 10 MiB - File cacheDirectory = new File("src/test/resources/cache"); - Cache cache = new Cache(cacheDirectory, cacheSize); - - OkHttpClient client = new OkHttpClient.Builder() - .cache(cache) - .build(); - - Request request = new Request.Builder() - .url("http://publicobject.com/helloworld.txt") - .build(); - - Response response1 = client.newCall(request).execute(); - logResponse(response1); - - Response response2 = client.newCall(request).execute(); - logResponse(response2); - } - - private void logResponse(Response response) throws IOException { - - logger.debug("Response response: " + response); - logger.debug("Response cache response: " + response.cacheResponse()); - logger.debug("Response network response: " + response.networkResponse()); - logger.debug("Response responseBody: " + response.body().string()); - } -} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java deleted file mode 100644 index 41a024d2ee..0000000000 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.baeldung.okhttp; - -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; - -import java.io.File; -import java.io.IOException; - -import org.junit.Test; - -import okhttp3.Call; -import okhttp3.Credentials; -import okhttp3.FormBody; -import okhttp3.MediaType; -import okhttp3.MultipartBody; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; -import okhttp3.Response; - -public class OkHttpPostingTest { - - private static final String BASE_URL = "http://localhost:8080/spring-rest"; - private static final String URL_SECURED_BY_BASIC_AUTHENTICATION = "http://browserspy.dk/password-ok.php"; - - @Test - public void whenSendPostRequest_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - RequestBody formBody = new FormBody.Builder() - .add("username", "test") - .add("password", "test") - .build(); - - Request request = new Request.Builder() - .url(BASE_URL + "/users") - .post(formBody) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - } - - @Test - public void whenSendPostRequestWithAuthorization_thenCorrect() throws IOException { - - String postBody = "test post"; - - OkHttpClient client = new OkHttpClient(); - - Request request = new Request.Builder() - .url(URL_SECURED_BY_BASIC_AUTHENTICATION) - .addHeader("Authorization", Credentials.basic("test", "test")) - .post(RequestBody.create(MediaType.parse("text/x-markdown; charset=utf-8"), postBody)) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - } - - @Test - public void whenPostJson_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - String json = "{\"id\":1,\"name\":\"John\"}"; - - RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), json); - - Request request = new Request.Builder() - .url(BASE_URL + "/users/detail") - .post(body) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - } - - @Test - public void whenSendMultipartRequest_thenCorrect() throws IOException { - - OkHttpClient client = new OkHttpClient(); - - RequestBody requestBody = new MultipartBody.Builder() - .setType(MultipartBody.FORM) - .addFormDataPart("username", "test") - .addFormDataPart("password", "test") - .addFormDataPart("file", "file.txt", - RequestBody.create(MediaType.parse("application/octet-stream"), new File("src/test/resources/test.txt"))) - .build(); - - Request request = new Request.Builder() - .url(BASE_URL + "/users/multipart") - .post(requestBody) - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(200)); - } -} diff --git a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java b/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java deleted file mode 100644 index c709253478..0000000000 --- a/okhttp/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.baeldung.okhttp; - -import static org.hamcrest.Matchers.equalTo; -import static org.junit.Assert.assertThat; - -import java.io.IOException; - -import org.junit.Test; - -import okhttp3.Call; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.Response; - -public class OkHttpRedirectTest { - - @Test - public void whenSetFollowRedirects_thenNotRedirected() throws IOException { - - OkHttpClient client = new OkHttpClient().newBuilder() - .followRedirects(false) - .build(); - - Request request = new Request.Builder() - .url("http://t.co/I5YYd9tddw") - .build(); - - Call call = client.newCall(request); - Response response = call.execute(); - - assertThat(response.code(), equalTo(301)); - } -} diff --git a/okhttp/src/test/resources/test.txt b/okhttp/src/test/resources/test.txt deleted file mode 100644 index 95d09f2b10..0000000000 --- a/okhttp/src/test/resources/test.txt +++ /dev/null @@ -1 +0,0 @@ -hello world \ No newline at end of file From 5329c54f28fc2c6b853454547b62b256f03c2ffc Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Thu, 13 Oct 2016 10:20:18 +0200 Subject: [PATCH 127/309] Code improvement --- pom.xml | 3 +-- spring-rest/README.md | 3 ++- ...ileUploadingTest.java => OkHttpFileUploadingLiveTest.java} | 2 +- .../okhttp/{OkHttpGetTest.java => OkHttpGetLiveTest.java} | 2 +- .../{OkHttpHeaderTest.java => OkHttpHeaderLiveTest.java} | 2 +- .../okhttp/{OkHttpMiscTest.java => OkHttpMiscLiveTest.java} | 4 ++-- .../{OkHttpPostingTest.java => OkHttpPostingLiveTest.java} | 2 +- .../{OkHttpRedirectTest.java => OkHttpRedirectLiveTest.java} | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) rename spring-rest/src/test/java/org/baeldung/okhttp/{OkHttpFileUploadingTest.java => OkHttpFileUploadingLiveTest.java} (95%) rename spring-rest/src/test/java/org/baeldung/okhttp/{OkHttpGetTest.java => OkHttpGetLiveTest.java} (94%) rename spring-rest/src/test/java/org/baeldung/okhttp/{OkHttpHeaderTest.java => OkHttpHeaderLiveTest.java} (93%) rename spring-rest/src/test/java/org/baeldung/okhttp/{OkHttpMiscTest.java => OkHttpMiscLiveTest.java} (95%) rename spring-rest/src/test/java/org/baeldung/okhttp/{OkHttpPostingTest.java => OkHttpPostingLiveTest.java} (95%) rename spring-rest/src/test/java/org/baeldung/okhttp/{OkHttpRedirectTest.java => OkHttpRedirectLiveTest.java} (91%) diff --git a/pom.xml b/pom.xml index 5526c1e2a3..0808397464 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ apache-cxf autovalue-tutorial - + cdi core-java core-java-8 @@ -69,7 +69,6 @@ rest-assured rest-testing resteasy - okhttp spring-all spring-akka diff --git a/spring-rest/README.md b/spring-rest/README.md index 7d993b38b8..77d12063ed 100644 --- a/spring-rest/README.md +++ b/spring-rest/README.md @@ -5,8 +5,9 @@ ###The Course The "REST With Spring" Classes: http://bit.ly/restwithspring -### Relevant Articles: +### Relevant Articles: - [Spring @RequestMapping](http://www.baeldung.com/spring-requestmapping) - [Http Message Converters with the Spring Framework](http://www.baeldung.com/spring-httpmessageconverter-rest) - [Redirect in Spring](http://www.baeldung.com/spring-redirect-and-forward) - [Returning Custom Status Codes from Spring Controllers](http://www.baeldung.com/spring-mvc-controller-custom-http-status-code) +- [A Guide to OkHttp](http://www.baeldung.com/guide-to-okhttp) diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingLiveTest.java similarity index 95% rename from spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java rename to spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingLiveTest.java index 77219b8e22..d1cc67b99a 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpFileUploadingLiveTest.java @@ -18,7 +18,7 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -public class OkHttpFileUploadingTest { +public class OkHttpFileUploadingLiveTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java similarity index 94% rename from spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java rename to spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java index de954e3dd7..9a49c8d9a2 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpGetLiveTest.java @@ -14,7 +14,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -public class OkHttpGetTest { +public class OkHttpGetLiveTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderLiveTest.java similarity index 93% rename from spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java rename to spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderLiveTest.java index 958eeb51ce..8eddfcb135 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpHeaderLiveTest.java @@ -9,7 +9,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -public class OkHttpHeaderTest { +public class OkHttpHeaderLiveTest { private static final String SAMPLE_URL = "http://www.github.com"; diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscLiveTest.java similarity index 95% rename from spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java rename to spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscLiveTest.java index fe15a76200..c44500f4be 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpMiscLiveTest.java @@ -16,10 +16,10 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -public class OkHttpMiscTest { +public class OkHttpMiscLiveTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; - private static Logger logger = LoggerFactory.getLogger(OkHttpMiscTest.class); + private static Logger logger = LoggerFactory.getLogger(OkHttpMiscLiveTest.class); @Test public void whenSetRequestTimeout_thenFail() throws IOException { diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingLiveTest.java similarity index 95% rename from spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java rename to spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingLiveTest.java index 41a024d2ee..18bd4cdcb3 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpPostingLiveTest.java @@ -18,7 +18,7 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -public class OkHttpPostingTest { +public class OkHttpPostingLiveTest { private static final String BASE_URL = "http://localhost:8080/spring-rest"; private static final String URL_SECURED_BY_BASIC_AUTHENTICATION = "http://browserspy.dk/password-ok.php"; diff --git a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectLiveTest.java similarity index 91% rename from spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java rename to spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectLiveTest.java index c709253478..d568a4fdf7 100644 --- a/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectTest.java +++ b/spring-rest/src/test/java/org/baeldung/okhttp/OkHttpRedirectLiveTest.java @@ -12,7 +12,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -public class OkHttpRedirectTest { +public class OkHttpRedirectLiveTest { @Test public void whenSetFollowRedirects_thenNotRedirected() throws IOException { From e95d1e2908e2a2f2917a2e0042f4f0e45b770e75 Mon Sep 17 00:00:00 2001 From: Chris Anatalio Date: Thu, 13 Oct 2016 07:54:58 -0700 Subject: [PATCH 128/309] @BeforeClass annotation and made setUp() method static --- .../es/repository/ProductInfoRepositoryIntegrationTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java index 43369d3254..2421505acd 100644 --- a/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java +++ b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java @@ -48,9 +48,9 @@ public class ProductInfoRepositoryIntegrationTest { private static final String EXPECTED_COST = "20"; private static final String EXPECTED_PRICE = "50"; - @Before + @BeforeClass @Ignore - public void setUp() throws Exception { + public static void setUp() throws Exception { try { dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB); From 427b012ee4707f4ce38b56abaa034ffe841b8e92 Mon Sep 17 00:00:00 2001 From: Chris Anatalio Date: Thu, 13 Oct 2016 07:59:24 -0700 Subject: [PATCH 129/309] Checking amazonDynamoDBEndpoint string is not empty --- .../java/com/baeldung/spring/data/es/config/DynamoDBConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java index b215e357d9..f98292ea06 100644 --- a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java @@ -27,7 +27,7 @@ public class DynamoDBConfig { @Bean public AmazonDynamoDB amazonDynamoDB() { AmazonDynamoDB amazonDynamoDB = new AmazonDynamoDBClient(amazonAWSCredentials()); - if (StringUtils.isEmpty(amazonDynamoDBEndpoint)) { + if (!StringUtils.isEmpty(amazonDynamoDBEndpoint)) { amazonDynamoDB.setEndpoint(amazonDynamoDBEndpoint); } return amazonDynamoDB; From c4638f1b4aa0efccdd4ce03fbcdff43170be7306 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 13 Oct 2016 18:35:13 +0300 Subject: [PATCH 130/309] Fix SpringJMS examples --- .../baeldung/spring/jms/SampleListener.java | 2 +- .../jms/MapMessageConvertAndSendTest.java | 24 ------------------- 2 files changed, 1 insertion(+), 25 deletions(-) delete mode 100644 spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java diff --git a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java index 6d4bef5402..f35c22e144 100644 --- a/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java +++ b/spring-jms/src/main/java/com/baeldung/spring/jms/SampleListener.java @@ -25,8 +25,8 @@ public class SampleListener implements MessageListener { public void onMessage(Message message) { if (message instanceof TextMessage) { try { - String msg = ((TextMessage) message).getText(); + System.out.println("Received message: " + msg); } catch (JMSException ex) { throw new RuntimeException(ex); } diff --git a/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java b/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java deleted file mode 100644 index c0761939ad..0000000000 --- a/spring-jms/src/test/java/com/baeldung/spring/jms/MapMessageConvertAndSendTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.baeldung.spring.jms; - -import org.junit.BeforeClass; -import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; - -public class DefaultTextMessageSenderTest { - - private static SampleJmsMessageSender messageProducer; - - @SuppressWarnings("resource") - @BeforeClass - public static void setUp() { - ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:EmbeddedActiveMQ.xml", "classpath:applicationContext.xml"); - messageProducer = (SampleJmsMessageSender) applicationContext.getBean("SampleJmsMessageSender"); - } - - @Test - public void testSimpleSend() { - messageProducer.simpleSend(); - } - -} From 7b6418e84c3fcb7ef50736153869c16bc1f4cc68 Mon Sep 17 00:00:00 2001 From: "chris.anatalio" Date: Thu, 13 Oct 2016 23:12:20 -0700 Subject: [PATCH 131/309] Cleaned up readme and application properties --- spring-boot-data-dynamodb/README.MD | 3 +-- .../src/main/resources/application.properties | 4 ---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/spring-boot-data-dynamodb/README.MD b/spring-boot-data-dynamodb/README.MD index 2a87b46021..8b13789179 100644 --- a/spring-boot-data-dynamodb/README.MD +++ b/spring-boot-data-dynamodb/README.MD @@ -1,2 +1 @@ -###The Course -The "REST With Spring" Classes: http://bit.ly/restwithspring + diff --git a/spring-boot-data-dynamodb/src/main/resources/application.properties b/spring-boot-data-dynamodb/src/main/resources/application.properties index d30045d1dc..fb5c8e2da0 100644 --- a/spring-boot-data-dynamodb/src/main/resources/application.properties +++ b/spring-boot-data-dynamodb/src/main/resources/application.properties @@ -8,10 +8,6 @@ endpoints.shutdown.enabled=true endpoints.jmx.domain=Spring Sample Application endpoints.jmx.uniqueNames=true -##jolokia.config.debug=true -##endpoints.jolokia.enabled=true -##endpoints.jolokia.path=jolokia - spring.jmx.enabled=true endpoints.jmx.enabled=true From a55b725cd322ba7d3e8fc705924b966628792649 Mon Sep 17 00:00:00 2001 From: "chris.anatalio" Date: Thu, 13 Oct 2016 23:18:01 -0700 Subject: [PATCH 132/309] Removed *'s added to illustrate spacing --- spring-boot-data-dynamodb/src/main/resources/logback.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-data-dynamodb/src/main/resources/logback.xml b/spring-boot-data-dynamodb/src/main/resources/logback.xml index 78913ee76f..f10048e5d2 100644 --- a/spring-boot-data-dynamodb/src/main/resources/logback.xml +++ b/spring-boot-data-dynamodb/src/main/resources/logback.xml @@ -1,6 +1,6 @@ - + web - %date [%thread] %-5level %logger{36} - %message%n From c1444e2cdd7a69e35b7518ecc2148ed5596c2020 Mon Sep 17 00:00:00 2001 From: "chris.anatalio" Date: Thu, 13 Oct 2016 23:20:34 -0700 Subject: [PATCH 133/309] Fix new line issue --- spring-boot-data-dynamodb/src/main/resources/logback.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot-data-dynamodb/src/main/resources/logback.xml b/spring-boot-data-dynamodb/src/main/resources/logback.xml index f10048e5d2..c0bc602910 100644 --- a/spring-boot-data-dynamodb/src/main/resources/logback.xml +++ b/spring-boot-data-dynamodb/src/main/resources/logback.xml @@ -11,4 +11,4 @@ - \ No newline at end of file + From cef8adfdaebc62faa9fa2baeaa190fd0de94d296 Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Fri, 14 Oct 2016 15:36:00 +0530 Subject: [PATCH 134/309] Changes as per Live Test guidelines --- selenium-junit-testng/pom.xml | 28 ++++++++++++++++--- ...it.java => SeleniumWithJUnitLiveTest.java} | 2 +- ...G.java => SeleniumWithTestNGLiveTest.java} | 2 +- 3 files changed, 26 insertions(+), 6 deletions(-) rename selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/{TestSeleniumWithJUnit.java => SeleniumWithJUnitLiveTest.java} (96%) rename selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/{TestSeleniumWithTestNG.java => SeleniumWithTestNGLiveTest.java} (96%) diff --git a/selenium-junit-testng/pom.xml b/selenium-junit-testng/pom.xml index c6461816af..f964f94ed4 100644 --- a/selenium-junit-testng/pom.xml +++ b/selenium-junit-testng/pom.xml @@ -20,14 +20,34 @@ maven-surefire-plugin 2.19.1 - - - Test*.java - + true + + **/*LiveTest.java + + + + + live + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*LiveTest.java + + + + + + + + org.seleniumhq.selenium 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/SeleniumWithJUnitLiveTest.java similarity index 96% rename from selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java rename to selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumWithJUnitLiveTest.java index 85c20f62a5..f8d9a5dada 100644 --- a/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/TestSeleniumWithJUnit.java +++ b/selenium-junit-testng/src/test/java/com/baeldung/selenium/junit/SeleniumWithJUnitLiveTest.java @@ -9,7 +9,7 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -public class TestSeleniumWithJUnit { +public class SeleniumWithJUnitLiveTest { private static SeleniumExample seleniumExample; private String expecteTilteAboutBaeldungPage = "About Baeldung | Baeldung"; 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/SeleniumWithTestNGLiveTest.java similarity index 96% rename from selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java rename to selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/SeleniumWithTestNGLiveTest.java index 40b0424820..5ec9ade39f 100644 --- a/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/TestSeleniumWithTestNG.java +++ b/selenium-junit-testng/src/test/java/com/baeldung/selenium/testng/SeleniumWithTestNGLiveTest.java @@ -9,7 +9,7 @@ import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; -public class TestSeleniumWithTestNG { +public class SeleniumWithTestNGLiveTest { private SeleniumExample seleniumExample; private String expecteTilteAboutBaeldungPage = "About Baeldung | Baeldung"; From f37718124ae2dc6ab9c7c12c68e4cb17e802cf1e Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 14 Oct 2016 12:37:05 +0200 Subject: [PATCH 135/309] skip live test --- spring-zuul/spring-zuul-ui/pom.xml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/spring-zuul/spring-zuul-ui/pom.xml b/spring-zuul/spring-zuul-ui/pom.xml index 9eaf4b7c45..99df27f2f9 100644 --- a/spring-zuul/spring-zuul-ui/pom.xml +++ b/spring-zuul/spring-zuul-ui/pom.xml @@ -87,5 +87,18 @@ true + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*LiveTest.java + + + + + + \ No newline at end of file From 97d0c7144961367887dfb7cb1bc54e062002d851 Mon Sep 17 00:00:00 2001 From: Prashant Khanal Date: Tue, 11 Oct 2016 16:06:10 -0700 Subject: [PATCH 136/309] Code cleanup Signed-off-by: nguyenminhtuanfit@gmail.com --- .../hazelcast/cluster/NativeClient.java | 12 +++--- .../hazelcast/cluster/ServerNode.java | 9 +--- .../listener/CountryEntryListener.java | 41 ------------------- 3 files changed, 7 insertions(+), 55 deletions(-) delete mode 100644 hazelcast/src/main/java/com/baeldung/hazelcast/listener/CountryEntryListener.java diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java index bda4b94733..697e362289 100644 --- a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java +++ b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/NativeClient.java @@ -1,9 +1,7 @@ package com.baeldung.hazelcast.cluster; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.util.Map.Entry; -import com.baeldung.hazelcast.listener.CountryEntryListener; import com.hazelcast.client.HazelcastClient; import com.hazelcast.client.config.ClientConfig; import com.hazelcast.config.GroupConfig; @@ -11,7 +9,6 @@ import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; public class NativeClient { - private static final Logger logger = LoggerFactory.getLogger(NativeClient.class); public static void main(String[] args) throws InterruptedException { ClientConfig config = new ClientConfig(); @@ -19,8 +16,9 @@ public class NativeClient { groupConfig.setName("dev"); groupConfig.setPassword("dev-pass"); HazelcastInstance hazelcastInstanceClient = HazelcastClient.newHazelcastClient(config); - IMap countryMap = hazelcastInstanceClient.getMap("country"); - countryMap.addEntryListener(new CountryEntryListener(), true); - logger.info("Country map size: " + countryMap.size()); + IMap map = hazelcastInstanceClient.getMap("data"); + for (Entry entry : map.entrySet()) { + System.out.println(String.format("Key: %d, Value: %s", entry.getKey(), entry.getValue())); + } } } diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java index 01043cf712..36028834a4 100644 --- a/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java +++ b/hazelcast/src/main/java/com/baeldung/hazelcast/cluster/ServerNode.java @@ -2,23 +2,18 @@ package com.baeldung.hazelcast.cluster; import java.util.Map; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IdGenerator; public class ServerNode { - private static final Logger logger = LoggerFactory.getLogger(ServerNode.class); public static void main(String[] args) { HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); - Map countryMap = hazelcastInstance.getMap("country"); + Map map = hazelcastInstance.getMap("data"); IdGenerator idGenerator = hazelcastInstance.getIdGenerator("newid"); for (int i = 0; i < 10; i++) { - countryMap.put(idGenerator.newId(), "message" + 1); + map.put(idGenerator.newId(), "message" + 1); } - logger.info("Country map size: " + countryMap.size()); } } diff --git a/hazelcast/src/main/java/com/baeldung/hazelcast/listener/CountryEntryListener.java b/hazelcast/src/main/java/com/baeldung/hazelcast/listener/CountryEntryListener.java deleted file mode 100644 index 1f95dcd9f3..0000000000 --- a/hazelcast/src/main/java/com/baeldung/hazelcast/listener/CountryEntryListener.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.hazelcast.listener; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.hazelcast.core.EntryEvent; -import com.hazelcast.core.MapEvent; -import com.hazelcast.map.listener.EntryAddedListener; -import com.hazelcast.map.listener.EntryEvictedListener; -import com.hazelcast.map.listener.EntryRemovedListener; -import com.hazelcast.map.listener.EntryUpdatedListener; -import com.hazelcast.map.listener.MapClearedListener; -import com.hazelcast.map.listener.MapEvictedListener; - -public class CountryEntryListener implements EntryAddedListener, EntryRemovedListener, EntryUpdatedListener, EntryEvictedListener, MapEvictedListener, MapClearedListener { - private static final Logger logger = LoggerFactory.getLogger(CountryEntryListener.class); - - public void entryAdded(EntryEvent event) { - logger.info("entryAdded:" + event); - } - - public void entryUpdated(EntryEvent event) { - logger.info("entryUpdated:" + event); - } - - public void entryRemoved(EntryEvent event) { - logger.info("entryRemoved:" + event); - } - - public void entryEvicted(EntryEvent event) { - logger.info("entryEvicted:" + event); - } - - public void mapCleared(MapEvent event) { - logger.info("mapCleared:" + event); - } - - public void mapEvicted(MapEvent event) { - logger.info("mapEvicted:" + event); - } -} From eb2fc383161f3f77a2df45997b7eea24cc3a70c1 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 14 Oct 2016 16:40:06 +0200 Subject: [PATCH 137/309] configure live test --- spring-katharsis/pom.xml | 97 ++++++++++++++++++- .../main/java/org/baeldung/Application.java | 3 +- .../src/main/resources/application.properties | 5 +- .../org/baeldung/test/JsonApiLiveTest.java | 10 +- 4 files changed, 103 insertions(+), 12 deletions(-) diff --git a/spring-katharsis/pom.xml b/spring-katharsis/pom.xml index 892aaf24f1..e2e3ea6f97 100644 --- a/spring-katharsis/pom.xml +++ b/spring-katharsis/pom.xml @@ -3,11 +3,12 @@ org.springframework.samples spring-katharsis 0.0.1-SNAPSHOT + war org.springframework.boot spring-boot-starter-parent - 1.2.6.RELEASE + 1.3.3.RELEASE @@ -62,6 +63,7 @@ 1.8 1.0.0 2.4.0 + 1.6.0
    @@ -71,7 +73,100 @@ org.springframework.boot spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*LiveTest.java + + + + + + + + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + tomcat8x + embedded + + + + + + + 8082 + + + + + + + + + + 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-katharsis/src/main/java/org/baeldung/Application.java b/spring-katharsis/src/main/java/org/baeldung/Application.java index 1b409f8b91..e7beb16e04 100644 --- a/spring-katharsis/src/main/java/org/baeldung/Application.java +++ b/spring-katharsis/src/main/java/org/baeldung/Application.java @@ -2,9 +2,10 @@ package org.baeldung; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.web.SpringBootServletInitializer; @SpringBootApplication -public class Application { +public class Application extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(Application.class, args); diff --git a/spring-katharsis/src/main/resources/application.properties b/spring-katharsis/src/main/resources/application.properties index 25d4559e3d..b55fdbba03 100644 --- a/spring-katharsis/src/main/resources/application.properties +++ b/spring-katharsis/src/main/resources/application.properties @@ -3,4 +3,7 @@ spring.datasource.username = sa spring.datasource.password = spring.jpa.show-sql = false spring.jpa.hibernate.ddl-auto = create-drop -spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect \ No newline at end of file +spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.H2Dialect + +server.port=8082 +server.context-path=/spring-katharsis \ No newline at end of file diff --git a/spring-katharsis/src/test/java/org/baeldung/test/JsonApiLiveTest.java b/spring-katharsis/src/test/java/org/baeldung/test/JsonApiLiveTest.java index bbddba3490..26a8c42a25 100644 --- a/spring-katharsis/src/test/java/org/baeldung/test/JsonApiLiveTest.java +++ b/spring-katharsis/src/test/java/org/baeldung/test/JsonApiLiveTest.java @@ -2,22 +2,14 @@ package org.baeldung.test; import static org.junit.Assert.assertEquals; -import org.baeldung.Application; 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; import com.jayway.restassured.RestAssured; import com.jayway.restassured.response.Response; -@RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = Application.class) -@WebAppConfiguration public class JsonApiLiveTest { - private final static String URL_PREFIX = "http://localhost:8080/users"; + private final static String URL_PREFIX = "http://localhost:8082/spring-katharsis/users"; @Test public void whenGettingAllUsers_thenCorrect() { From 63024cc8e92e8d93fdbcc0eeb3f6e787b5e48cd2 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 15 Oct 2016 13:48:40 +0200 Subject: [PATCH 138/309] cleanup test --- .../baeldung/spring/PersistenceConfig.java | 2 +- .../src/main/resources/data.sql | 5 ++ .../resources/persistence-h2.properties} | 0 .../baeldung/client/RestTemplateLiveTest.java | 2 +- .../baeldung/common/web/AbstractLiveTest.java | 2 +- .../query/JPACriteriaQueryTest.java | 22 ++++---- .../persistence/query/JPAQuerydslTest.java | 16 +++--- .../query/JPASpecificationLiveTest.java | 30 ++++------- .../query/JPASpecificationTest.java | 16 +++--- .../csrf/CsrfAbstractIntegrationTest.java | 4 +- .../csrf/CsrfEnabledIntegrationTest.java | 4 +- .../security/csrf/SecurityWithCsrfConfig.java | 2 +- .../java/org/baeldung/web/MyUserLiveTest.java | 50 +++++++------------ 13 files changed, 70 insertions(+), 85 deletions(-) create mode 100644 spring-security-rest-full/src/main/resources/data.sql rename spring-security-rest-full/src/{test/resources/persistence-mysql.properties => main/resources/persistence-h2.properties} (100%) diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java index dad4808a56..f3a87b189e 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/PersistenceConfig.java @@ -23,7 +23,7 @@ import com.google.common.base.Preconditions; @Configuration @EnableTransactionManagement -@PropertySource({ "classpath:persistence-${envTarget:mysql}.properties" }) +@PropertySource({ "classpath:persistence-${envTarget:h2}.properties" }) @ComponentScan({ "org.baeldung.persistence" }) // @ImportResource("classpath*:springDataPersistenceConfig.xml") @EnableJpaRepositories(basePackages = "org.baeldung.persistence.dao") diff --git a/spring-security-rest-full/src/main/resources/data.sql b/spring-security-rest-full/src/main/resources/data.sql new file mode 100644 index 0000000000..5fba12dd85 --- /dev/null +++ b/spring-security-rest-full/src/main/resources/data.sql @@ -0,0 +1,5 @@ +insert into User (id, firstName, lastName, email, age) values (1, 'john', 'doe', 'john@doe.com', 22); +insert into User (id, firstName, lastName, email, age) values (2, 'tom', 'doe', 'tom@doe.com', 26); + +insert into MyUser (id, firstName, lastName, email, age) values (1, 'john', 'doe', 'john@doe.com', 22); +insert into MyUser (id, firstName, lastName, email, age) values (2, 'tom', 'doe', 'tom@doe.com', 26); diff --git a/spring-security-rest-full/src/test/resources/persistence-mysql.properties b/spring-security-rest-full/src/main/resources/persistence-h2.properties similarity index 100% rename from spring-security-rest-full/src/test/resources/persistence-mysql.properties rename to spring-security-rest-full/src/main/resources/persistence-h2.properties diff --git a/spring-security-rest-full/src/test/java/org/baeldung/client/RestTemplateLiveTest.java b/spring-security-rest-full/src/test/java/org/baeldung/client/RestTemplateLiveTest.java index fb40bd9d62..0f0a73b536 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/client/RestTemplateLiveTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/client/RestTemplateLiveTest.java @@ -51,7 +51,7 @@ import com.google.common.base.Charsets; public class RestTemplateLiveTest { private RestTemplate restTemplate; - private static final String fooResourceUrl = "http://localhost:" + APPLICATION_PORT + "/foos"; + private static final String fooResourceUrl = "http://localhost:" + APPLICATION_PORT + "/auth/foos"; @Before public void beforeTest() { diff --git a/spring-security-rest-full/src/test/java/org/baeldung/common/web/AbstractLiveTest.java b/spring-security-rest-full/src/test/java/org/baeldung/common/web/AbstractLiveTest.java index 95fce10e45..a3e6c8858d 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/common/web/AbstractLiveTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/common/web/AbstractLiveTest.java @@ -57,7 +57,7 @@ public abstract class AbstractLiveTest { // protected String getURL() { - return "http://localhost:" + APPLICATION_PORT + "/foos"; + return "http://localhost:" + APPLICATION_PORT + "/auth/foos"; } protected final RequestSpecification givenAuth() { diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java index e9c8659347..1d0826e6ba 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java @@ -36,15 +36,15 @@ public class JPACriteriaQueryTest { @Before public void init() { userJohn = new User(); - userJohn.setFirstName("John"); - userJohn.setLastName("Doe"); + userJohn.setFirstName("john"); + userJohn.setLastName("doe"); userJohn.setEmail("john@doe.com"); userJohn.setAge(22); userApi.save(userJohn); userTom = new User(); - userTom.setFirstName("Tom"); - userTom.setLastName("Doe"); + userTom.setFirstName("tom"); + userTom.setLastName("doe"); userTom.setEmail("tom@doe.com"); userTom.setAge(26); userApi.save(userTom); @@ -53,8 +53,8 @@ public class JPACriteriaQueryTest { @Test public void givenFirstAndLastName_whenGettingListOfUsers_thenCorrect() { final List params = new ArrayList(); - params.add(new SearchCriteria("firstName", ":", "John")); - params.add(new SearchCriteria("lastName", ":", "Doe")); + params.add(new SearchCriteria("firstName", ":", "john")); + params.add(new SearchCriteria("lastName", ":", "doe")); final List results = userApi.searchUser(params); @@ -65,7 +65,7 @@ public class JPACriteriaQueryTest { @Test public void givenLast_whenGettingListOfUsers_thenCorrect() { final List params = new ArrayList(); - params.add(new SearchCriteria("lastName", ":", "Doe")); + params.add(new SearchCriteria("lastName", ":", "doe")); final List results = userApi.searchUser(params); assertThat(userJohn, isIn(results)); @@ -75,7 +75,7 @@ public class JPACriteriaQueryTest { @Test public void givenLastAndAge_whenGettingListOfUsers_thenCorrect() { final List params = new ArrayList(); - params.add(new SearchCriteria("lastName", ":", "Doe")); + params.add(new SearchCriteria("lastName", ":", "doe")); params.add(new SearchCriteria("age", ">", "25")); final List results = userApi.searchUser(params); @@ -87,8 +87,8 @@ public class JPACriteriaQueryTest { @Test public void givenWrongFirstAndLast_whenGettingListOfUsers_thenCorrect() { final List params = new ArrayList(); - params.add(new SearchCriteria("firstName", ":", "Adam")); - params.add(new SearchCriteria("lastName", ":", "Fox")); + params.add(new SearchCriteria("firstName", ":", "adam")); + params.add(new SearchCriteria("lastName", ":", "fox")); final List results = userApi.searchUser(params); assertThat(userJohn, not(isIn(results))); @@ -98,7 +98,7 @@ public class JPACriteriaQueryTest { @Test public void givenPartialFirst_whenGettingListOfUsers_thenCorrect() { final List params = new ArrayList(); - params.add(new SearchCriteria("firstName", ":", "Jo")); + params.add(new SearchCriteria("firstName", ":", "jo")); final List results = userApi.searchUser(params); diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslTest.java index b7b38a4fcb..d5fbc819fd 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslTest.java @@ -35,15 +35,15 @@ public class JPAQuerydslTest { @Before public void init() { userJohn = new MyUser(); - userJohn.setFirstName("John"); - userJohn.setLastName("Doe"); + userJohn.setFirstName("john"); + userJohn.setLastName("doe"); userJohn.setEmail("john@doe.com"); userJohn.setAge(22); repo.save(userJohn); userTom = new MyUser(); - userTom.setFirstName("Tom"); - userTom.setLastName("Doe"); + userTom.setFirstName("tom"); + userTom.setLastName("doe"); userTom.setEmail("tom@doe.com"); userTom.setAge(26); repo.save(userTom); @@ -51,7 +51,7 @@ public class JPAQuerydslTest { @Test public void givenLast_whenGettingListOfUsers_thenCorrect() { - final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder().with("lastName", ":", "Doe"); + final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder().with("lastName", ":", "doe"); final Iterable results = repo.findAll(builder.build()); assertThat(results, containsInAnyOrder(userJohn, userTom)); @@ -59,7 +59,7 @@ public class JPAQuerydslTest { @Test public void givenFirstAndLastName_whenGettingListOfUsers_thenCorrect() { - final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder().with("firstName", ":", "John").with("lastName", ":", "Doe"); + final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder().with("firstName", ":", "john").with("lastName", ":", "doe"); final Iterable results = repo.findAll(builder.build()); @@ -69,7 +69,7 @@ public class JPAQuerydslTest { @Test public void givenLastAndAge_whenGettingListOfUsers_thenCorrect() { - final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder().with("lastName", ":", "Doe").with("age", ">", "25"); + final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder().with("lastName", ":", "doe").with("age", ">", "25"); final Iterable results = repo.findAll(builder.build()); @@ -79,7 +79,7 @@ public class JPAQuerydslTest { @Test public void givenWrongFirstAndLast_whenGettingListOfUsers_thenCorrect() { - final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder().with("firstName", ":", "Adam").with("lastName", ":", "Fox"); + final MyUserPredicatesBuilder builder = new MyUserPredicatesBuilder().with("firstName", ":", "adam").with("lastName", ":", "fox"); final Iterable results = repo.findAll(builder.build()); assertThat(results, emptyIterable()); diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationLiveTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationLiveTest.java index 544161dfd5..4fa15d536a 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationLiveTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationLiveTest.java @@ -3,52 +3,44 @@ package org.baeldung.persistence.query; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import org.baeldung.persistence.dao.UserRepository; import org.baeldung.persistence.model.User; -import org.baeldung.spring.ConfigTest; -import org.baeldung.spring.PersistenceConfig; import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; import com.jayway.restassured.RestAssured; import com.jayway.restassured.response.Response; import com.jayway.restassured.specification.RequestSpecification; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { ConfigTest.class, PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) +//@RunWith(SpringJUnit4ClassRunner.class) +//@ContextConfiguration(classes = { ConfigTest.class, PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) @ActiveProfiles("test") public class JPASpecificationLiveTest { - @Autowired - private UserRepository repository; + // @Autowired + // private UserRepository repository; private User userJohn; private User userTom; - private final String URL_PREFIX = "http://localhost:8080/users/spec?search="; + private final String URL_PREFIX = "http://localhost:8080/auth/users/spec?search="; @Before public void init() { userJohn = new User(); - userJohn.setFirstName("John"); - userJohn.setLastName("Doe"); + userJohn.setFirstName("john"); + userJohn.setLastName("doe"); userJohn.setEmail("john@doe.com"); userJohn.setAge(22); - repository.save(userJohn); + // repository.save(userJohn); userTom = new User(); - userTom.setFirstName("Tom"); - userTom.setLastName("Doe"); + userTom.setFirstName("tom"); + userTom.setLastName("doe"); userTom.setEmail("tom@doe.com"); userTom.setAge(26); - repository.save(userTom); + // repository.save(userTom); } @Test diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java index 52bd43cc8c..0d8773dd61 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java @@ -38,15 +38,15 @@ public class JPASpecificationTest { @Before public void init() { userJohn = new User(); - userJohn.setFirstName("John"); - userJohn.setLastName("Doe"); + userJohn.setFirstName("john"); + userJohn.setLastName("doe"); userJohn.setEmail("john@doe.com"); userJohn.setAge(22); repository.save(userJohn); userTom = new User(); - userTom.setFirstName("Tom"); - userTom.setLastName("Doe"); + userTom.setFirstName("tom"); + userTom.setLastName("doe"); userTom.setEmail("tom@doe.com"); userTom.setAge(26); repository.save(userTom); @@ -54,8 +54,8 @@ public class JPASpecificationTest { @Test public void givenFirstAndLastName_whenGettingListOfUsers_thenCorrect() { - final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.EQUALITY, "John")); - final UserSpecification spec1 = new UserSpecification(new SpecSearchCriteria("lastName", SearchOperation.EQUALITY, "Doe")); + final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.EQUALITY, "john")); + final UserSpecification spec1 = new UserSpecification(new SpecSearchCriteria("lastName", SearchOperation.EQUALITY, "doe")); final List results = repository.findAll(Specifications.where(spec).and(spec1)); assertThat(userJohn, isIn(results)); @@ -64,7 +64,7 @@ public class JPASpecificationTest { @Test public void givenFirstNameInverse_whenGettingListOfUsers_thenCorrect() { - final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.NEGATION, "John")); + final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.NEGATION, "john")); final List results = repository.findAll(Specifications.where(spec)); assertThat(userTom, isIn(results)); @@ -82,7 +82,7 @@ public class JPASpecificationTest { @Test public void givenFirstNamePrefix_whenGettingListOfUsers_thenCorrect() { - final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.STARTS_WITH, "Jo")); + final UserSpecification spec = new UserSpecification(new SpecSearchCriteria("firstName", SearchOperation.STARTS_WITH, "jo")); final List results = repository.findAll(spec); assertThat(userJohn, isIn(results)); 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 13cb92a745..be9b7cf27e 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 @@ -23,7 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @Transactional -public class CsrfAbstractIntegrationTest { +public abstract class CsrfAbstractIntegrationTest { @Autowired private WebApplicationContext context; @@ -41,7 +41,7 @@ public class CsrfAbstractIntegrationTest { } protected RequestPostProcessor testUser() { - return user("user").password("userPass").roles("USER"); + return user("user1").password("user1Pass").roles("USER"); } protected RequestPostProcessor testAdmin() { diff --git a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java index c7caf61525..b04644f847 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/CsrfEnabledIntegrationTest.java @@ -15,12 +15,12 @@ public class CsrfEnabledIntegrationTest extends CsrfAbstractIntegrationTest { @Test public void givenNoCsrf_whenAddFoo_thenForbidden() throws Exception { - mvc.perform(post("/foos").contentType(MediaType.APPLICATION_JSON).content(createFoo()).with(testUser())).andExpect(status().isForbidden()); + mvc.perform(post("/auth/foos").contentType(MediaType.APPLICATION_JSON).content(createFoo()).with(testUser())).andExpect(status().isForbidden()); } @Test public void givenCsrf_whenAddFoo_thenCreated() throws Exception { - mvc.perform(post("/foos").contentType(MediaType.APPLICATION_JSON).content(createFoo()).with(testUser()).with(csrf())).andExpect(status().isCreated()); + mvc.perform(post("/auth/foos").contentType(MediaType.APPLICATION_JSON).content(createFoo()).with(testUser()).with(csrf())).andExpect(status().isCreated()); } } diff --git a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/SecurityWithCsrfConfig.java b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/SecurityWithCsrfConfig.java index 99b94cd7b5..ae4a655265 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/SecurityWithCsrfConfig.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/security/csrf/SecurityWithCsrfConfig.java @@ -41,7 +41,7 @@ public class SecurityWithCsrfConfig extends WebSecurityConfigurerAdapter { // @formatter:off http .authorizeRequests() - .antMatchers("/admin/*").hasAnyRole("ROLE_ADMIN") + .antMatchers("/auth/admin/*").hasAnyRole("ROLE_ADMIN") .anyRequest().authenticated() .and() .httpBasic() diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java index 835b32c95c..c7fb26d70b 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java @@ -3,52 +3,44 @@ package org.baeldung.web; import static org.junit.Assert.assertEquals; import org.baeldung.persistence.model.MyUser; -import org.baeldung.spring.ConfigTest; -import org.junit.Before; import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.http.MediaType; import org.springframework.test.context.ActiveProfiles; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.jayway.restassured.RestAssured; import com.jayway.restassured.response.Response; import com.jayway.restassured.specification.RequestSpecification; -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { ConfigTest.class }, loader = AnnotationConfigContextLoader.class) +//@RunWith(SpringJUnit4ClassRunner.class) +//@ContextConfiguration(classes = { ConfigTest.class }, loader = AnnotationConfigContextLoader.class) @ActiveProfiles("test") public class MyUserLiveTest { - private ObjectMapper mapper = new ObjectMapper(); - private MyUser userJohn = new MyUser("john", "doe", "john@test.com", 11); - private MyUser userTom = new MyUser("tom", "doe", "tom@test.com", 20); + private final ObjectMapper mapper = new ObjectMapper(); + private final MyUser userJohn = new MyUser("john", "doe", "john@doe.com", 11); + private final MyUser userTom = new MyUser("tom", "doe", "tom@doe.com", 20); - private static boolean setupDataCreated = false; - - @Before - public void setupData() throws JsonProcessingException { - if (!setupDataCreated) { - withRequestBody(givenAuth(), userJohn).post("http://localhost:8080/myusers"); - withRequestBody(givenAuth(), userTom).post("http://localhost:8080/myusers"); - setupDataCreated = true; - } - } + // private static boolean setupDataCreated = false; + // + // @Before + // public void setupData() throws JsonProcessingException { + // if (!setupDataCreated) { + // withRequestBody(givenAuth(), userJohn).post("http://localhost:8080/auth/myusers"); + // withRequestBody(givenAuth(), userTom).post("http://localhost:8080/auth/myusers"); + // setupDataCreated = true; + // } + // } @Test public void whenGettingListOfUsers_thenCorrect() { - final Response response = givenAuth().get("http://localhost:8080/api/myusers"); + final Response response = givenAuth().get("http://localhost:8080/auth/api/myusers"); final MyUser[] result = response.as(MyUser[].class); assertEquals(result.length, 2); } @Test public void givenFirstName_whenGettingListOfUsers_thenCorrect() { - final Response response = givenAuth().get("http://localhost:8080/api/myusers?firstName=john"); + final Response response = givenAuth().get("http://localhost:8080/auth/api/myusers?firstName=john"); final MyUser[] result = response.as(MyUser[].class); assertEquals(result.length, 1); assertEquals(result[0].getEmail(), userJohn.getEmail()); @@ -56,14 +48,14 @@ public class MyUserLiveTest { @Test public void givenPartialLastName_whenGettingListOfUsers_thenCorrect() { - final Response response = givenAuth().get("http://localhost:8080/api/myusers?lastName=do"); + final Response response = givenAuth().get("http://localhost:8080/auth/api/myusers?lastName=do"); final MyUser[] result = response.as(MyUser[].class); assertEquals(result.length, 2); } @Test public void givenEmail_whenGettingListOfUsers_thenIgnored() { - final Response response = givenAuth().get("http://localhost:8080/api/myusers?email=john"); + final Response response = givenAuth().get("http://localhost:8080/auth/api/myusers?email=john"); final MyUser[] result = response.as(MyUser[].class); assertEquals(result.length, 2); } @@ -71,8 +63,4 @@ public class MyUserLiveTest { private RequestSpecification givenAuth() { return RestAssured.given().auth().preemptive().basic("user1", "user1Pass"); } - - private RequestSpecification withRequestBody(final RequestSpecification req, final Object obj) throws JsonProcessingException { - return req.contentType(MediaType.APPLICATION_JSON_VALUE).body(mapper.writeValueAsString(obj)); - } } From bf887e71d9949c815e6e521d85d4c17c60d03560 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 15 Oct 2016 16:44:51 +0200 Subject: [PATCH 139/309] minor cleanup --- ...dResultsRetrievedDiscoverabilityListener.java | 6 +++--- .../java/org/baeldung/web/MyUserLiveTest.java | 16 ---------------- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/spring-security-rest-full/src/main/java/org/baeldung/web/hateoas/listener/PaginatedResultsRetrievedDiscoverabilityListener.java b/spring-security-rest-full/src/main/java/org/baeldung/web/hateoas/listener/PaginatedResultsRetrievedDiscoverabilityListener.java index 312ead0ab0..603c91007d 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/web/hateoas/listener/PaginatedResultsRetrievedDiscoverabilityListener.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/web/hateoas/listener/PaginatedResultsRetrievedDiscoverabilityListener.java @@ -77,7 +77,7 @@ class PaginatedResultsRetrievedDiscoverabilityListener implements ApplicationLis } final boolean hasNextPage(final int page, final int totalPages) { - return page < totalPages - 1; + return page < (totalPages - 1); } final boolean hasPreviousPage(final int page) { @@ -89,7 +89,7 @@ class PaginatedResultsRetrievedDiscoverabilityListener implements ApplicationLis } final boolean hasLastPage(final int page, final int totalPages) { - return totalPages > 1 && hasNextPage(page, totalPages); + return (totalPages > 1) && hasNextPage(page, totalPages); } final void appendCommaIfNecessary(final StringBuilder linkHeader) { @@ -102,7 +102,7 @@ class PaginatedResultsRetrievedDiscoverabilityListener implements ApplicationLis protected void plural(final UriComponentsBuilder uriBuilder, final Class clazz) { final String resourceName = clazz.getSimpleName().toLowerCase() + "s"; - uriBuilder.path("/" + resourceName); + uriBuilder.path("/auth/" + resourceName); } } diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java index c7fb26d70b..4a3bd50f90 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java @@ -6,30 +6,14 @@ import org.baeldung.persistence.model.MyUser; import org.junit.Test; import org.springframework.test.context.ActiveProfiles; -import com.fasterxml.jackson.databind.ObjectMapper; import com.jayway.restassured.RestAssured; import com.jayway.restassured.response.Response; import com.jayway.restassured.specification.RequestSpecification; -//@RunWith(SpringJUnit4ClassRunner.class) -//@ContextConfiguration(classes = { ConfigTest.class }, loader = AnnotationConfigContextLoader.class) @ActiveProfiles("test") public class MyUserLiveTest { - private final ObjectMapper mapper = new ObjectMapper(); private final MyUser userJohn = new MyUser("john", "doe", "john@doe.com", 11); - private final MyUser userTom = new MyUser("tom", "doe", "tom@doe.com", 20); - - // private static boolean setupDataCreated = false; - // - // @Before - // public void setupData() throws JsonProcessingException { - // if (!setupDataCreated) { - // withRequestBody(givenAuth(), userJohn).post("http://localhost:8080/auth/myusers"); - // withRequestBody(givenAuth(), userTom).post("http://localhost:8080/auth/myusers"); - // setupDataCreated = true; - // } - // } @Test public void whenGettingListOfUsers_thenCorrect() { From 66c5db02a3602c3d9c571f8d12938398e061e6eb Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 15 Oct 2016 17:34:11 +0200 Subject: [PATCH 140/309] configure test profiles --- spring-security-rest-full/pom.xml | 39 ++++++++++++++++++- .../java/org/baeldung/spring/Application.java | 2 +- .../src/main/resources/application.properties | 2 + .../src/test/java/org/baeldung/Consts.java | 2 +- .../baeldung/client/RestTemplateLiveTest.java | 2 +- .../baeldung/common/web/AbstractLiveTest.java | 2 +- .../query/JPASpecificationLiveTest.java | 2 +- .../java/org/baeldung/web/MyUserLiveTest.java | 10 ++--- 8 files changed, 49 insertions(+), 12 deletions(-) create mode 100644 spring-security-rest-full/src/main/resources/application.properties diff --git a/spring-security-rest-full/pom.xml b/spring-security-rest-full/pom.xml index b354e61b35..5cd0ed51f3 100644 --- a/spring-security-rest-full/pom.xml +++ b/spring-security-rest-full/pom.xml @@ -339,7 +339,7 @@ - 8080 + 8082 @@ -386,10 +386,45 @@ - none + **/*LiveTest.java **/*IntegrationTest.java + + + + + + + json + + + + + + + + + + live + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*IntegrationTest.java + + **/*LiveTest.java diff --git a/spring-security-rest-full/src/main/java/org/baeldung/spring/Application.java b/spring-security-rest-full/src/main/java/org/baeldung/spring/Application.java index c44e37fee8..f8bc6c0160 100644 --- a/spring-security-rest-full/src/main/java/org/baeldung/spring/Application.java +++ b/spring-security-rest-full/src/main/java/org/baeldung/spring/Application.java @@ -10,7 +10,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter /** * Main Application Class - uses Spring Boot. Just run this as a normal Java - * class to run up a Jetty Server (on http://localhost:8080) + * class to run up a Jetty Server (on http://localhost:8082/spring-security-rest-full) * */ @EnableScheduling diff --git a/spring-security-rest-full/src/main/resources/application.properties b/spring-security-rest-full/src/main/resources/application.properties new file mode 100644 index 0000000000..58c6f8eec7 --- /dev/null +++ b/spring-security-rest-full/src/main/resources/application.properties @@ -0,0 +1,2 @@ +server.port=8082 +server.context-path=/spring-security-rest-full \ No newline at end of file diff --git a/spring-security-rest-full/src/test/java/org/baeldung/Consts.java b/spring-security-rest-full/src/test/java/org/baeldung/Consts.java index 9c44d63c4d..e5f0be160f 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/Consts.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/Consts.java @@ -1,5 +1,5 @@ package org.baeldung; public interface Consts { - int APPLICATION_PORT = 8080; + int APPLICATION_PORT = 8082; } diff --git a/spring-security-rest-full/src/test/java/org/baeldung/client/RestTemplateLiveTest.java b/spring-security-rest-full/src/test/java/org/baeldung/client/RestTemplateLiveTest.java index 0f0a73b536..a1cd9fcfe1 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/client/RestTemplateLiveTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/client/RestTemplateLiveTest.java @@ -51,7 +51,7 @@ import com.google.common.base.Charsets; public class RestTemplateLiveTest { private RestTemplate restTemplate; - private static final String fooResourceUrl = "http://localhost:" + APPLICATION_PORT + "/auth/foos"; + private static final String fooResourceUrl = "http://localhost:" + APPLICATION_PORT + "/spring-security-rest-full/auth/foos"; @Before public void beforeTest() { diff --git a/spring-security-rest-full/src/test/java/org/baeldung/common/web/AbstractLiveTest.java b/spring-security-rest-full/src/test/java/org/baeldung/common/web/AbstractLiveTest.java index a3e6c8858d..a2890d8643 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/common/web/AbstractLiveTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/common/web/AbstractLiveTest.java @@ -57,7 +57,7 @@ public abstract class AbstractLiveTest { // protected String getURL() { - return "http://localhost:" + APPLICATION_PORT + "/auth/foos"; + return "http://localhost:" + APPLICATION_PORT + "/spring-security-rest-full/auth/foos"; } protected final RequestSpecification givenAuth() { diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationLiveTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationLiveTest.java index 4fa15d536a..3b85cfb487 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationLiveTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationLiveTest.java @@ -24,7 +24,7 @@ public class JPASpecificationLiveTest { private User userTom; - private final String URL_PREFIX = "http://localhost:8080/auth/users/spec?search="; + private final String URL_PREFIX = "http://localhost:8082/spring-security-rest-full/auth/users/spec?search="; @Before public void init() { diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java index 4a3bd50f90..16ed9db253 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/MyUserLiveTest.java @@ -14,17 +14,17 @@ import com.jayway.restassured.specification.RequestSpecification; public class MyUserLiveTest { private final MyUser userJohn = new MyUser("john", "doe", "john@doe.com", 11); - + private String URL_PREFIX = "http://localhost:8082/spring-security-rest-full/auth/api/myusers"; @Test public void whenGettingListOfUsers_thenCorrect() { - final Response response = givenAuth().get("http://localhost:8080/auth/api/myusers"); + final Response response = givenAuth().get(URL_PREFIX); final MyUser[] result = response.as(MyUser[].class); assertEquals(result.length, 2); } @Test public void givenFirstName_whenGettingListOfUsers_thenCorrect() { - final Response response = givenAuth().get("http://localhost:8080/auth/api/myusers?firstName=john"); + final Response response = givenAuth().get(URL_PREFIX + "?firstName=john"); final MyUser[] result = response.as(MyUser[].class); assertEquals(result.length, 1); assertEquals(result[0].getEmail(), userJohn.getEmail()); @@ -32,14 +32,14 @@ public class MyUserLiveTest { @Test public void givenPartialLastName_whenGettingListOfUsers_thenCorrect() { - final Response response = givenAuth().get("http://localhost:8080/auth/api/myusers?lastName=do"); + final Response response = givenAuth().get(URL_PREFIX + "?lastName=do"); final MyUser[] result = response.as(MyUser[].class); assertEquals(result.length, 2); } @Test public void givenEmail_whenGettingListOfUsers_thenIgnored() { - final Response response = givenAuth().get("http://localhost:8080/auth/api/myusers?email=john"); + final Response response = givenAuth().get(URL_PREFIX + "?email=john"); final MyUser[] result = response.as(MyUser[].class); assertEquals(result.length, 2); } From db2b93a1b65a217c6de07642f17d73950ec143ae Mon Sep 17 00:00:00 2001 From: Ante Pocedulic Date: Sun, 16 Oct 2016 11:12:51 +0200 Subject: [PATCH 141/309] Ehcache article source code (#751) * - created packages for each logical part of application - created validator for WebsiteUser rest API - created ValidatorEventRegister class which fixes known bug for not detecting generated events - created custom Exception Handler which creates better response messages * Code formatting * formated pom.xml replaced for loops with streams fixed bug while getting all beans * removed unnecessary code changed repository type * - added test for Spring Data REST APIs - changed bad request return code - formated code * - added source code for ehcache article - added ehcache dependency to pom.xml * - added test for ehcache article - removed main method which was only for testing purposes --- .../ehcache/SquareCalculatorTest.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 spring-all/src/test/java/org/baeldung/ehcache/SquareCalculatorTest.java diff --git a/spring-all/src/test/java/org/baeldung/ehcache/SquareCalculatorTest.java b/spring-all/src/test/java/org/baeldung/ehcache/SquareCalculatorTest.java new file mode 100644 index 0000000000..875fd2a25e --- /dev/null +++ b/spring-all/src/test/java/org/baeldung/ehcache/SquareCalculatorTest.java @@ -0,0 +1,43 @@ +package org.baeldung.ehcache; + +import static org.junit.Assert.*; + +import org.baeldung.ehcache.calculator.SquaredCalculator; +import org.baeldung.ehcache.config.CacheHelper; +import org.junit.Before; +import org.junit.Test; + +public class SquareCalculatorTest { + SquaredCalculator squaredCalculator = new SquaredCalculator(); + CacheHelper cacheHelper = new CacheHelper(); + + @Before + public void setup() { + squaredCalculator.setCache(cacheHelper); + + } + + @Test + public void whenCalculatingSquareValueOnce_thenCacheDontHaveValues() { + for (int i = 10; i < 15; i++) { + assertFalse(cacheHelper.getSquareNumberCache().containsKey(i)); + System.out.println("Square value of " + i + " is: " + + squaredCalculator.getSquareValueOfNumber(i) + "\n"); + } + } + + @Test + public void whenCalculatingSquareValueAgain_thenCacheHasAllValues() { + for (int i = 10; i < 15; i++) { + assertFalse(cacheHelper.getSquareNumberCache().containsKey(i)); + System.out.println("Square value of " + i + " is: " + + squaredCalculator.getSquareValueOfNumber(i) + "\n"); + } + + for (int i = 10; i < 15; i++) { + assertTrue(cacheHelper.getSquareNumberCache().containsKey(i)); + System.out.println("Square value of " + i + " is: " + + squaredCalculator.getSquareValueOfNumber(i) + "\n"); + } + } +} From 6c509ba738c326a31e03b867cfb4e8c1729926b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20van=20de=20Giessen?= Date: Sun, 16 Oct 2016 12:00:10 +0200 Subject: [PATCH 142/309] some minor cleanup (#649) * minor cleanup pom maven.compiler java versions as properties only specifing spring-data-elasticsearch as dependency formatting net.java.dev.jna dependency grouping main/test and logging dependencies removed unused org.springframework.data.version property * updated logback conf to this example * builder patttern code on multiple lines for readablilty * autowire via constructor into final variable as of spring-4.3 the @Autowired can be omitted \o/ jaj * @ContextConfiguration with less config --- spring-data-elasticsearch/pom.xml | 33 ++++++++----------- .../spring/data/es/config/Config.java | 14 +++++--- .../data/es/service/ArticleServiceImpl.java | 6 ++-- .../src/main/resources/logback.xml | 6 ++-- .../data/es/ElasticSearchQueryTest.java | 3 +- .../spring/data/es/ElasticSearchTest.java | 3 +- 6 files changed, 30 insertions(+), 35 deletions(-) diff --git a/spring-data-elasticsearch/pom.xml b/spring-data-elasticsearch/pom.xml index 084695c2f3..42cf8fc740 100644 --- a/spring-data-elasticsearch/pom.xml +++ b/spring-data-elasticsearch/pom.xml @@ -11,8 +11,9 @@ UTF-8 + 1.8 + 1.8 - 1.3.2.RELEASE 4.2.5.RELEASE 4.11 @@ -27,6 +28,12 @@ spring-core ${org.springframework.version} + + org.springframework.data + spring-data-elasticsearch + ${elasticsearch.version} + + junit junit-dep @@ -39,16 +46,13 @@ ${org.springframework.version} test - - org.springframework.data - spring-data-elasticsearch - ${elasticsearch.version} - - net.java.dev.jna + + net.java.dev.jna jna 4.1.0 test + org.slf4j slf4j-api @@ -81,16 +85,5 @@ 1.2.13 - - - - maven-compiler-plugin - 2.3.2 - - 1.8 - 1.8 - - - - - + + \ No newline at end of file diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java index f93999a1cc..37e9fd46eb 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java @@ -32,18 +32,22 @@ public class Config { public Client client() { try { final Path tmpDir = Files.createTempDirectory(Paths.get(System.getProperty("java.io.tmpdir")), "elasticsearch_data"); - + logger.debug(tmpDir.toAbsolutePath().toString()); + // @formatter:off final Settings.Builder elasticsearchSettings = Settings.settingsBuilder().put("http.enabled", "false") .put("path.data", tmpDir.toAbsolutePath().toString()) .put("path.home", elasticsearchHome); + + return new NodeBuilder() + .local(true) + .settings(elasticsearchSettings) + .node() + .client(); + // @formatter:on - - logger.debug(tmpDir.toAbsolutePath().toString()); - - return new NodeBuilder().local(true).settings(elasticsearchSettings.build()).node().client(); } catch (final IOException ioex) { logger.error("Cannot create temp dir", ioex); throw new RuntimeException(); diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java index 0ea922bdd3..2a31b52602 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java @@ -10,10 +10,10 @@ import org.springframework.stereotype.Service; @Service public class ArticleServiceImpl implements ArticleService { - private ArticleRepository articleRepository; - + private final ArticleRepository articleRepository; + @Autowired - public void setArticleRepository(ArticleRepository articleRepository) { + public ArticleServiceImpl(ArticleRepository articleRepository) { this.articleRepository = articleRepository; } diff --git a/spring-data-elasticsearch/src/main/resources/logback.xml b/spring-data-elasticsearch/src/main/resources/logback.xml index 37a9e2edbf..db75fcbe40 100644 --- a/spring-data-elasticsearch/src/main/resources/logback.xml +++ b/spring-data-elasticsearch/src/main/resources/logback.xml @@ -8,10 +8,10 @@ - - - + + + diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java index 1551d6442e..ddf0ef4dac 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java @@ -34,7 +34,6 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilde import org.springframework.data.elasticsearch.core.query.SearchQuery; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; import com.baeldung.spring.data.es.config.Config; import com.baeldung.spring.data.es.model.Article; @@ -42,7 +41,7 @@ import com.baeldung.spring.data.es.model.Author; import com.baeldung.spring.data.es.service.ArticleService; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { Config.class }, loader = AnnotationConfigContextLoader.class) +@ContextConfiguration(classes = Config.class) public class ElasticSearchQueryTest { @Autowired diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java index e10b5f48d7..863e1e4620 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java @@ -21,7 +21,6 @@ import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilde import org.springframework.data.elasticsearch.core.query.SearchQuery; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.support.AnnotationConfigContextLoader; import com.baeldung.spring.data.es.config.Config; import com.baeldung.spring.data.es.model.Article; @@ -29,7 +28,7 @@ import com.baeldung.spring.data.es.model.Author; import com.baeldung.spring.data.es.service.ArticleService; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { Config.class }, loader = AnnotationConfigContextLoader.class) +@ContextConfiguration(classes = Config.class) public class ElasticSearchTest { @Autowired From 722f932795adabee6c9f36810f74caa21c1d6289 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 14:55:31 +0600 Subject: [PATCH 143/309] Updated README.md --- spring-security-rest-full/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-security-rest-full/README.md b/spring-security-rest-full/README.md index 1cbe1191a8..f79df797c2 100644 --- a/spring-security-rest-full/README.md +++ b/spring-security-rest-full/README.md @@ -25,6 +25,9 @@ The "Learn Spring Security" Classes: http://github.learnspringsecurity.com - [REST Query Language with RSQL](http://www.baeldung.com/rest-api-search-language-rsql-fiql) - [Spring RestTemplate Tutorial](http://www.baeldung.com/rest-template) - [A Guide to CSRF Protection in Spring Security](http://www.baeldung.com/spring-security-csrf) +- [Intro to Spring Security Expressions](http://www.baeldung.com/spring-security-expressions) +- [Changing Spring Model Parameters with Handler Interceptor](http://www.baeldung.com/spring-model-parameters-with-handler-interceptor) +- [Introduction to Spring MVC HandlerInterceptor](http://www.baeldung.com/spring-mvc-handlerinterceptor) ### Build the Project ``` From f22c3060497d4a987b87d660fedee3585455cb78 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 14:56:26 +0600 Subject: [PATCH 144/309] Updated README.md --- core-java/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core-java/README.md b/core-java/README.md index 23fe12465f..a93a5dad47 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -13,3 +13,5 @@ - [Java – Write to File](http://www.baeldung.com/java-write-to-file) - [Java Scanner](http://www.baeldung.com/java-scanner) - [Java Timer](http://www.baeldung.com/java-timer-and-timertask) +- [Java – Byte Array to Writer](http://www.baeldung.com/java-convert-byte-array-to-writer) +- [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java) From 46604ddf6dfc6b146564d4d1fca5ff6912d6935c Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 14:57:16 +0600 Subject: [PATCH 145/309] Updated README.md --- spring-hibernate4/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-hibernate4/README.md b/spring-hibernate4/README.md index 1f18e1d0e8..7888e8b4ee 100644 --- a/spring-hibernate4/README.md +++ b/spring-hibernate4/README.md @@ -10,6 +10,8 @@ - [Auditing with JPA, Hibernate, and Spring Data JPA](http://www.baeldung.com/database-auditing-jpa) - [Stored Procedures with Hibernate](http://www.baeldung.com/stored-procedures-with-hibernate-tutorial) - [Hibernate: save, persist, update, merge, saveOrUpdate](http://www.baeldung.com/hibernate-save-persist-update-merge-saveorupdate/) +- [Eager/Lazy Loading In Hibernate](http://www.baeldung.com/hibernate-lazy-eager-loading) +- [Hibernate Criteria Queries](http://www.baeldung.com/hibernate-criteria-queries) ### Quick Start From d148076180138cf557a2b2f7e4d842ec002d678f Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 14:58:16 +0600 Subject: [PATCH 146/309] Updated README.md --- spring-all/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-all/README.md b/spring-all/README.md index 0bbb600860..aae98440f3 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -12,3 +12,6 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring Profiles](http://www.baeldung.com/spring-profiles) - [A Spring Custom Annotation for a Better DAO](http://www.baeldung.com/spring-annotation-bean-pre-processor) - [What's New in Spring 4.3?](http://www.baeldung.com/whats-new-in-spring-4-3/) +- [Guide To Running Logic on Startup in Spring](http://www.baeldung.com/running-setup-logic-on-startup-in-spring) +- [Quick Guide to Spring Controllers](http://www.baeldung.com/spring-controllers) +- [Quick Guide to Spring Bean Scopes](http://www.baeldung.com/spring-bean-scopes) From e2e9ac294dc91caaeb1c23e465aadc91272e5e6d Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 14:59:03 +0600 Subject: [PATCH 147/309] Updated README.md --- spring-mvc-java/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spring-mvc-java/README.md b/spring-mvc-java/README.md index 951d80033e..996a7d96b1 100644 --- a/spring-mvc-java/README.md +++ b/spring-mvc-java/README.md @@ -10,3 +10,9 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Introduction to Pointcut Expressions in Spring](http://www.baeldung.com/spring-aop-pointcut-tutorial) - [Introduction to Advice Types in Spring](http://www.baeldung.com/spring-aop-advice-tutorial) - [A Guide to the ViewResolver in Spring MVC](http://www.baeldung.com/spring-mvc-view-resolver-tutorial) +- [Integration Testing in Spring](http://www.baeldung.com/integration-testing-in-spring) +- [Spring JSON-P with Jackson](http://www.baeldung.com/spring-jackson-jsonp) +- [A Quick Guide to Spring MVC Matrix Variables](http://www.baeldung.com/spring-mvc-matrix-variables) +- [Intro to WebSockets with Spring](http://www.baeldung.com/websockets-spring) +- [File Upload with Spring MVC](http://www.baeldung.com/spring-file-upload) +- [Spring MVC Content Negotiation](http://www.baeldung.com/spring-mvc-content-negotiation-json-xml) From 5d9131771cff5aaf9b485843cd14725c87373dd7 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 14:59:44 +0600 Subject: [PATCH 148/309] Updated README.md --- spring-jpa/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-jpa/README.md b/spring-jpa/README.md index f974c6e22c..066e009c72 100644 --- a/spring-jpa/README.md +++ b/spring-jpa/README.md @@ -10,3 +10,4 @@ - [JPA Pagination](http://www.baeldung.com/jpa-pagination) - [Sorting with JPA](http://www.baeldung.com/jpa-sort) - [Spring JPA – Multiple Databases](http://www.baeldung.com/spring-data-jpa-multiple-databases) +- [Hibernate Second-Level Cache](http://www.baeldung.com/hibernate-second-level-cache) From 918257839f1266b12b268c6650ab952f7c984465 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:00:35 +0600 Subject: [PATCH 149/309] Updated README.md --- gson/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/gson/README.md b/gson/README.md index 67651b732e..60c80477b1 100644 --- a/gson/README.md +++ b/gson/README.md @@ -5,3 +5,4 @@ ### Relevant Articles: - [Gson Deserialization Cookbook](http://www.baeldung.com/gson-deserialization-guide) +- [Jackson vs Gson](http://www.baeldung.com/jackson-vs-gson) From 45dc8efe1c36a2ef86b26cac6ab0c57f4d1b6b29 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:01:26 +0600 Subject: [PATCH 150/309] Updated README.md --- jackson/README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/jackson/README.md b/jackson/README.md index 68765de686..f48a7dc8ab 100644 --- a/jackson/README.md +++ b/jackson/README.md @@ -19,3 +19,8 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Jackson – Decide What Fields Get Serialized/Deserializaed](http://www.baeldung.com/jackson-field-serializable-deserializable-or-not) - [A Guide to Jackson Annotations](http://www.baeldung.com/jackson-annotations) - [Working with Tree Model Nodes in Jackson](http://www.baeldung.com/jackson-json-node-tree-model) +- [Jackson vs Gson](http://www.baeldung.com/jackson-vs-gson) +- [Intro to the Jackson ObjectMapper](http://www.baeldung.com/jackson-object-mapper-tutorial) +- [XML Serialization and Deserialization with Jackson](http://www.baeldung.com/jackson-xml-serialization-and-deserialization) +- [More Jackson Annotations](http://www.baeldung.com/jackson-advanced-annotations) +- [Inheritance with Jackson](http://www.baeldung.com/jackson-inheritance) From 779c6dd52cc279170daaf5550abce54cad0b6a40 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:02:05 +0600 Subject: [PATCH 151/309] Update README.md --- spring-exceptions/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-exceptions/README.md b/spring-exceptions/README.md index ab6a9643e9..fd9250c6da 100644 --- a/spring-exceptions/README.md +++ b/spring-exceptions/README.md @@ -10,3 +10,4 @@ This project is used to replicate Spring Exceptions only. - [Spring DataIntegrityViolationException](http://www.baeldung.com/spring-dataIntegrityviolationexception) - [Spring BeanDefinitionStoreException](http://www.baeldung.com/spring-beandefinitionstoreexception) - [Spring NoSuchBeanDefinitionException](http://www.baeldung.com/spring-nosuchbeandefinitionexception) +- [Guide to Spring NonTransientDataAccessException](http://www.baeldung.com/nontransientdataaccessexception) From c8716019a05d53d81e9b95743ae86d289be7cb4c Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:04:39 +0600 Subject: [PATCH 152/309] Updated README.md --- json/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/json/README.md b/json/README.md index c47eca3e84..e217da170f 100644 --- a/json/README.md +++ b/json/README.md @@ -5,3 +5,5 @@ ### Relevant Articles: - [Introduction to JSON Schema in Java](http://www.baeldung.com/introduction-to-json-schema-in-java) - [A Guide to FastJson](http://www.baeldung.com/????????) +- [Introduction to JSONForms](http://www.baeldung.com/introduction-to-jsonforms) +- [Introduction to JsonPath](http://www.baeldung.com/guide-to-jayway-jsonpath) From c1dcfd5d92d3c7f3174bc0a38eca3e4df52fb43f Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:05:14 +0600 Subject: [PATCH 153/309] Updated README.md --- mutation-testing/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mutation-testing/README.md b/mutation-testing/README.md index 5dd60620ba..f49aeeb881 100644 --- a/mutation-testing/README.md +++ b/mutation-testing/README.md @@ -4,3 +4,5 @@ ### Relevant Articles: - [Introduction to Mutation Testing Using the PITest Library](http://www.baeldung.com/java-mutation-testing-with-pitest) +- [Intro to JaCoCo](http://www.baeldung.com/jacoco) +- [Mutation Testing with PITest](http://www.baeldung.com/java-mutation-testing-with-pitest) From 41f26d8acf0555f5b6f2f98d849e6239c4f492e3 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:06:11 +0600 Subject: [PATCH 154/309] Updated README.md --- mocks/jmockit/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/mocks/jmockit/README.md b/mocks/jmockit/README.md index db78b2a3ac..3063fdc31d 100644 --- a/mocks/jmockit/README.md +++ b/mocks/jmockit/README.md @@ -7,3 +7,4 @@ - [JMockit 101](http://www.baeldung.com/jmockit-101) - [A Guide to JMockit Expectations](http://www.baeldung.com/jmockit-expectations) - [JMockit Advanced Topics](http://www.baeldung.com/jmockit-advanced-topics) +- [JMockit Advanced Usage](http://www.baeldung.com/jmockit-advanced-usage) From 201d3b255196bdd84d59b85a21ae8d09d438d2c8 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:07:13 +0600 Subject: [PATCH 155/309] Updated README.md --- spring-security-custom-permission/README.MD | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-security-custom-permission/README.MD b/spring-security-custom-permission/README.MD index 5ac974203b..760cf41c63 100644 --- a/spring-security-custom-permission/README.MD +++ b/spring-security-custom-permission/README.MD @@ -1,2 +1,5 @@ ###The Course The "REST With Spring" Classes: http://github.learnspringsecurity.com + +###Relevant Articles: +- [A Custom Security Expression with Spring Security](http://www.baeldung.com/spring-security-create-new-custom-security-expression) From 2bff26194979e00620e49e307227c3982441cb07 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:08:02 +0600 Subject: [PATCH 156/309] Updated README.md --- xmlunit2-tutorial/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xmlunit2-tutorial/README.md b/xmlunit2-tutorial/README.md index e69de29bb2..72b683796e 100644 --- a/xmlunit2-tutorial/README.md +++ b/xmlunit2-tutorial/README.md @@ -0,0 +1,2 @@ +###Relevant Articles: +- [Introduction To XMLUnit 2.x](http://www.baeldung.com/xmlunit2) From 38dc8ad0a5ae5fdacefe8c7ba917f0dedfda9fa0 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:08:58 +0600 Subject: [PATCH 157/309] Updated README.md --- rest-assured/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rest-assured/README.md b/rest-assured/README.md index e69de29bb2..50f36f61eb 100644 --- a/rest-assured/README.md +++ b/rest-assured/README.md @@ -0,0 +1,2 @@ +###Relevant Articles: +- [A Guide to REST-assured](http://www.baeldung.com/rest-assured-tutorial) From d106b886358d7c759e5cc05255e4923d517ed787 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:09:51 +0600 Subject: [PATCH 158/309] Updated README.md --- spring-boot/README.MD | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spring-boot/README.MD b/spring-boot/README.MD index 2a87b46021..1610d77e81 100644 --- a/spring-boot/README.MD +++ b/spring-boot/README.MD @@ -1,2 +1,7 @@ ###The Course The "REST With Spring" Classes: http://bit.ly/restwithspring + +###Relevant Articles: +- [Quick Guide to @RestClientTest in Spring Boot](http://www.baeldung.com/restclienttest-in-spring-boot) +- [Intro to Spring Boot Starters](http://www.baeldung.com/spring-boot-starters) +- [A Guide to Spring in Eclipse STS](http://www.baeldung.com/eclipse-sts-spring) From 7433424dba3d4ccc4c7e70a02045c42c2ae4780a Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:10:41 +0600 Subject: [PATCH 159/309] Updated README.md --- spring-rest/README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spring-rest/README.md b/spring-rest/README.md index 77d12063ed..671fa4996b 100644 --- a/spring-rest/README.md +++ b/spring-rest/README.md @@ -1,5 +1,3 @@ -========= - ## Spring REST Example Project ###The Course @@ -11,3 +9,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Redirect in Spring](http://www.baeldung.com/spring-redirect-and-forward) - [Returning Custom Status Codes from Spring Controllers](http://www.baeldung.com/spring-mvc-controller-custom-http-status-code) - [A Guide to OkHttp](http://www.baeldung.com/guide-to-okhttp) +- [Binary Data Formats in a Spring REST API](http://www.baeldung.com/spring-rest-api-with-binary-data-formats) From cd853fafbc686af65ff43e15a4eaf909e50acd41 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:11:13 +0600 Subject: [PATCH 160/309] Updated README.md --- guava/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/guava/README.md b/guava/README.md index 28bcfeb912..40e7f19f41 100644 --- a/guava/README.md +++ b/guava/README.md @@ -15,3 +15,4 @@ - [Guava – Lists](http://www.baeldung.com/guava-lists) - [Guava – Sets](http://www.baeldung.com/guava-sets) - [Guava – Maps](http://www.baeldung.com/guava-maps) +- [Guava Set + Function = Map](http://www.baeldung.com/guava-set-function-map-tutorial) From 4ebd8b7f7b4c869134b66065feffa9611456902c Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:11:52 +0600 Subject: [PATCH 161/309] Updated README.md --- rest-testing/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rest-testing/README.md b/rest-testing/README.md index 54a2e98dda..5dd4e49162 100644 --- a/rest-testing/README.md +++ b/rest-testing/README.md @@ -7,3 +7,5 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: - [Test a REST API with Java](http://www.baeldung.com/2011/10/13/integration-testing-a-rest-api/) +- [Introduction to WireMock](http://www.baeldung.com/introduction-to-wiremock) +- [REST API Testing with Cucumber](http://www.baeldung.com/cucumber-rest-api-testing) From ce7621c66e75efa73962029ebbaeecb69d491dae Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:16:59 +0600 Subject: [PATCH 162/309] Updated README.md --- spring-rest-docs/README.MD | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-rest-docs/README.MD b/spring-rest-docs/README.MD index 2a87b46021..f5d001d126 100644 --- a/spring-rest-docs/README.MD +++ b/spring-rest-docs/README.MD @@ -1,2 +1,5 @@ ###The Course The "REST With Spring" Classes: http://bit.ly/restwithspring + +###Relevant Articles: +- [Introduction to Spring REST Docs](http://www.baeldung.com/spring-rest-docs) From 38ad5840f6c612c5ce56c8eb07863341f9845965 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:17:41 +0600 Subject: [PATCH 163/309] Updated README.md --- spring-mvc-xml/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-mvc-xml/README.md b/spring-mvc-xml/README.md index ce823a9682..783bbb2ef4 100644 --- a/spring-mvc-xml/README.md +++ b/spring-mvc-xml/README.md @@ -11,3 +11,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Spring MVC Tutorial](http://www.baeldung.com/spring-mvc-tutorial) - [Servlet Session Timeout](http://www.baeldung.com/servlet-session-timeout) - [Basic Forms with Spring MVC](http://www.baeldung.com/spring-mvc-form-tutorial) +- [Returning Image/Media Data with Spring MVC](http://www.baeldung.com/spring-mvc-image-media-data) From caa9bc658510961e8e2d5ee4b183cc66d575a70d Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:18:43 +0600 Subject: [PATCH 164/309] Updated README.md --- spring-security-mvc-login/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-security-mvc-login/README.md b/spring-security-mvc-login/README.md index 7cddc42e1d..d1f6b884b1 100644 --- a/spring-security-mvc-login/README.md +++ b/spring-security-mvc-login/README.md @@ -9,7 +9,7 @@ The "Learn Spring Security" Classes: http://github.learnspringsecurity.com - [Spring Security Form Login](http://www.baeldung.com/spring-security-login) - [Spring Security Logout](http://www.baeldung.com/spring-security-logout) - [Spring Security Expressions – hasRole Example](http://www.baeldung.com/spring-security-expressions-basic) - +- [Spring HTTP/HTTPS Channel Security](http://www.baeldung.com/spring-channel-security-https) ### Build the Project ``` From c0a6cb227d1a147d41ea6a4bfa72d95a9cace45b Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:19:28 +0600 Subject: [PATCH 165/309] Updated README.md --- mockito/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mockito/README.md b/mockito/README.md index 5e7cd19f78..6de2fb0c7a 100644 --- a/mockito/README.md +++ b/mockito/README.md @@ -8,3 +8,5 @@ - [Mockito When/Then Cookbook](http://www.baeldung.com/mockito-behavior) - [Mockito – Using Spies](http://www.baeldung.com/mockito-spy) - [Mockito – @Mock, @Spy, @Captor and @InjectMocks](http://www.baeldung.com/mockito-annotations) +- [Mockito’s Mock Methods](http://www.baeldung.com/mockito-mock-methods) +- [Introduction to PowerMock](http://www.baeldung.com/intro-to-powermock) From f4ada6eaa1ce58e18afaaf0509aac0d042c5ac7e Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:21:09 +0600 Subject: [PATCH 166/309] Updated README.md --- spring-data-elasticsearch/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-data-elasticsearch/README.md b/spring-data-elasticsearch/README.md index 74d9e4f642..589343710b 100644 --- a/spring-data-elasticsearch/README.md +++ b/spring-data-elasticsearch/README.md @@ -1,6 +1,9 @@ ## Spring Data Elasticsearch - [Introduction to Spring Data Elasticsearch](http://www.baeldung.com/spring-data-elasticsearch-tutorial) +###Relevant Articles: +- [Elasticsearch Queries with Spring Data](http://www.baeldung.com/spring-data-elasticsearch-queries) + ### Build the Project with Tests Running ``` mvn clean install From 488850ce9ab2f18e4be724f4d2379a7948534609 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:22:02 +0600 Subject: [PATCH 167/309] Updated README.md --- spring-data-redis/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-data-redis/README.md b/spring-data-redis/README.md index 89eae99f05..da44920e16 100644 --- a/spring-data-redis/README.md +++ b/spring-data-redis/README.md @@ -2,6 +2,7 @@ ### Relevant Articles: - [Introduction to Spring Data Redis](http://www.baeldung.com/spring-data-redis-tutorial) +- [PubSub Messaging with Spring Data Redis](http://www.baeldung.com/spring-data-redis-pub-sub) ### Build the Project with Tests Running ``` From 94ad1f631f8a7c85a9c5476dbf95abfa8a80c172 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:24:08 +0600 Subject: [PATCH 168/309] Updated README.md --- gson-jackson-performance/README.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 gson-jackson-performance/README.md diff --git a/gson-jackson-performance/README.md b/gson-jackson-performance/README.md new file mode 100644 index 0000000000..e662219718 --- /dev/null +++ b/gson-jackson-performance/README.md @@ -0,0 +1,6 @@ +## Performance of Gson and Jackson + +Standalone java programs to measure the performance of both JSON APIs based on file size and object graph complexity. + +###Relevant Articles: +- [Jackson vs Gson: A Quick Look At Performance](http://www.baeldung.com/jackson-gson-performance) From fe805ea2022dd12963bd48f8c00984b6f0fa1a73 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:26:33 +0600 Subject: [PATCH 169/309] Updated README.md --- spring-thymeleaf/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-thymeleaf/README.md b/spring-thymeleaf/README.md index 8cb1c2e982..52c8dda13e 100644 --- a/spring-thymeleaf/README.md +++ b/spring-thymeleaf/README.md @@ -4,7 +4,7 @@ ### Relevant Articles: - +- [Introduction to Using Thymeleaf in Spring](http://www.baeldung.com/thymeleaf-in-spring-mvc) ### Build the Project From 87fd44bc38b78c03f0e51b02e5cd58cc487ad911 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:28:03 +0600 Subject: [PATCH 170/309] Updated README.md --- core-java/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core-java/README.md b/core-java/README.md index a93a5dad47..440af67252 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -15,3 +15,6 @@ - [Java Timer](http://www.baeldung.com/java-timer-and-timertask) - [Java – Byte Array to Writer](http://www.baeldung.com/java-convert-byte-array-to-writer) - [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java) +- [MD5 Hashing in Java](http://www.baeldung.com/java-md5) +- [Guide to the Java ArrayList](http://www.baeldung.com/java-arraylist) +- [Guide to Java Reflection](http://www.baeldung.com/java-reflection) From 8748eb504151daf1a7d3ac0a684d9d83d4e1bf0a Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:28:55 +0600 Subject: [PATCH 171/309] Updated README.md --- spring-data-elasticsearch/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-data-elasticsearch/README.md b/spring-data-elasticsearch/README.md index 589343710b..a7b090818e 100644 --- a/spring-data-elasticsearch/README.md +++ b/spring-data-elasticsearch/README.md @@ -3,6 +3,7 @@ ###Relevant Articles: - [Elasticsearch Queries with Spring Data](http://www.baeldung.com/spring-data-elasticsearch-queries) +- [Guide to Elasticsearch in Java](http://www.baeldung.com/elasticsearch-java) ### Build the Project with Tests Running ``` From 8a7c5968212abb40d76e7ef0c1d70a626ee8acd1 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:30:35 +0600 Subject: [PATCH 172/309] Updated README.md --- spring-data-rest/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-data-rest/README.md b/spring-data-rest/README.md index 7dc439206b..4e8828a688 100644 --- a/spring-data-rest/README.md +++ b/spring-data-rest/README.md @@ -12,3 +12,6 @@ The application uses [Spring Boot](http://projects.spring.io/spring-boot/), so i # Viewing the running application To view the running application, visit [http://localhost:8080](http://localhost:8080) in your browser + +###Relevant Articles: +- [Guide to Spring Data REST Validators](http://www.baeldung.com/spring-data-rest-validators) From ef363e2684897ff81874ab8d569a92cc8ca4cd7a Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:32:01 +0600 Subject: [PATCH 173/309] Updated README.md --- spring-jpa/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-jpa/README.md b/spring-jpa/README.md index 066e009c72..4568c0bc7f 100644 --- a/spring-jpa/README.md +++ b/spring-jpa/README.md @@ -11,3 +11,4 @@ - [Sorting with JPA](http://www.baeldung.com/jpa-sort) - [Spring JPA – Multiple Databases](http://www.baeldung.com/spring-data-jpa-multiple-databases) - [Hibernate Second-Level Cache](http://www.baeldung.com/hibernate-second-level-cache) +- [Spring, Hibernate and a JNDI Datasource](http://www.baeldung.com/spring-persistence-jpa-jndi-datasource) From fc68da25dfd0b5968582e476f6e37c4788241b59 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:33:02 +0600 Subject: [PATCH 174/309] Updated README.md --- spring-thymeleaf/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-thymeleaf/README.md b/spring-thymeleaf/README.md index 52c8dda13e..a8ca755044 100644 --- a/spring-thymeleaf/README.md +++ b/spring-thymeleaf/README.md @@ -5,6 +5,7 @@ ### Relevant Articles: - [Introduction to Using Thymeleaf in Spring](http://www.baeldung.com/thymeleaf-in-spring-mvc) +- [CSRF Protection with Spring MVC and Thymeleaf](http://www.baeldung.com/csrf-thymeleaf-with-spring-security) ### Build the Project From e5c171f8971f2194de775163f737b655085cde03 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:34:40 +0600 Subject: [PATCH 175/309] Updated README.md --- spring-security-rest-full/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-security-rest-full/README.md b/spring-security-rest-full/README.md index f79df797c2..faeeac1ec2 100644 --- a/spring-security-rest-full/README.md +++ b/spring-security-rest-full/README.md @@ -28,6 +28,7 @@ The "Learn Spring Security" Classes: http://github.learnspringsecurity.com - [Intro to Spring Security Expressions](http://www.baeldung.com/spring-security-expressions) - [Changing Spring Model Parameters with Handler Interceptor](http://www.baeldung.com/spring-model-parameters-with-handler-interceptor) - [Introduction to Spring MVC HandlerInterceptor](http://www.baeldung.com/spring-mvc-handlerinterceptor) +- [Using a Custom Spring MVC’s Handler Interceptor to Manage Sessions](http://www.baeldung.com/spring-mvc-custom-handler-interceptor) ### Build the Project ``` From 14ca00a93c3497d0fbc61a0ca07e685a3ba3022e Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Tue, 4 Oct 2016 15:35:25 +0600 Subject: [PATCH 176/309] Updated README.md --- feign-client/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/feign-client/README.md b/feign-client/README.md index e6ade4d161..149f7320d9 100644 --- a/feign-client/README.md +++ b/feign-client/README.md @@ -3,3 +3,6 @@ This is the implementation of a [spring-hypermedia-api][1] client using Feign. [1]: https://github.com/eugenp/spring-hypermedia-api + +###Relevant Articles: +- [Intro to Feign](http://www.baeldung.com/intro-to-feign) From 298c5e309100d2104096d74f0299596bc5d90718 Mon Sep 17 00:00:00 2001 From: Naoshadul Islam Date: Sun, 16 Oct 2016 16:25:05 +0600 Subject: [PATCH 177/309] Created README.md and added relevant articles (#742) * Updated readme.md * Updated readme.md * Updated readme.md * Updated readme.md * Updated readme.md * Updated readme.md * Updated readme.md * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Updated readme.md * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Updated readme.md * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Updated readme.md * Created README.md and added relevant articles * Created README.md and added relevant articles * Created README.md and added relevant articles * Updated readme.md * Updated readme.md * Created README.md and added relevant articles * Created README.md and added relevant articles --- annotations/readme.md | 3 ++- apache-cxf/cxf-introduction/README.md | 2 ++ assertj/README.md | 3 +++ autovalue-tutorial/README.md | 2 ++ cdi/README.md | 2 ++ core-java-8/src/main/java/com/baeldung/datetime/README.md | 2 ++ core-java-8/src/main/java/com/baeldung/enums/README.md | 2 ++ core-java-9/src/test/java/com/baeldung/java9/README.MD | 3 ++- core-java/src/test/java/org/baeldung/java/lists/README.md | 2 ++ dependency-injection/README.md | 2 ++ dozer/README.md | 2 ++ flyway-migration/README.MD | 3 ++- gatling/README.md | 2 ++ guava/src/test/java/org/baeldung/hamcrest/README.md | 2 ++ handling-spring-static-resources/README.md | 3 +++ hystrix/README.md | 3 +++ immutables/README.md | 2 ++ jee7schedule/README.md | 2 ++ jooq-spring/README.md | 3 +++ jpa-storedprocedure/README.md | 2 ++ jsf/README.md | 4 ++++ junit5/REDAME.md | 2 ++ log4j/README.md | 2 ++ lombok/README.md | 2 ++ orika/README.md | 2 ++ querydsl/README.md | 2 ++ raml/resource-types-and-traits/README.md | 2 ++ sockets/README.md | 2 ++ spring-akka/README.md | 2 ++ spring-autowire/README.md | 2 ++ spring-boot/src/main/java/com/baeldung/git/README.md | 2 ++ spring-cloud-data-flow/README.MD | 4 +++- spring-cloud/spring-cloud-bootstrap/README.MD | 3 ++- spring-cloud/spring-cloud-config/README.md | 2 ++ spring-cloud/spring-cloud-eureka/README.md | 2 ++ spring-cloud/spring-cloud-hystrix/README.MD | 3 ++- spring-cucumber/README.md | 2 ++ spring-mvc-java/src/main/README.md | 2 ++ spring-mvc-java/src/test/README.md | 2 ++ .../src/test/java/com/baeldung/web/controller/README.md | 2 ++ spring-mvc-velocity/README.md | 2 ++ spring-mvc-web-vs-initializer/README.MD | 3 ++- spring-protobuf/README.md | 2 ++ spring-security-x509/README.md | 2 ++ spring-spel/README.md | 2 ++ xml/README.md | 2 ++ xstream/README.md | 4 ++++ 47 files changed, 103 insertions(+), 7 deletions(-) create mode 100644 apache-cxf/cxf-introduction/README.md create mode 100644 assertj/README.md create mode 100644 autovalue-tutorial/README.md create mode 100644 cdi/README.md create mode 100644 core-java-8/src/main/java/com/baeldung/datetime/README.md create mode 100644 core-java-8/src/main/java/com/baeldung/enums/README.md create mode 100644 core-java/src/test/java/org/baeldung/java/lists/README.md create mode 100644 dependency-injection/README.md create mode 100644 dozer/README.md create mode 100644 gatling/README.md create mode 100644 guava/src/test/java/org/baeldung/hamcrest/README.md create mode 100644 handling-spring-static-resources/README.md create mode 100644 hystrix/README.md create mode 100644 immutables/README.md create mode 100644 jee7schedule/README.md create mode 100644 jooq-spring/README.md create mode 100644 jpa-storedprocedure/README.md create mode 100644 jsf/README.md create mode 100644 junit5/REDAME.md create mode 100644 log4j/README.md create mode 100644 lombok/README.md create mode 100644 orika/README.md create mode 100644 querydsl/README.md create mode 100644 raml/resource-types-and-traits/README.md create mode 100644 sockets/README.md create mode 100644 spring-akka/README.md create mode 100644 spring-autowire/README.md create mode 100644 spring-boot/src/main/java/com/baeldung/git/README.md create mode 100644 spring-cloud/spring-cloud-config/README.md create mode 100644 spring-cloud/spring-cloud-eureka/README.md create mode 100644 spring-cucumber/README.md create mode 100644 spring-mvc-java/src/main/README.md create mode 100644 spring-mvc-java/src/test/README.md create mode 100644 spring-mvc-java/src/test/java/com/baeldung/web/controller/README.md create mode 100644 spring-mvc-velocity/README.md create mode 100644 spring-protobuf/README.md create mode 100644 spring-security-x509/README.md create mode 100644 spring-spel/README.md create mode 100644 xml/README.md create mode 100644 xstream/README.md diff --git a/annotations/readme.md b/annotations/readme.md index 8b13789179..2b052803e6 100644 --- a/annotations/readme.md +++ b/annotations/readme.md @@ -1 +1,2 @@ - +### Relevant Articles: +- [Java Annotation Processing and Creating a Builder](http://www.baeldung.com/java-annotation-processing-builder) diff --git a/apache-cxf/cxf-introduction/README.md b/apache-cxf/cxf-introduction/README.md new file mode 100644 index 0000000000..9a076524b7 --- /dev/null +++ b/apache-cxf/cxf-introduction/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Introduction to Apache CXF](http://www.baeldung.com/introduction-to-apache-cxf) diff --git a/assertj/README.md b/assertj/README.md new file mode 100644 index 0000000000..86eff05057 --- /dev/null +++ b/assertj/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: +- [AssertJ’s Java 8 Features](http://www.baeldung.com/assertJ-java-8-features) +- [AssertJ for Guava](http://www.baeldung.com/assertJ-for-guava) diff --git a/autovalue-tutorial/README.md b/autovalue-tutorial/README.md new file mode 100644 index 0000000000..2385e82847 --- /dev/null +++ b/autovalue-tutorial/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Introduction to AutoValue](http://www.baeldung.com/introduction-to-autovalue) diff --git a/cdi/README.md b/cdi/README.md new file mode 100644 index 0000000000..a27c35772a --- /dev/null +++ b/cdi/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [CDI Interceptor vs Spring AspectJ](http://www.baeldung.com/cdi-interceptor-vs-spring-aspectj) diff --git a/core-java-8/src/main/java/com/baeldung/datetime/README.md b/core-java-8/src/main/java/com/baeldung/datetime/README.md new file mode 100644 index 0000000000..1e4adbb612 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/datetime/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro) diff --git a/core-java-8/src/main/java/com/baeldung/enums/README.md b/core-java-8/src/main/java/com/baeldung/enums/README.md new file mode 100644 index 0000000000..6ccfa725f5 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/enums/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [A Guide to Java Enums](http://www.baeldung.com/a-guide-to-java-enums) diff --git a/core-java-9/src/test/java/com/baeldung/java9/README.MD b/core-java-9/src/test/java/com/baeldung/java9/README.MD index 8b13789179..2f44a2336b 100644 --- a/core-java-9/src/test/java/com/baeldung/java9/README.MD +++ b/core-java-9/src/test/java/com/baeldung/java9/README.MD @@ -1 +1,2 @@ - +### Relevant Artiles: +- [Filtering a Stream of Optionals in Java](http://www.baeldung.com/java-filter-stream-of-optional) diff --git a/core-java/src/test/java/org/baeldung/java/lists/README.md b/core-java/src/test/java/org/baeldung/java/lists/README.md new file mode 100644 index 0000000000..2a1e8aeeaa --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/lists/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Check If Two Lists are Equal in Java](http://www.baeldung.com/java-test-a-list-for-ordinality-and-equality) diff --git a/dependency-injection/README.md b/dependency-injection/README.md new file mode 100644 index 0000000000..5554412c31 --- /dev/null +++ b/dependency-injection/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Wiring in Spring: @Autowired, @Resource and @Inject](http://www.baeldung.com/spring-annotations-resource-inject-autowire) diff --git a/dozer/README.md b/dozer/README.md new file mode 100644 index 0000000000..5e104d914c --- /dev/null +++ b/dozer/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [A Guide to Mapping With Dozer](http://www.baeldung.com/dozer) diff --git a/flyway-migration/README.MD b/flyway-migration/README.MD index 8b13789179..1b3f3c05ee 100644 --- a/flyway-migration/README.MD +++ b/flyway-migration/README.MD @@ -1 +1,2 @@ - +### Relevant Articles: +- [Database Migrations with Flyway](http://www.baeldung.com/database-migrations-with-flyway) diff --git a/gatling/README.md b/gatling/README.md new file mode 100644 index 0000000000..5c81c4bd6a --- /dev/null +++ b/gatling/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Intro to Gatling](http://www.baeldung.com/introduction-to-gatling) diff --git a/guava/src/test/java/org/baeldung/hamcrest/README.md b/guava/src/test/java/org/baeldung/hamcrest/README.md new file mode 100644 index 0000000000..7266ecda3a --- /dev/null +++ b/guava/src/test/java/org/baeldung/hamcrest/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Testing with Hamcrest](http://www.baeldung.com/java-junit-hamcrest-guide) diff --git a/handling-spring-static-resources/README.md b/handling-spring-static-resources/README.md new file mode 100644 index 0000000000..d8f64bc427 --- /dev/null +++ b/handling-spring-static-resources/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: +- [Cachable Static Assets with Spring MVC](http://www.baeldung.com/cachable-static-assets-with-spring-mvc) +- [Minification of JS and CSS Assets with Maven](http://www.baeldung.com/maven-minification-of-js-and-css-assets) diff --git a/hystrix/README.md b/hystrix/README.md new file mode 100644 index 0000000000..cc5c8a197f --- /dev/null +++ b/hystrix/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: +- [Hystrix Integration with Existing Spring Application](http://www.baeldung.com/hystrix-integration-with-spring-aop) +- [Introduction to Hystrix](http://www.baeldung.com/introduction-to-hystrix) diff --git a/immutables/README.md b/immutables/README.md new file mode 100644 index 0000000000..b69a14f035 --- /dev/null +++ b/immutables/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Introduction to Immutables](http://www.baeldung.com/immutables) diff --git a/jee7schedule/README.md b/jee7schedule/README.md new file mode 100644 index 0000000000..44ca9c2f6e --- /dev/null +++ b/jee7schedule/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Scheduling in Java EE](http://www.baeldung.com/scheduling-in-java-enterprise-edition) diff --git a/jooq-spring/README.md b/jooq-spring/README.md new file mode 100644 index 0000000000..79718e74c6 --- /dev/null +++ b/jooq-spring/README.md @@ -0,0 +1,3 @@ +### Relevant Articles: +- [Spring Boot Support for jOOQ](http://www.baeldung.com/spring-boot-support-for-jooq) +- [Introduction to jOOQ with Spring](http://www.baeldung.com/jooq-with-spring) diff --git a/jpa-storedprocedure/README.md b/jpa-storedprocedure/README.md new file mode 100644 index 0000000000..39d6784d8b --- /dev/null +++ b/jpa-storedprocedure/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [A Guide to Stored Procedures with JPA](http://www.baeldung.com/jpa-stored-procedures) diff --git a/jsf/README.md b/jsf/README.md new file mode 100644 index 0000000000..ae92ffc42f --- /dev/null +++ b/jsf/README.md @@ -0,0 +1,4 @@ +### Relevant Articles: +- [Introduction to JSF Expression Language 3.0](http://www.baeldung.com/jsf-expression-language-el-3) +- [Introduction to JSF EL 2](http://www.baeldung.com/intro-to-jsf-expression-language) +- [JavaServer Faces (JSF) with Spring](http://www.baeldung.com/spring-jsf) diff --git a/junit5/REDAME.md b/junit5/REDAME.md new file mode 100644 index 0000000000..d4e30cd257 --- /dev/null +++ b/junit5/REDAME.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [The Basics of JUnit 5 – A Preview](http://www.baeldung.com/junit-5-preview) diff --git a/log4j/README.md b/log4j/README.md new file mode 100644 index 0000000000..7355372f23 --- /dev/null +++ b/log4j/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Introduction to Java Logging](http://www.baeldung.com/java-logging-intro) diff --git a/lombok/README.md b/lombok/README.md new file mode 100644 index 0000000000..4dc1c2d09d --- /dev/null +++ b/lombok/README.md @@ -0,0 +1,2 @@ +## Relevant Articles: +- [Introduction to Project Lombok](http://www.baeldung.com/intro-to-project-lombok) diff --git a/orika/README.md b/orika/README.md new file mode 100644 index 0000000000..4ed033c170 --- /dev/null +++ b/orika/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Mapping with Orika](http://www.baeldung.com/orika-mapping) diff --git a/querydsl/README.md b/querydsl/README.md new file mode 100644 index 0000000000..ef9f8f894c --- /dev/null +++ b/querydsl/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Intro to Querydsl](http://www.baeldung.com/intro-to-querydsl) diff --git a/raml/resource-types-and-traits/README.md b/raml/resource-types-and-traits/README.md new file mode 100644 index 0000000000..72e7b454d6 --- /dev/null +++ b/raml/resource-types-and-traits/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Eliminate Redundancies in RAML with Resource Types and Traits](http://www.baeldung.com/simple-raml-with-resource-types-and-traits) diff --git a/sockets/README.md b/sockets/README.md new file mode 100644 index 0000000000..ad8811ee80 --- /dev/null +++ b/sockets/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets) diff --git a/spring-akka/README.md b/spring-akka/README.md new file mode 100644 index 0000000000..0f1c013214 --- /dev/null +++ b/spring-akka/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Introduction to Spring with Akka](http://www.baeldung.com/akka-with-spring) diff --git a/spring-autowire/README.md b/spring-autowire/README.md new file mode 100644 index 0000000000..d5b8221b25 --- /dev/null +++ b/spring-autowire/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Guide to Spring @Autowired](http://www.baeldung.com/spring-autowire) diff --git a/spring-boot/src/main/java/com/baeldung/git/README.md b/spring-boot/src/main/java/com/baeldung/git/README.md new file mode 100644 index 0000000000..7e6a597c28 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/git/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Injecting Git Information Into Spring](http://www.baeldung.com/spring-git-information) diff --git a/spring-cloud-data-flow/README.MD b/spring-cloud-data-flow/README.MD index 8b13789179..17d0ec6286 100644 --- a/spring-cloud-data-flow/README.MD +++ b/spring-cloud-data-flow/README.MD @@ -1 +1,3 @@ - +### Relevant Articles: +- [Batch Processing with Spring Cloud Data Flow](http://www.baeldung.com/spring-cloud-data-flow-batch-processing) +- [Getting Started with Stream Processing with Spring Cloud Data Flow](http://www.baeldung.com/spring-cloud-data-flow-stream-processing) diff --git a/spring-cloud/spring-cloud-bootstrap/README.MD b/spring-cloud/spring-cloud-bootstrap/README.MD index 8b13789179..c16ba3e247 100644 --- a/spring-cloud/spring-cloud-bootstrap/README.MD +++ b/spring-cloud/spring-cloud-bootstrap/README.MD @@ -1 +1,2 @@ - +### Relevant Articles: +- [Spring Cloud – Bootstrapping](http://www.baeldung.com/spring-cloud-bootstrapping) diff --git a/spring-cloud/spring-cloud-config/README.md b/spring-cloud/spring-cloud-config/README.md new file mode 100644 index 0000000000..b28c750ee6 --- /dev/null +++ b/spring-cloud/spring-cloud-config/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Dockerizing a Spring Boot Application](http://www.baeldung.com/dockerizing-spring-boot-application) diff --git a/spring-cloud/spring-cloud-eureka/README.md b/spring-cloud/spring-cloud-eureka/README.md new file mode 100644 index 0000000000..badf4c8d50 --- /dev/null +++ b/spring-cloud/spring-cloud-eureka/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Introduction to Spring Cloud Netflix – Eureka](http://www.baeldung.com/spring-cloud-netflix-eureka) diff --git a/spring-cloud/spring-cloud-hystrix/README.MD b/spring-cloud/spring-cloud-hystrix/README.MD index 8b13789179..a235f6311f 100644 --- a/spring-cloud/spring-cloud-hystrix/README.MD +++ b/spring-cloud/spring-cloud-hystrix/README.MD @@ -1 +1,2 @@ - +### Relevant Articles: +- [A Guide to Spring Cloud Netflix – Hystrix](http://www.baeldung.com/spring-cloud-netflix-hystrix) diff --git a/spring-cucumber/README.md b/spring-cucumber/README.md new file mode 100644 index 0000000000..1e506f3a09 --- /dev/null +++ b/spring-cucumber/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Cucumber Spring Integration](http://www.baeldung.com/cucumber-spring-integration) diff --git a/spring-mvc-java/src/main/README.md b/spring-mvc-java/src/main/README.md new file mode 100644 index 0000000000..20ee1918af --- /dev/null +++ b/spring-mvc-java/src/main/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Circular Dependencies in Spring](http://www.baeldung.com/circular-dependencies-in-spring) diff --git a/spring-mvc-java/src/test/README.md b/spring-mvc-java/src/test/README.md new file mode 100644 index 0000000000..20ee1918af --- /dev/null +++ b/spring-mvc-java/src/test/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Circular Dependencies in Spring](http://www.baeldung.com/circular-dependencies-in-spring) diff --git a/spring-mvc-java/src/test/java/com/baeldung/web/controller/README.md b/spring-mvc-java/src/test/java/com/baeldung/web/controller/README.md new file mode 100644 index 0000000000..9923962dde --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/web/controller/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [WebAppConfiguration in Spring Tests](http://www.baeldung.com/spring-webappconfiguration) diff --git a/spring-mvc-velocity/README.md b/spring-mvc-velocity/README.md new file mode 100644 index 0000000000..401e135f75 --- /dev/null +++ b/spring-mvc-velocity/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Quick Guide to Spring MVC with Velocity](http://www.baeldung.com/spring-mvc-with-velocity) diff --git a/spring-mvc-web-vs-initializer/README.MD b/spring-mvc-web-vs-initializer/README.MD index 8b13789179..4759cf6137 100644 --- a/spring-mvc-web-vs-initializer/README.MD +++ b/spring-mvc-web-vs-initializer/README.MD @@ -1 +1,2 @@ - +### Relevant Articles: +- [web.xml vs Initializer with Spring](http://www.baeldung.com/spring-xml-vs-java-config) diff --git a/spring-protobuf/README.md b/spring-protobuf/README.md new file mode 100644 index 0000000000..dad0e3f54a --- /dev/null +++ b/spring-protobuf/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Spring REST API with Protocol Buffers](http://www.baeldung.com/spring-rest-api-with-protocol-buffers) diff --git a/spring-security-x509/README.md b/spring-security-x509/README.md new file mode 100644 index 0000000000..2a4b84eae6 --- /dev/null +++ b/spring-security-x509/README.md @@ -0,0 +1,2 @@ +Relevant Articles: +- [X.509 Authentication in Spring Security](http://www.baeldung.com/x-509-authentication-in-spring-security) diff --git a/spring-spel/README.md b/spring-spel/README.md new file mode 100644 index 0000000000..d7e69e114c --- /dev/null +++ b/spring-spel/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Spring Expression Language Guide](http://www.baeldung.com/spring-expression-language) diff --git a/xml/README.md b/xml/README.md new file mode 100644 index 0000000000..8531f8b063 --- /dev/null +++ b/xml/README.md @@ -0,0 +1,2 @@ +### Relevant Articles: +- [Intro to XPath with Java](http://www.baeldung.com/java-xpath) diff --git a/xstream/README.md b/xstream/README.md new file mode 100644 index 0000000000..e8302c14ef --- /dev/null +++ b/xstream/README.md @@ -0,0 +1,4 @@ +### Relevant Articles: +- [XStream User Guide: JSON](http://www.baeldung.com/xstream-json-processing) +- [XStream User Guide: Converting XML to Objects](http://www.baeldung.com/xstream-deserialize-xml-to-object) +- [XStream User Guide: Converting Objects to XML](http://www.baeldung.com/xstream-serialize-object-to-xml) From 4db81e96b21bec4a0b1f0e3283605033efe8e720 Mon Sep 17 00:00:00 2001 From: Sameera Date: Mon, 17 Oct 2016 00:24:25 +0530 Subject: [PATCH 178/309] Adding Print Screen in Java --- printscreen/pom.xml | 31 ++++++++++++++ .../org/baeldung/corejava/Screenshot.java | 42 +++++++++++++++++++ .../org/baeldung/corejava/ScreenshotTest.java | 39 +++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 printscreen/pom.xml create mode 100644 printscreen/src/main/java/org/baeldung/corejava/Screenshot.java create mode 100644 printscreen/src/test/java/org/baeldung/corejava/ScreenshotTest.java diff --git a/printscreen/pom.xml b/printscreen/pom.xml new file mode 100644 index 0000000000..25316a3b48 --- /dev/null +++ b/printscreen/pom.xml @@ -0,0 +1,31 @@ + + 4.0.0 + + com.baeldung + corejava-printscreen + 1.0-SNAPSHOT + jar + + How to Print Screen in Java + https://github.com/eugenp/tutorials + + + UTF-8 + + + + + junit + junit + 3.8.1 + test + + + junit + junit + 4.12 + test + + + diff --git a/printscreen/src/main/java/org/baeldung/corejava/Screenshot.java b/printscreen/src/main/java/org/baeldung/corejava/Screenshot.java new file mode 100644 index 0000000000..57a754bb83 --- /dev/null +++ b/printscreen/src/main/java/org/baeldung/corejava/Screenshot.java @@ -0,0 +1,42 @@ +package org.baeldung.corejava;; + +import javax.imageio.ImageIO; +import java.awt.*; +import java.awt.image.BufferedImage; +import java.io.File; + +public class Screenshot { + + private String filePath; + private String filenamePrefix; + private String fileType; + private int timeToWait; + + public Screenshot(String filePath, String filenamePrefix, + String fileType, int timeToWait) { + this.filePath = filePath; + this.filenamePrefix = filenamePrefix; + this.fileType = fileType; + this.timeToWait = timeToWait; + } + + public void getScreenshot() { + try { + Thread.sleep(timeToWait); + Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); + Robot robot = new Robot(); + BufferedImage img = robot.createScreenCapture(rectangle); + ImageIO.write(img, fileType, setupFileNamePath()); + } catch (Exception ex) { + System.out.println("Error occurred while getting the Print Screen."); + } + } + + private File setupFileNamePath() { + return new File(filePath + filenamePrefix + "." + fileType); + } + + private Rectangle getScreenSizedRectangle(final Dimension d) { + return new Rectangle(0, 0, d.width, d.height); + } +} diff --git a/printscreen/src/test/java/org/baeldung/corejava/ScreenshotTest.java b/printscreen/src/test/java/org/baeldung/corejava/ScreenshotTest.java new file mode 100644 index 0000000000..588c2eea78 --- /dev/null +++ b/printscreen/src/test/java/org/baeldung/corejava/ScreenshotTest.java @@ -0,0 +1,39 @@ +package org.baeldung.corejava; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; + +import static org.junit.Assert.*; + + +public class ScreenshotTest { + + private Screenshot screenshot; + private String filePath; + private String fileName; + private String fileType; + private File file; + + @Before + public void setUp() throws Exception { + filePath = ""; + fileName = "Screenshot"; + fileType = "jpg"; + file = new File(filePath + fileName + "." + fileType); + screenshot = new Screenshot(filePath, fileName, fileType, 2000); + } + + @Test + public void testGetScreenshot() throws Exception { + screenshot.getScreenshot(); + assertTrue(file.exists()); + } + + @After + public void tearDown() throws Exception { + file.delete(); + } +} \ No newline at end of file From f9ec757a44087f793bf90d9344d0426a500cb69f Mon Sep 17 00:00:00 2001 From: eugenp Date: Mon, 17 Oct 2016 07:49:55 +0300 Subject: [PATCH 179/309] minor httpclient cleanup --- .../{HttpAsyncClientTest.java => HttpAsyncClientLiveTest.java} | 2 +- .../httpclient/{SandboxTest.java => SandboxLiveTest.java} | 2 +- ...entTest.java => HttpClientConnectionManagementLiveTest.java} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename httpclient/src/test/java/org/baeldung/httpclient/{HttpAsyncClientTest.java => HttpAsyncClientLiveTest.java} (99%) rename httpclient/src/test/java/org/baeldung/httpclient/{SandboxTest.java => SandboxLiveTest.java} (99%) rename httpclient/src/test/java/org/baeldung/httpclient/conn/{HttpClientConnectionManagementTest.java => HttpClientConnectionManagementLiveTest.java} (99%) diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientLiveTest.java similarity index 99% rename from httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientTest.java rename to httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientLiveTest.java index 151ed10f37..bfe1e68ebe 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpAsyncClientLiveTest.java @@ -33,7 +33,7 @@ import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import org.junit.Test; -public class HttpAsyncClientTest { +public class HttpAsyncClientLiveTest { private static final String HOST = "http://www.google.com"; private static final String HOST_WITH_SSL = "https://mms.nw.ru/"; diff --git a/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java b/httpclient/src/test/java/org/baeldung/httpclient/SandboxLiveTest.java similarity index 99% rename from httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java rename to httpclient/src/test/java/org/baeldung/httpclient/SandboxLiveTest.java index dc1a206f0d..61269c33a1 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/SandboxLiveTest.java @@ -29,7 +29,7 @@ import org.apache.http.util.EntityUtils; import org.junit.Ignore; import org.junit.Test; -public class SandboxTest { +public class SandboxLiveTest { // original example @Ignore diff --git a/httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementTest.java b/httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementLiveTest.java similarity index 99% rename from httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementTest.java rename to httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementLiveTest.java index c5c960f527..e9db8c1e16 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/conn/HttpClientConnectionManagementLiveTest.java @@ -36,7 +36,7 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; -public class HttpClientConnectionManagementTest { +public class HttpClientConnectionManagementLiveTest { private static final String SERVER1 = "http://www.petrikainulainen.net/"; private static final String SERVER7 = "http://www.baeldung.com/"; From 299504659b29d5d36316329448e745c9c1c2677d Mon Sep 17 00:00:00 2001 From: eugenp Date: Mon, 17 Oct 2016 07:52:17 +0300 Subject: [PATCH 180/309] adding a sandbox test --- .../baeldung/httpclient/SandboxLiveTest.java | 188 ------------------ .../base/HttpClientSandboxLiveTest.java | 12 ++ 2 files changed, 12 insertions(+), 188 deletions(-) delete mode 100644 httpclient/src/test/java/org/baeldung/httpclient/SandboxLiveTest.java diff --git a/httpclient/src/test/java/org/baeldung/httpclient/SandboxLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/SandboxLiveTest.java deleted file mode 100644 index 61269c33a1..0000000000 --- a/httpclient/src/test/java/org/baeldung/httpclient/SandboxLiveTest.java +++ /dev/null @@ -1,188 +0,0 @@ -package org.baeldung.httpclient; - -import static org.junit.Assert.assertEquals; - -import java.io.IOException; - -import org.apache.http.Header; -import org.apache.http.HttpHost; -import org.apache.http.HttpResponse; -import org.apache.http.auth.AuthScope; -import org.apache.http.auth.AuthenticationException; -import org.apache.http.auth.MalformedChallengeException; -import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.AuthCache; -import org.apache.http.client.ClientProtocolException; -import org.apache.http.client.CookieStore; -import org.apache.http.client.CredentialsProvider; -import org.apache.http.client.methods.CloseableHttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.client.protocol.HttpClientContext; -import org.apache.http.impl.auth.DigestScheme; -import org.apache.http.impl.client.BasicAuthCache; -import org.apache.http.impl.client.BasicCookieStore; -import org.apache.http.impl.client.BasicCredentialsProvider; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.apache.http.impl.cookie.BasicClientCookie; -import org.apache.http.util.EntityUtils; -import org.junit.Ignore; -import org.junit.Test; - -public class SandboxLiveTest { - - // original example - @Ignore - @Test - public final void whenInterestingDigestAuthScenario_then401UnAuthorized() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { - final HttpHost targetHost = new HttpHost("httpbin.org", 80, "http"); - - // set up the credentials to run agains the server - final CredentialsProvider credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials("user", "passwd")); - - // We need a first run to get a 401 to seed the digest auth - - // Make a client using those creds - final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); - - // And make a call to the URL we are after - final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd"); - - // Create a context to use - final HttpClientContext context = HttpClientContext.create(); - - // Get a response from the sever (expect a 401!) - final HttpResponse authResponse = client.execute(targetHost, httpget, context); - - // Pull out the auth header that came back from the server - final Header challenge = authResponse.getHeaders("WWW-Authenticate")[0]; - - // Lets use a digest scheme to solve it - final DigestScheme digest = new DigestScheme(); - digest.processChallenge(challenge); - - // Make a header with the solution based upon user/password and what the digest got out of the initial 401 reponse - final Header solution = digest.authenticate(new UsernamePasswordCredentials("user", "passwd"), httpget, context); - - // Need an auth cache to use the new digest we made - final AuthCache authCache = new BasicAuthCache(); - authCache.put(targetHost, digest); - - // Add the authCache and thus solved digest to the context - context.setAuthCache(authCache); - - // Pimp up our http get with the solved header made by the digest - httpget.addHeader(solution); - - // use it! - System.out.println("Executing request " + httpget.getRequestLine() + " to target " + targetHost); - - for (int i = 0; i < 3; i++) { - final CloseableHttpResponse responseGood = client.execute(targetHost, httpget, context); - - try { - System.out.println("----------------------------------------"); - System.out.println(responseGood.getStatusLine()); - System.out.println(EntityUtils.toString(responseGood.getEntity())); - } finally { - responseGood.close(); - } - } - } - - @Test - public final void whenInterestingDigestAuthScenario_then200OK() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { - final HttpHost targetHost = new HttpHost("httpbin.org", 80, "http"); - - // set up the credentials to run agains the server - final CredentialsProvider credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials("user", "passwd")); - - // This endpoint need fake cookie to work properly - final CookieStore cookieStore = new BasicCookieStore(); - final BasicClientCookie cookie = new BasicClientCookie("fake", "fake_value"); - cookie.setDomain("httpbin.org"); - cookie.setPath("/"); - cookieStore.addCookie(cookie); - - // Make a client using those creds - final CloseableHttpClient client = HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultCredentialsProvider(credsProvider).build(); - - // And make a call to the URL we are after - final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd"); - - // Create a context to use - final HttpClientContext context = HttpClientContext.create(); - - // Get a response from the sever (401 implicitly) - final HttpResponse authResponse = client.execute(targetHost, httpget, context); - assertEquals(200, authResponse.getStatusLine().getStatusCode()); - - // HttpClient will use cached digest parameters for future requests - System.out.println("Executing request " + httpget.getRequestLine() + " to target " + targetHost); - - for (int i = 0; i < 3; i++) { - final CloseableHttpResponse responseGood = client.execute(targetHost, httpget, context); - - try { - System.out.println("----------------------------------------"); - System.out.println(responseGood.getStatusLine()); - assertEquals(200, responseGood.getStatusLine().getStatusCode()); - } finally { - responseGood.close(); - } - } - client.close(); - } - - // This test needs module spring-security-rest-digest-auth to be running - @Test - public final void whenWeKnowDigestParameters_thenNo401Status() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { - final HttpHost targetHost = new HttpHost("localhost", 8080, "http"); - - final CredentialsProvider credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user1", "user1Pass")); - - final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); - - final HttpGet httpget = new HttpGet("http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"); - - final HttpClientContext context = HttpClientContext.create(); - // == make it preemptive - final AuthCache authCache = new BasicAuthCache(); - final DigestScheme digestAuth = new DigestScheme(); - digestAuth.overrideParamter("realm", "Custom Realm Name"); - digestAuth.overrideParamter("nonce", "nonce value goes here"); - authCache.put(targetHost, digestAuth); - context.setAuthCache(authCache); - // == end - System.out.println("Executing The Request knowing the digest parameters ==== "); - final HttpResponse authResponse = client.execute(targetHost, httpget, context); - assertEquals(200, authResponse.getStatusLine().getStatusCode()); - client.close(); - } - - // This test needs module spring-security-rest-digest-auth to be running - @Test - public final void whenDoNotKnowParameters_thenOnlyOne401() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { - final HttpClientContext context = HttpClientContext.create(); - final HttpHost targetHost = new HttpHost("localhost", 8080, "http"); - final CredentialsProvider credsProvider = new BasicCredentialsProvider(); - credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user1", "user1Pass")); - final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); - - final HttpGet httpget = new HttpGet("http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"); - System.out.println("Executing The Request NOT knowing the digest parameters ==== "); - final HttpResponse tempResponse = client.execute(targetHost, httpget, context); - assertEquals(200, tempResponse.getStatusLine().getStatusCode()); - - for (int i = 0; i < 3; i++) { - System.out.println("No more Challenges or 401"); - final CloseableHttpResponse authResponse = client.execute(targetHost, httpget, context); - assertEquals(200, authResponse.getStatusLine().getStatusCode()); - authResponse.close(); - } - client.close(); - } -} diff --git a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java index ff2f1cd194..2333e2f8c9 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java @@ -10,9 +10,11 @@ import org.apache.http.client.ClientProtocolException; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; +import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.impl.client.HttpClients; import org.junit.After; import org.junit.Test; @@ -58,4 +60,14 @@ public class HttpClientSandboxLiveTest { System.out.println(response.getStatusLine()); } + @Test + public final void givenIgnoringCertificates_whenHttpsUrlIsConsumed_thenCorrect() throws ClientProtocolException, IOException { + final CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier()).build(); + + final HttpGet httpGet = new HttpGet("https://sesar3.geoinfogeochem.org/sample/igsn/ODP000002"); + httpGet.setHeader("Accept", "application/xml"); + + response = httpClient.execute(httpGet); + } + } From 04482ef902b9a2cc3c1cff5407719d2d8f6030d1 Mon Sep 17 00:00:00 2001 From: maibin Date: Mon, 17 Oct 2016 10:10:12 +0200 Subject: [PATCH 181/309] Executable Jar Maven (#752) * 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 * Thymeleaf Natural Processing and Inlining * Expression Utility Objects, Thymeleaf * listOfStudents edited * Thymeleaf layout decorators * Executable Jar with Maven --- core-java/pom.xml | 454 +++++++++++------- .../executable/ExecutableMavenJar.java | 11 + 2 files changed, 293 insertions(+), 172 deletions(-) create mode 100644 core-java/src/main/java/org/baeldung/executable/ExecutableMavenJar.java diff --git a/core-java/pom.xml b/core-java/pom.xml index a5e89d2a76..75608b59ba 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -1,211 +1,321 @@ - - 4.0.0 - com.baeldung - core-java - 0.1.0-SNAPSHOT + + 4.0.0 + com.baeldung + core-java + 0.1.0-SNAPSHOT + jar - core-java + core-java - + - - - net.sourceforge.collections - collections-generic - 4.01 - - - com.google.guava - guava - ${guava.version} - + + + net.sourceforge.collections + collections-generic + 4.01 + + + com.google.guava + guava + ${guava.version} + - - org.apache.commons - commons-collections4 - 4.0 - + + org.apache.commons + commons-collections4 + 4.0 + - - commons-io - commons-io - 2.4 - + + commons-io + commons-io + 2.4 + - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + - - org.apache.commons - commons-math3 - 3.3 - + + org.apache.commons + commons-math3 + 3.3 + - + - + - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - + + com.fasterxml.jackson.core + jackson-databind + ${jackson.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} + - + - - junit - junit - ${junit.version} - test - + + junit + junit + ${junit.version} + test + - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + - - org.assertj - assertj-core - ${assertj.version} - test - + + org.assertj + assertj-core + ${assertj.version} + test + - - org.testng - testng - ${testng.version} - test - + + org.testng + testng + ${testng.version} + test + - - org.mockito - mockito-core - ${mockito.version} - test - - - - commons-codec - commons-codec - 1.10 - + + org.mockito + mockito-core + ${mockito.version} + test + - + + commons-codec + commons-codec + 1.10 + - - core-java - - - src/main/resources - true - - + - + + core-java + + + src/main/resources + true + + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - + - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - **/*IntegrationTest.java - - - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + + + - + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies + prepare-package + + copy-dependencies + + + ${project.build.directory}/libs + + + + - - - 4.3.11.Final - 5.1.38 + + org.apache.maven.plugins + maven-jar-plugin + + + + true + libs/ + org.baeldung.executable.ExecutableMavenJar + + + + - - 2.7.8 + + org.apache.maven.plugins + maven-assembly-plugin + + + package + + single + + + + + org.baeldung.executable.ExecutableMavenJar + + + + jar-with-dependencies + + + + + - - 1.7.13 - 1.1.3 + + org.apache.maven.plugins + maven-shade-plugin + + + + shade + + + true + + + org.baeldung.executable.ExecutableMavenJar + + + + + + - - 5.1.3.Final + + com.jolira + onejar-maven-plugin + + + + org.baeldung.executable.ExecutableMavenJar + true + ${project.build.finalName}-onejar.${project.packaging} + + + one-jar + + + + - - 19.0 - 3.4 + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + spring-boot + org.baeldung.executable.ExecutableMavenJar + + + + + + - - 1.3 - 4.12 - 1.10.19 - 6.8 - 3.5.1 + - 4.4.1 - 4.5 + + + 4.3.11.Final + 5.1.38 - 2.9.0 + + 2.7.8 - - 3.5.1 - 2.6 - 2.19.1 - 2.7 - 1.4.18 + + 1.7.13 + 1.1.3 - + + 5.1.3.Final + + + 19.0 + 3.4 + + + 1.3 + 4.12 + 1.10.19 + 6.8 + 3.5.1 + + 4.4.1 + 4.5 + + 2.9.0 + + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 + + \ No newline at end of file diff --git a/core-java/src/main/java/org/baeldung/executable/ExecutableMavenJar.java b/core-java/src/main/java/org/baeldung/executable/ExecutableMavenJar.java new file mode 100644 index 0000000000..2c52a17904 --- /dev/null +++ b/core-java/src/main/java/org/baeldung/executable/ExecutableMavenJar.java @@ -0,0 +1,11 @@ +package org.baeldung.executable; + +import javax.swing.JOptionPane; + +public class ExecutableMavenJar { + + public static void main(String[] args) { + JOptionPane.showMessageDialog(null, "It worked!", "Executable Jar with Maven", 1); + } + +} From 091d02afbbf534434317dd7c423ca6470cf18c94 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 17 Oct 2016 12:39:30 +0200 Subject: [PATCH 182/309] add integration test profile --- spring-userservice/pom.xml | 59 +++++++++++-------- ...tomUserDetailsServiceIntegrationTest.java} | 2 +- 2 files changed, 37 insertions(+), 24 deletions(-) rename spring-userservice/src/test/java/org/baeldung/userservice/{CustomUserDetailsServiceTest.java => CustomUserDetailsServiceIntegrationTest.java} (98%) diff --git a/spring-userservice/pom.xml b/spring-userservice/pom.xml index 93b01ee49c..dc0d4d295c 100644 --- a/spring-userservice/pom.xml +++ b/spring-userservice/pom.xml @@ -240,39 +240,52 @@ ${maven-surefire-plugin.version} - + **/*IntegrationTest.java - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - - + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + 4.1.3.RELEASE diff --git a/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java b/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceIntegrationTest.java similarity index 98% rename from spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java rename to spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceIntegrationTest.java index 6e1cd67e06..79d60aa540 100644 --- a/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceTest.java +++ b/spring-userservice/src/test/java/org/baeldung/userservice/CustomUserDetailsServiceIntegrationTest.java @@ -25,7 +25,7 @@ import java.util.logging.Logger; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = { MvcConfig.class, PersistenceDerbyJPAConfig.class, SecSecurityConfig.class }) @WebAppConfiguration -public class CustomUserDetailsServiceTest { +public class CustomUserDetailsServiceIntegrationTest { private static final Logger LOG = Logger.getLogger("CustomUserDetailsServiceTest"); From 7667d25bb7fd4ca0da58f0452d828af5f6d96f65 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 17 Oct 2016 12:57:13 +0200 Subject: [PATCH 183/309] add integration test profile --- spring-thymeleaf/pom.xml | 58 ++++++++++++------- ...lityObjectsControllerIntegrationTest.java} | 2 +- ...youtDialectControllerIntegrationTest.java} | 2 +- 3 files changed, 39 insertions(+), 23 deletions(-) rename spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/{ExpressionUtilityObjectsControllerTest.java => ExpressionUtilityObjectsControllerIntegrationTest.java} (97%) rename spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/{LayoutDialectControllerTest.java => LayoutDialectControllerIntegrationTest.java} (97%) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index 960b358fe2..d2b3be1651 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -166,31 +166,47 @@ ${maven-surefire-plugin.version} + **/*IntegrationTest.java + **/*LiveTest.java - - - - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - 8082 - - + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerIntegrationTest.java similarity index 97% rename from spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java rename to spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerIntegrationTest.java index f6a79b7570..0638dbbc11 100644 --- a/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerTest.java +++ b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/ExpressionUtilityObjectsControllerIntegrationTest.java @@ -29,7 +29,7 @@ import com.baeldung.thymeleaf.config.WebMVCSecurity; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(classes = { WebApp.class, WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }) -public class ExpressionUtilityObjectsControllerTest { +public class ExpressionUtilityObjectsControllerIntegrationTest { @Autowired WebApplicationContext wac; diff --git a/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerTest.java b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerIntegrationTest.java similarity index 97% rename from spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerTest.java rename to spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerIntegrationTest.java index 33731f130d..23113dc229 100644 --- a/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerTest.java +++ b/spring-thymeleaf/src/test/java/com/baeldung/thymeleaf/controller/LayoutDialectControllerIntegrationTest.java @@ -29,7 +29,7 @@ import com.baeldung.thymeleaf.config.WebMVCSecurity; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(classes = { WebApp.class, WebMVCConfig.class, WebMVCSecurity.class, InitSecurity.class }) -public class LayoutDialectControllerTest { +public class LayoutDialectControllerIntegrationTest { @Autowired WebApplicationContext wac; From 167d2de4acd9723813028c49efb5d5c18e28dbbd Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 17 Oct 2016 13:19:52 +0200 Subject: [PATCH 184/309] add integration test profile --- spring-spel/pom.xml | 46 +++++++++++++++++++ ...SpelTest.java => SpelIntegrationTest.java} | 2 +- 2 files changed, 47 insertions(+), 1 deletion(-) rename spring-spel/src/test/java/com/baeldung/spel/{SpelTest.java => SpelIntegrationTest.java} (99%) diff --git a/spring-spel/pom.xml b/spring-spel/pom.xml index 12b7164e27..add5e53348 100644 --- a/spring-spel/pom.xml +++ b/spring-spel/pom.xml @@ -46,7 +46,53 @@ true + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + \ No newline at end of file diff --git a/spring-spel/src/test/java/com/baeldung/spel/SpelTest.java b/spring-spel/src/test/java/com/baeldung/spel/SpelIntegrationTest.java similarity index 99% rename from spring-spel/src/test/java/com/baeldung/spel/SpelTest.java rename to spring-spel/src/test/java/com/baeldung/spel/SpelIntegrationTest.java index 5cf18bc1d2..bff42caead 100644 --- a/spring-spel/src/test/java/com/baeldung/spel/SpelTest.java +++ b/spring-spel/src/test/java/com/baeldung/spel/SpelIntegrationTest.java @@ -13,7 +13,7 @@ import static org.junit.Assert.assertThat; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:applicationContext.xml"}) -public class SpelTest { +public class SpelIntegrationTest { @Autowired private SpelArithmetic spelArithmetic = new SpelArithmetic(); From 1e9d1a75663a4c02bbdab5aeebd85345bb6d1ef6 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 17 Oct 2016 13:30:13 +0200 Subject: [PATCH 185/309] add integration test profile --- .../spring-security-x509-basic-auth/pom.xml | 63 ++++++++++++++++--- ...9AuthenticationServerIntegrationTest.java} | 2 +- .../spring-security-x509-client-auth/pom.xml | 62 +++++++++++++++--- ...9AuthenticationServerIntegrationTest.java} | 2 +- 4 files changed, 111 insertions(+), 18 deletions(-) rename spring-security-x509/spring-security-x509-basic-auth/src/test/java/com/baeldung/spring/security/x509/{X509AuthenticationServerTests.java => X509AuthenticationServerIntegrationTest.java} (85%) rename spring-security-x509/spring-security-x509-client-auth/src/test/java/com/baeldung/spring/security/x509/{X509AuthenticationServerTests.java => X509AuthenticationServerIntegrationTest.java} (85%) diff --git a/spring-security-x509/spring-security-x509-basic-auth/pom.xml b/spring-security-x509/spring-security-x509-basic-auth/pom.xml index 87fdd64727..8f460c83ec 100644 --- a/spring-security-x509/spring-security-x509-basic-auth/pom.xml +++ b/spring-security-x509/spring-security-x509-basic-auth/pom.xml @@ -16,12 +16,59 @@ 0.0.1-SNAPSHOT - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + diff --git a/spring-security-x509/spring-security-x509-basic-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerTests.java b/spring-security-x509/spring-security-x509-basic-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerIntegrationTest.java similarity index 85% rename from spring-security-x509/spring-security-x509-basic-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerTests.java rename to spring-security-x509/spring-security-x509-basic-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerIntegrationTest.java index 0b9a11552a..5eb1c25ed6 100644 --- a/spring-security-x509/spring-security-x509-basic-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerTests.java +++ b/spring-security-x509/spring-security-x509-basic-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerIntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class X509AuthenticationServerTests { +public class X509AuthenticationServerIntegrationTest { @Test public void contextLoads() { } diff --git a/spring-security-x509/spring-security-x509-client-auth/pom.xml b/spring-security-x509/spring-security-x509-client-auth/pom.xml index 56cef8ea07..ffddabef40 100644 --- a/spring-security-x509/spring-security-x509-client-auth/pom.xml +++ b/spring-security-x509/spring-security-x509-client-auth/pom.xml @@ -16,12 +16,58 @@ 0.0.1-SNAPSHOT - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-security-x509/spring-security-x509-client-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerTests.java b/spring-security-x509/spring-security-x509-client-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerIntegrationTest.java similarity index 85% rename from spring-security-x509/spring-security-x509-client-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerTests.java rename to spring-security-x509/spring-security-x509-client-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerIntegrationTest.java index 0b9a11552a..5eb1c25ed6 100644 --- a/spring-security-x509/spring-security-x509-client-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerTests.java +++ b/spring-security-x509/spring-security-x509-client-auth/src/test/java/com/baeldung/spring/security/x509/X509AuthenticationServerIntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class X509AuthenticationServerTests { +public class X509AuthenticationServerIntegrationTest { @Test public void contextLoads() { } From 903c9c52999f1421f2f3d8c18a78865e29b73c36 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 17 Oct 2016 19:35:24 +0200 Subject: [PATCH 186/309] add integration test profile --- spring-protobuf/pom.xml | 48 ++++++++++- ...t.java => ApplicationIntegrationTest.java} | 2 +- spring-rest-angular/pom.xml | 85 ++++++++++++++----- ...ava => StudentServiceIntegrationTest.java} | 2 +- 4 files changed, 113 insertions(+), 24 deletions(-) rename spring-protobuf/src/test/java/com/baeldung/protobuf/{ApplicationTest.java => ApplicationIntegrationTest.java} (98%) rename spring-rest-angular/src/test/java/org/baeldung/web/service/{StudentServiceTest.java => StudentServiceIntegrationTest.java} (98%) diff --git a/spring-protobuf/pom.xml b/spring-protobuf/pom.xml index 1275d72edf..a080d51221 100644 --- a/spring-protobuf/pom.xml +++ b/spring-protobuf/pom.xml @@ -37,7 +37,6 @@ org.apache.httpcomponents httpclient - 4.5.2 @@ -47,12 +46,57 @@ org.apache.maven.plugins maven-compiler-plugin - 3.3 1.8 1.8 + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java similarity index 98% rename from spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java rename to spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java index a17082cea7..914cf18627 100644 --- a/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java +++ b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationIntegrationTest.java @@ -24,7 +24,7 @@ import static org.junit.Assert.assertThat; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebIntegrationTest -public class ApplicationTest { +public class ApplicationIntegrationTest { private static final String COURSE1_URL = "http://localhost:8080/courses/1"; diff --git a/spring-rest-angular/pom.xml b/spring-rest-angular/pom.xml index 981ee9dabc..ce496df742 100644 --- a/spring-rest-angular/pom.xml +++ b/spring-rest-angular/pom.xml @@ -71,30 +71,75 @@ - - angular-spring-rest-sample - + + angular-spring-rest-sample + - - org.apache.maven.plugins - maven-compiler-plugin - - 1.8 - 1.8 - - + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + - - org.apache.maven.plugins - maven-war-plugin - - false - - + + org.apache.maven.plugins + maven-war-plugin + + false + + - - + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + 19.0 diff --git a/spring-rest-angular/src/test/java/org/baeldung/web/service/StudentServiceTest.java b/spring-rest-angular/src/test/java/org/baeldung/web/service/StudentServiceIntegrationTest.java similarity index 98% rename from spring-rest-angular/src/test/java/org/baeldung/web/service/StudentServiceTest.java rename to spring-rest-angular/src/test/java/org/baeldung/web/service/StudentServiceIntegrationTest.java index 1199f15ab3..6ad80e5caf 100644 --- a/spring-rest-angular/src/test/java/org/baeldung/web/service/StudentServiceTest.java +++ b/spring-rest-angular/src/test/java/org/baeldung/web/service/StudentServiceIntegrationTest.java @@ -18,7 +18,7 @@ import static org.hamcrest.core.IsEqual.*; @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @IntegrationTest("server.port:8888") -public class StudentServiceTest { +public class StudentServiceIntegrationTest { private static final String ENDPOINT = "http://localhost:8888/student/get"; From e9f3cfd7c6e872d86b84132c98b760da2b33eca0 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 17 Oct 2016 19:43:48 +0200 Subject: [PATCH 187/309] add integration test profile --- spring-mvc-web-vs-initializer/pom.xml | 67 ++++++++++++++++--- ...t.java => JavaServletIntegrationTest.java} | 2 +- ...st.java => XmlServletIntegrationTest.java} | 2 +- 3 files changed, 59 insertions(+), 12 deletions(-) rename spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/{JavaServletTest.java => JavaServletIntegrationTest.java} (97%) rename spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/{XmlServletTest.java => XmlServletIntegrationTest.java} (97%) diff --git a/spring-mvc-web-vs-initializer/pom.xml b/spring-mvc-web-vs-initializer/pom.xml index 0d735e7188..b448673ef8 100644 --- a/spring-mvc-web-vs-initializer/pom.xml +++ b/spring-mvc-web-vs-initializer/pom.xml @@ -146,17 +146,64 @@ - - spring-mvc-web-vs-initializer - - - src/main/resources - true - - - - + + spring-mvc-web-vs-initializer + + + src/main/resources + true + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + 4.3.1.RELEASE diff --git a/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletIntegrationTest.java similarity index 97% rename from spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java rename to spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletIntegrationTest.java index 99b5ef8c2f..0461cc8fcc 100644 --- a/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletTest.java +++ b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/JavaServletIntegrationTest.java @@ -20,7 +20,7 @@ import org.springframework.web.servlet.ModelAndView; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(loader=AnnotationConfigWebContextLoader.class, classes = MvcConfig.class) -public class JavaServletTest { +public class JavaServletIntegrationTest { private MockMvc mockMvc; diff --git a/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletIntegrationTest.java similarity index 97% rename from spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java rename to spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletIntegrationTest.java index e7695e36c0..e1273f8f88 100644 --- a/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletTest.java +++ b/spring-mvc-web-vs-initializer/src/test/java/org/baeldung/controller/XmlServletIntegrationTest.java @@ -19,7 +19,7 @@ import org.springframework.web.servlet.ModelAndView; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(loader=GenericXmlWebContextLoader.class, locations = "classpath*:mvc-configuration.xml") -public class XmlServletTest { +public class XmlServletIntegrationTest { private MockMvc mockMvc; From b4f778a0e74642cf8dfc17e23c368b103b8af5b0 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 18 Oct 2016 12:55:02 +0200 Subject: [PATCH 188/309] add integration test profile --- spring-mvc-velocity/pom.xml | 37 ++++++++++++++++++- ...DataContentControllerIntegrationTest.java} | 2 +- 2 files changed, 37 insertions(+), 2 deletions(-) rename spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/{DataContentControllerTest.java => DataContentControllerIntegrationTest.java} (98%) diff --git a/spring-mvc-velocity/pom.xml b/spring-mvc-velocity/pom.xml index 6c63e0be18..83f3150df9 100644 --- a/spring-mvc-velocity/pom.xml +++ b/spring-mvc-velocity/pom.xml @@ -139,7 +139,7 @@ ${maven-surefire-plugin.version} - + **/*IntegrationTest.java @@ -151,6 +151,41 @@ + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + 4.1.4.RELEASE diff --git a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerIntegrationTest.java similarity index 98% rename from spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java rename to spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerIntegrationTest.java index 1f90b0fc67..7f92e1ee45 100644 --- a/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerTest.java +++ b/spring-mvc-velocity/src/test/java/com/baeldung/mvc/velocity/test/DataContentControllerIntegrationTest.java @@ -29,7 +29,7 @@ import com.baeldung.mvc.velocity.test.config.TestConfig; // @ContextConfiguration(locations = {"classpath:mvc-servlet.xml"}) @ContextConfiguration(classes = { TestConfig.class, WebConfig.class }) @WebAppConfiguration -public class DataContentControllerTest { +public class DataContentControllerIntegrationTest { private MockMvc mockMvc; From 668605c4e30bd1d992f39e2dec774aa5f36c70ce Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 18 Oct 2016 13:29:59 +0200 Subject: [PATCH 189/309] add integration test profile --- spring-mockito/pom.xml | 61 ++++++++++++++++--- ...t.java => UserServiceIntegrationTest.java} | 2 +- 2 files changed, 54 insertions(+), 9 deletions(-) rename spring-mockito/src/test/java/com/baeldung/{UserServiceTest.java => UserServiceIntegrationTest.java} (95%) diff --git a/spring-mockito/pom.xml b/spring-mockito/pom.xml index 3dcca7aab7..c8e0d3b7f5 100644 --- a/spring-mockito/pom.xml +++ b/spring-mockito/pom.xml @@ -34,15 +34,60 @@ - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + UTF-8 1.8 diff --git a/spring-mockito/src/test/java/com/baeldung/UserServiceTest.java b/spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationTest.java similarity index 95% rename from spring-mockito/src/test/java/com/baeldung/UserServiceTest.java rename to spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationTest.java index 631a8634be..70861a96e1 100644 --- a/spring-mockito/src/test/java/com/baeldung/UserServiceTest.java +++ b/spring-mockito/src/test/java/com/baeldung/UserServiceIntegrationTest.java @@ -12,7 +12,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @ActiveProfiles("test") @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = MocksApplication.class) -public class UserServiceTest { +public class UserServiceIntegrationTest { @Autowired private UserService userService; From de1b5e0a174f363846bf70863362bfc6a1056cc0 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 18 Oct 2016 15:52:19 +0200 Subject: [PATCH 190/309] minor cleanup --- spring-jpa/pom.xml | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/spring-jpa/pom.xml b/spring-jpa/pom.xml index ebb9c5bc83..cf0c2246af 100644 --- a/spring-jpa/pom.xml +++ b/spring-jpa/pom.xml @@ -182,7 +182,7 @@ ${maven-surefire-plugin.version} - + **/*IntegrationTest.java @@ -190,31 +190,10 @@ - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - - - + 4.3.2.RELEASE From 35009ad3c469e1dd4a5c8c95d8ca73206c7add4a Mon Sep 17 00:00:00 2001 From: Ante Pocedulic Date: Tue, 18 Oct 2016 16:54:54 +0200 Subject: [PATCH 191/309] - refactored CacheHelper class (#756) --- .../java/org/baeldung/ehcache/app/App.java | 24 ------------------- .../baeldung/ehcache/config/CacheHelper.java | 8 +++++-- 2 files changed, 6 insertions(+), 26 deletions(-) delete mode 100755 spring-all/src/main/java/org/baeldung/ehcache/app/App.java diff --git a/spring-all/src/main/java/org/baeldung/ehcache/app/App.java b/spring-all/src/main/java/org/baeldung/ehcache/app/App.java deleted file mode 100755 index 99370186a3..0000000000 --- a/spring-all/src/main/java/org/baeldung/ehcache/app/App.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.baeldung.ehcache.app; - -import org.baeldung.ehcache.calculator.SquaredCalculator; -import org.baeldung.ehcache.config.CacheHelper; - -public class App { - - public static void main(String[] args) { - - SquaredCalculator squaredCalculator = new SquaredCalculator(); - CacheHelper cacheHelper = new CacheHelper(); - - squaredCalculator.setCache(cacheHelper); - - calculate(squaredCalculator); - calculate(squaredCalculator); - } - - private static void calculate(SquaredCalculator squaredCalculator) { - for (int i = 10; i < 15; i++) { - System.out.println("Square value of " + i + " is: " + squaredCalculator.getSquareValueOfNumber(i) + "\n"); - } - } -} diff --git a/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java b/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java index 387a57880b..7f59ad8cfb 100755 --- a/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java +++ b/spring-all/src/main/java/org/baeldung/ehcache/config/CacheHelper.java @@ -12,14 +12,18 @@ public class CacheHelper { private Cache squareNumberCache; public CacheHelper() { - cacheManager = CacheManagerBuilder.newCacheManagerBuilder().withCache("squaredNumber", CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, Integer.class, ResourcePoolsBuilder.heap(10))).build(); + cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build(); cacheManager.init(); - squareNumberCache = cacheManager.getCache("squaredNumber", Integer.class, Integer.class); + squareNumberCache = cacheManager.createCache("squaredNumber", CacheConfigurationBuilder.newCacheConfigurationBuilder(Integer.class, Integer.class, ResourcePoolsBuilder.heap(10))); } public Cache getSquareNumberCache() { return squareNumberCache; } + public Cache getSquareNumberCacheFromCacheManager() { + return cacheManager.getCache("squaredNumber", Integer.class, Integer.class); + } + } From 4a2546b8fc4a1abfcf6fff91b8a46b4fae41d69f Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Tue, 18 Oct 2016 21:58:50 +0530 Subject: [PATCH 192/309] Changes for integration test --- selenium-junit-testng/pom.xml | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/selenium-junit-testng/pom.xml b/selenium-junit-testng/pom.xml index f964f94ed4..9ad601fdcd 100644 --- a/selenium-junit-testng/pom.xml +++ b/selenium-junit-testng/pom.xml @@ -15,18 +15,6 @@ 1.8 - - org.apache.maven.plugins - maven-surefire-plugin - 2.19.1 - - true - - **/*LiveTest.java - - - - @@ -37,6 +25,7 @@ org.apache.maven.plugins maven-surefire-plugin + 2.19.1 **/*LiveTest.java From 8fb51bdfd6f4e915e0e542ab795d5adab1eeef2b Mon Sep 17 00:00:00 2001 From: Sameera Date: Tue, 18 Oct 2016 22:35:50 +0530 Subject: [PATCH 193/309] Removed unwanted Junit deps and updating the Junit version as a property --- printscreen/pom.xml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/printscreen/pom.xml b/printscreen/pom.xml index 25316a3b48..ddb813a7a2 100644 --- a/printscreen/pom.xml +++ b/printscreen/pom.xml @@ -12,19 +12,14 @@ UTF-8 + 4.12 junit junit - 3.8.1 - test - - - junit - junit - 4.12 + ${junit.version} test From 199fdf2198c843011052e9f2ab3dc337acdd8d73 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 18 Oct 2016 19:16:53 +0200 Subject: [PATCH 194/309] configure integration test --- spring-hibernate4/pom.xml | 23 +------------------ ... => HibernateCriteriaIntegrationTest.java} | 2 +- .../criteria/HibernateCriteriaTestSuite.java | 2 +- ... => HibernateFetchingIntegrationTest.java} | 2 +- .../persistence/audit/AuditTestSuite.java | 6 ++--- ... => EnversFooBarAuditIntegrationTest.java} | 4 ++-- ...t.java => JPABarAuditIntegrationTest.java} | 4 ++-- ...SpringDataJPABarAuditIntegrationTest.java} | 4 ++-- 8 files changed, 13 insertions(+), 34 deletions(-) rename spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/{HibernateCriteriaTest.java => HibernateCriteriaIntegrationTest.java} (99%) rename spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/{HibernateFetchingTest.java => HibernateFetchingIntegrationTest.java} (96%) rename spring-hibernate4/src/test/java/com/baeldung/persistence/audit/{EnversFooBarAuditTest.java => EnversFooBarAuditIntegrationTest.java} (98%) rename spring-hibernate4/src/test/java/com/baeldung/persistence/audit/{JPABarAuditTest.java => JPABarAuditIntegrationTest.java} (97%) rename spring-hibernate4/src/test/java/com/baeldung/persistence/audit/{SpringDataJPABarAuditTest.java => SpringDataJPABarAuditIntegrationTest.java} (96%) diff --git a/spring-hibernate4/pom.xml b/spring-hibernate4/pom.xml index 4f5cd0c290..d4dabcc274 100644 --- a/spring-hibernate4/pom.xml +++ b/spring-hibernate4/pom.xml @@ -185,7 +185,7 @@ ${maven-surefire-plugin.version} - + **/*IntegrationTest.java @@ -193,27 +193,6 @@ - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - - diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaIntegrationTest.java similarity index 99% rename from spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java rename to spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaIntegrationTest.java index 88186098cc..2275bf14f2 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaIntegrationTest.java @@ -12,7 +12,7 @@ import com.baeldung.hibernate.criteria.model.Item; import com.baeldung.hibernate.criteria.util.HibernateUtil; import com.baeldung.hibernate.criteria.view.ApplicationView; -public class HibernateCriteriaTest { +public class HibernateCriteriaIntegrationTest { final private ApplicationView av = new ApplicationView(); diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java index 2911fb4725..dc1040734f 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/criteria/HibernateCriteriaTestSuite.java @@ -4,7 +4,7 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) -@Suite.SuiteClasses({ HibernateCriteriaTest.class }) +@Suite.SuiteClasses({ HibernateCriteriaIntegrationTest.class }) public class HibernateCriteriaTestSuite { diff --git a/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java b/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingIntegrationTest.java similarity index 96% rename from spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java rename to spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingIntegrationTest.java index 42245ca89e..65bf36f8bf 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/hibernate/fetching/HibernateFetchingIntegrationTest.java @@ -11,7 +11,7 @@ import java.util.Set; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -public class HibernateFetchingTest { +public class HibernateFetchingIntegrationTest { // this loads sample data in the database @Before diff --git a/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/AuditTestSuite.java b/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/AuditTestSuite.java index 8a8a3445f6..34c725d62b 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/AuditTestSuite.java +++ b/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/AuditTestSuite.java @@ -5,9 +5,9 @@ import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ // @formatter:off - EnversFooBarAuditTest.class, - JPABarAuditTest.class, - SpringDataJPABarAuditTest.class + EnversFooBarAuditIntegrationTest.class, + JPABarAuditIntegrationTest.class, + SpringDataJPABarAuditIntegrationTest.class }) // @formatter:on public class AuditTestSuite { // diff --git a/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditTest.java b/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditIntegrationTest.java similarity index 98% rename from spring-hibernate4/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditTest.java rename to spring-hibernate4/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditIntegrationTest.java index 6c13816b63..ed2e111c8f 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/EnversFooBarAuditIntegrationTest.java @@ -28,9 +28,9 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) -public class EnversFooBarAuditTest { +public class EnversFooBarAuditIntegrationTest { - private static Logger logger = LoggerFactory.getLogger(EnversFooBarAuditTest.class); + private static Logger logger = LoggerFactory.getLogger(EnversFooBarAuditIntegrationTest.class); @BeforeClass public static void setUpBeforeClass() throws Exception { diff --git a/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/JPABarAuditTest.java b/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/JPABarAuditIntegrationTest.java similarity index 97% rename from spring-hibernate4/src/test/java/com/baeldung/persistence/audit/JPABarAuditTest.java rename to spring-hibernate4/src/test/java/com/baeldung/persistence/audit/JPABarAuditIntegrationTest.java index 1e4a10f61c..b63a4b989b 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/JPABarAuditTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/JPABarAuditIntegrationTest.java @@ -27,9 +27,9 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) -public class JPABarAuditTest { +public class JPABarAuditIntegrationTest { - private static Logger logger = LoggerFactory.getLogger(JPABarAuditTest.class); + private static Logger logger = LoggerFactory.getLogger(JPABarAuditIntegrationTest.class); @BeforeClass public static void setUpBeforeClass() throws Exception { diff --git a/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditTest.java b/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditIntegrationTest.java similarity index 96% rename from spring-hibernate4/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditTest.java rename to spring-hibernate4/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditIntegrationTest.java index 05c0e9fa83..e794b282f6 100644 --- a/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditTest.java +++ b/spring-hibernate4/src/test/java/com/baeldung/persistence/audit/SpringDataJPABarAuditIntegrationTest.java @@ -26,9 +26,9 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) -public class SpringDataJPABarAuditTest { +public class SpringDataJPABarAuditIntegrationTest { - private static Logger logger = LoggerFactory.getLogger(SpringDataJPABarAuditTest.class); + private static Logger logger = LoggerFactory.getLogger(SpringDataJPABarAuditIntegrationTest.class); @BeforeClass public static void setUpBeforeClass() throws Exception { From 3e31921e49e3d06ea55c51a497b157ad0f42ff8b Mon Sep 17 00:00:00 2001 From: Sameera Date: Tue, 18 Oct 2016 22:49:09 +0530 Subject: [PATCH 195/309] Removed try catch and set to throw the exception --- .../java/org/baeldung/corejava/Screenshot.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/printscreen/src/main/java/org/baeldung/corejava/Screenshot.java b/printscreen/src/main/java/org/baeldung/corejava/Screenshot.java index 57a754bb83..d33761932f 100644 --- a/printscreen/src/main/java/org/baeldung/corejava/Screenshot.java +++ b/printscreen/src/main/java/org/baeldung/corejava/Screenshot.java @@ -20,16 +20,12 @@ public class Screenshot { this.timeToWait = timeToWait; } - public void getScreenshot() { - try { - Thread.sleep(timeToWait); - Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); - Robot robot = new Robot(); - BufferedImage img = robot.createScreenCapture(rectangle); - ImageIO.write(img, fileType, setupFileNamePath()); - } catch (Exception ex) { - System.out.println("Error occurred while getting the Print Screen."); - } + public void getScreenshot() throws Exception { + Thread.sleep(timeToWait); + Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); + Robot robot = new Robot(); + BufferedImage img = robot.createScreenCapture(rectangle); + ImageIO.write(img, fileType, setupFileNamePath()); } private File setupFileNamePath() { From 1c775ef0efb1c6240e4b6c089536ea40b2177901 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 18 Oct 2016 19:30:36 +0200 Subject: [PATCH 196/309] add integration test profile --- spring-hibernate3/pom.xml | 68 ++++++++++++------- .../baeldung/spring/PersistenceConfig.java | 2 +- .../main/resources/persistence-h2.properties | 10 +++ 3 files changed, 55 insertions(+), 25 deletions(-) create mode 100644 spring-hibernate3/src/main/resources/persistence-h2.properties diff --git a/spring-hibernate3/pom.xml b/spring-hibernate3/pom.xml index 59053be596..9f99d83a42 100644 --- a/spring-hibernate3/pom.xml +++ b/spring-hibernate3/pom.xml @@ -46,7 +46,13 @@ tomcat-dbcp ${tomcat-dbcp.version} - + + + com.h2database + h2 + ${h2.version} + + @@ -127,39 +133,52 @@ ${maven-surefire-plugin.version} - + **/*IntegrationTest.java - - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - - + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + 4.2.5.RELEASE @@ -170,6 +189,7 @@ 3.6.10.Final 5.1.38 7.0.47 + 1.4.191 1.7.13 diff --git a/spring-hibernate3/src/main/java/org/baeldung/spring/PersistenceConfig.java b/spring-hibernate3/src/main/java/org/baeldung/spring/PersistenceConfig.java index 15752165cc..fea76dfc70 100644 --- a/spring-hibernate3/src/main/java/org/baeldung/spring/PersistenceConfig.java +++ b/spring-hibernate3/src/main/java/org/baeldung/spring/PersistenceConfig.java @@ -21,7 +21,7 @@ import com.google.common.base.Preconditions; @Configuration @EnableTransactionManagement -@PropertySource({ "classpath:persistence-mysql.properties" }) +@PropertySource({ "classpath:persistence-h2.properties" }) @ComponentScan({ "org.baeldung.persistence.dao", "org.baeldung.persistence.service" }) public class PersistenceConfig { diff --git a/spring-hibernate3/src/main/resources/persistence-h2.properties b/spring-hibernate3/src/main/resources/persistence-h2.properties new file mode 100644 index 0000000000..d2fcd9545b --- /dev/null +++ b/spring-hibernate3/src/main/resources/persistence-h2.properties @@ -0,0 +1,10 @@ +# jdbc.X +jdbc.driverClassName=org.h2.Driver +jdbc.url=jdbc:h2:mem:spring_hibernate3_01;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE +jdbc.user=sa +jdbc.pass= + +# hibernate.X +hibernate.dialect=org.hibernate.dialect.H2Dialect +hibernate.show_sql=false +hibernate.hbm2ddl.auto=create-drop \ No newline at end of file From 1dac21c3a60fdcb447a8ac89ce6fde9647b020e5 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 18 Oct 2016 19:52:38 +0200 Subject: [PATCH 197/309] configure integration test --- spring-exceptions/pom.xml | 23 +------------------ ...bcConnectionExceptionIntegrationTest.java} | 2 +- ...ataIntegrityExceptionIntegrationTest.java} | 2 +- ...ataRetrievalExceptionIntegrationTest.java} | 2 +- ...SourceLookupExceptionIntegrationTest.java} | 2 +- ...esourceUsageExceptionIntegrationTest.java} | 2 +- 6 files changed, 6 insertions(+), 27 deletions(-) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{CannotGetJdbcConnectionExceptionTest.java => CannotGetJdbcConnectionExceptionIntegrationTest.java} (95%) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{DataIntegrityExceptionTest.java => DataIntegrityExceptionIntegrationTest.java} (96%) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{DataRetrievalExceptionTest.java => DataRetrievalExceptionIntegrationTest.java} (97%) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{DataSourceLookupExceptionTest.java => DataSourceLookupExceptionIntegrationTest.java} (95%) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{InvalidResourceUsageExceptionTest.java => InvalidResourceUsageExceptionIntegrationTest.java} (96%) diff --git a/spring-exceptions/pom.xml b/spring-exceptions/pom.xml index 733a721c58..12b7e5de79 100644 --- a/spring-exceptions/pom.xml +++ b/spring-exceptions/pom.xml @@ -194,7 +194,7 @@ ${maven-surefire-plugin.version} - + **/*IntegrationTest.java @@ -202,27 +202,6 @@ - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - - diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionIntegrationTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionIntegrationTest.java index 7a1804ec49..84038e4dcf 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionIntegrationTest.java @@ -18,7 +18,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause5NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class CannotGetJdbcConnectionExceptionTest { +public class CannotGetJdbcConnectionExceptionIntegrationTest { @Autowired private DataSource restDataSource; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionIntegrationTest.java similarity index 96% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionIntegrationTest.java index 357eb168cd..e62a455dd4 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionIntegrationTest.java @@ -17,7 +17,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class DataIntegrityExceptionTest { +public class DataIntegrityExceptionIntegrationTest { @Autowired private IFooService fooService; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionIntegrationTest.java similarity index 97% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionIntegrationTest.java index 69b98b0539..8a7c237708 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionIntegrationTest.java @@ -17,7 +17,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class DataRetrievalExceptionTest { +public class DataRetrievalExceptionIntegrationTest { @Autowired private DataSource restDataSource; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionIntegrationTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionIntegrationTest.java index 036f99ac8f..161bf3252b 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionIntegrationTest.java @@ -13,7 +13,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause4NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class DataSourceLookupExceptionTest { +public class DataSourceLookupExceptionIntegrationTest { @Test(expected = DataSourceLookupFailureException.class) public void whenLookupNonExistentDataSource_thenDataSourceLookupFailureException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionIntegrationTest.java similarity index 96% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionIntegrationTest.java index 64f12e82e9..316efba0b9 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionIntegrationTest.java @@ -16,7 +16,7 @@ import javax.sql.DataSource; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class InvalidResourceUsageExceptionTest { +public class InvalidResourceUsageExceptionIntegrationTest { @Autowired private IFooService fooService; From 66dfb6fd3781685943e7118464925b1bd87bd606 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 18 Oct 2016 20:20:13 +0200 Subject: [PATCH 198/309] configure integration test --- spring-data-redis/pom.xml | 21 ++++++++++++++++++- ... RedisMessageListenerIntegrationTest.java} | 2 +- ... => StudentRepositoryIntegrationTest.java} | 2 +- 3 files changed, 22 insertions(+), 3 deletions(-) rename spring-data-redis/src/test/java/com/baeldung/spring/data/redis/{RedisMessageListenerTest.java => RedisMessageListenerIntegrationTest.java} (95%) rename spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/{StudentRepositoryTest.java => StudentRepositoryIntegrationTest.java} (98%) diff --git a/spring-data-redis/pom.xml b/spring-data-redis/pom.xml index 25686fca16..6f1fc9294d 100644 --- a/spring-data-redis/pom.xml +++ b/spring-data-redis/pom.xml @@ -12,6 +12,7 @@ 4.2.5.RELEASE 1.6.2.RELEASE 0.8.0 + 2.19.1 @@ -72,5 +73,23 @@ ${nosqlunit.version} - + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + + + + + + + + + diff --git a/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerTest.java b/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java similarity index 95% rename from spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerTest.java rename to spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java index 403cf990e0..01dbfcff4d 100644 --- a/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerTest.java +++ b/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/RedisMessageListenerIntegrationTest.java @@ -15,7 +15,7 @@ import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = RedisConfig.class) -public class RedisMessageListenerTest { +public class RedisMessageListenerIntegrationTest { @Autowired private RedisMessagePublisher redisMessagePublisher; diff --git a/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryTest.java b/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java similarity index 98% rename from spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryTest.java rename to spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java index c32dfc7670..1028c0bc24 100644 --- a/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryTest.java +++ b/spring-data-redis/src/test/java/com/baeldung/spring/data/redis/repo/StudentRepositoryIntegrationTest.java @@ -15,7 +15,7 @@ import static org.junit.Assert.assertNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = RedisConfig.class) -public class StudentRepositoryTest { +public class StudentRepositoryIntegrationTest { @Autowired private StudentRepository studentRepository; From 278ada7e7f605bd5729ed78c27e611aba8136839 Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Wed, 19 Oct 2016 12:38:32 +0530 Subject: [PATCH 199/309] Default Unit Test changes --- selenium-junit-testng/pom.xml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/selenium-junit-testng/pom.xml b/selenium-junit-testng/pom.xml index 9ad601fdcd..861c0b1986 100644 --- a/selenium-junit-testng/pom.xml +++ b/selenium-junit-testng/pom.xml @@ -15,6 +15,18 @@ 1.8 + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + true + + **/*UnitTest.java + + + + @@ -27,9 +39,9 @@ maven-surefire-plugin 2.19.1 - - **/*LiveTest.java - + + **/*LiveTest.java + From 1e4cd5a47c7ad4b5687327786f543861c0a14bed Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 19 Oct 2016 12:56:46 +0200 Subject: [PATCH 200/309] add integration test profile --- spring-data-neo4j/pom.xml | 60 ++++++++++++++++--- ...va => MovieRepositoryIntegrationTest.java} | 4 +- 2 files changed, 55 insertions(+), 9 deletions(-) rename spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/{MovieRepositoryTest.java => MovieRepositoryIntegrationTest.java} (97%) diff --git a/spring-data-neo4j/pom.xml b/spring-data-neo4j/pom.xml index b0cf62ef2e..653dd6b2f6 100644 --- a/spring-data-neo4j/pom.xml +++ b/spring-data-neo4j/pom.xml @@ -13,6 +13,7 @@ UTF-8 3.0.1 4.1.1.RELEASE + 2.19.1 @@ -83,12 +84,57 @@ - - - - maven-compiler-plugin - - - + + + + maven-compiler-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryIntegrationTest.java similarity index 97% rename from spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java rename to spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryIntegrationTest.java index 0e54208c31..95bc38aafc 100644 --- a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java +++ b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryIntegrationTest.java @@ -24,7 +24,7 @@ import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = MovieDatabaseNeo4jTestConfiguration.class) @ActiveProfiles(profiles = "test") -public class MovieRepositoryTest { +public class MovieRepositoryIntegrationTest { @Autowired private MovieRepository movieRepository; @@ -32,7 +32,7 @@ public class MovieRepositoryTest { @Autowired private PersonRepository personRepository; - public MovieRepositoryTest() { + public MovieRepositoryIntegrationTest() { } @Before From 890128654bc8f24c3affb9ee5c4b8cbee1acda2e Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 19 Oct 2016 13:15:28 +0200 Subject: [PATCH 201/309] add integration test profile --- spring-data-mongodb/pom.xml | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 102344a3fa..fd212548d0 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -112,9 +112,55 @@ 1.8 + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + UTF-8 @@ -130,6 +176,7 @@ 1.7.12 1.1.3 + 2.19.1 From 496553caaf737ce986b5694fba52326dd478b6a0 Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 19 Oct 2016 13:40:56 +0200 Subject: [PATCH 202/309] add integration test profile --- spring-data-elasticsearch/pom.xml | 51 +++++++++++++++++++ ...java => ElasticSearchIntegrationTest.java} | 2 +- ...=> ElasticSearchQueryIntegrationTest.java} | 2 +- 3 files changed, 53 insertions(+), 2 deletions(-) rename spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/{ElasticSearchTest.java => ElasticSearchIntegrationTest.java} (99%) rename spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/{ElasticSearchQueryTest.java => ElasticSearchQueryIntegrationTest.java} (99%) diff --git a/spring-data-elasticsearch/pom.xml b/spring-data-elasticsearch/pom.xml index 42cf8fc740..dcb702ab16 100644 --- a/spring-data-elasticsearch/pom.xml +++ b/spring-data-elasticsearch/pom.xml @@ -20,6 +20,7 @@ 1.7.12 1.1.3 2.0.1.RELEASE + 2.19.1 @@ -86,4 +87,54 @@ + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + \ No newline at end of file diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchIntegrationTest.java similarity index 99% rename from spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java rename to spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchIntegrationTest.java index 863e1e4620..1280c8e1de 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchIntegrationTest.java @@ -29,7 +29,7 @@ import com.baeldung.spring.data.es.service.ArticleService; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = Config.class) -public class ElasticSearchTest { +public class ElasticSearchIntegrationTest { @Autowired private ElasticsearchTemplate elasticsearchTemplate; diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryIntegrationTest.java similarity index 99% rename from spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java rename to spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryIntegrationTest.java index ddf0ef4dac..cc4bce0c75 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryIntegrationTest.java @@ -42,7 +42,7 @@ import com.baeldung.spring.data.es.service.ArticleService; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = Config.class) -public class ElasticSearchQueryTest { +public class ElasticSearchQueryIntegrationTest { @Autowired private ElasticsearchTemplate elasticsearchTemplate; From 29ae3bc0102500ca55f3431f6cf3f30b6e553519 Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 19 Oct 2016 14:02:32 +0200 Subject: [PATCH 203/309] configure integration test --- spring-data-couchbase-2/pom.xml | 13 ++++++++++++- ... => PersonRepositoryServiceIntegrationTest.java} | 2 +- ...eTest.java => PersonServiceIntegrationTest.java} | 2 +- ...va => PersonTemplateServiceIntegrationTest.java} | 2 +- ...=> StudentRepositoryServiceIntegrationTest.java} | 2 +- ...Test.java => StudentServiceIntegrationTest.java} | 2 +- ...a => StudentTemplateServiceIntegrationTest.java} | 2 +- ...t.java => CampusServiceImplIntegrationTest.java} | 2 +- ...t.java => PersonServiceImplIntegrationTest.java} | 2 +- ....java => StudentServiceImplIntegrationTest.java} | 2 +- 10 files changed, 21 insertions(+), 10 deletions(-) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/{PersonRepositoryServiceTest.java => PersonRepositoryServiceIntegrationTest.java} (78%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/{PersonServiceTest.java => PersonServiceIntegrationTest.java} (98%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/{PersonTemplateServiceTest.java => PersonTemplateServiceIntegrationTest.java} (79%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/{StudentRepositoryServiceTest.java => StudentRepositoryServiceIntegrationTest.java} (78%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/{StudentServiceTest.java => StudentServiceIntegrationTest.java} (98%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/{StudentTemplateServiceTest.java => StudentTemplateServiceIntegrationTest.java} (79%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/{CampusServiceImplTest.java => CampusServiceImplIntegrationTest.java} (98%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/{PersonServiceImplTest.java => PersonServiceImplIntegrationTest.java} (98%) rename spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/{StudentServiceImplTest.java => StudentServiceImplIntegrationTest.java} (98%) diff --git a/spring-data-couchbase-2/pom.xml b/spring-data-couchbase-2/pom.xml index d24ef4aeaa..6716f82246 100644 --- a/spring-data-couchbase-2/pom.xml +++ b/spring-data-couchbase-2/pom.xml @@ -86,6 +86,17 @@ 1.7 + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + @@ -99,7 +110,7 @@ 1.1.3 1.7.12 4.11 - + 2.19.1 diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceIntegrationTest.java similarity index 78% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceIntegrationTest.java index ce5cf7667d..d710e57def 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceIntegrationTest.java @@ -3,7 +3,7 @@ package org.baeldung.spring.data.couchbase.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -public class PersonRepositoryServiceTest extends PersonServiceTest { +public class PersonRepositoryServiceIntegrationTest extends PersonServiceIntegrationTest { @Autowired @Qualifier("PersonRepositoryService") diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceIntegrationTest.java similarity index 98% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceIntegrationTest.java index c3bf9f2138..4044183849 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceIntegrationTest.java @@ -20,7 +20,7 @@ import com.couchbase.client.java.CouchbaseCluster; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; -public abstract class PersonServiceTest extends IntegrationTest { +public abstract class PersonServiceIntegrationTest extends IntegrationTest { static final String typeField = "_class"; static final String john = "John"; diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceIntegrationTest.java similarity index 79% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceIntegrationTest.java index 0238fa21fb..e19df8fc84 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonTemplateServiceIntegrationTest.java @@ -3,7 +3,7 @@ package org.baeldung.spring.data.couchbase.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -public class PersonTemplateServiceTest extends PersonServiceTest { +public class PersonTemplateServiceIntegrationTest extends PersonServiceIntegrationTest { @Autowired @Qualifier("PersonTemplateService") diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceIntegrationTest.java similarity index 78% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceIntegrationTest.java index 040453fd73..3b3f2a531a 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceIntegrationTest.java @@ -3,7 +3,7 @@ package org.baeldung.spring.data.couchbase.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -public class StudentRepositoryServiceTest extends StudentServiceTest { +public class StudentRepositoryServiceIntegrationTest extends StudentServiceIntegrationTest { @Autowired @Qualifier("StudentRepositoryService") diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceIntegrationTest.java similarity index 98% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceIntegrationTest.java index 0bf2c5d673..fba549a9e5 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceIntegrationTest.java @@ -22,7 +22,7 @@ import com.couchbase.client.java.CouchbaseCluster; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; -public abstract class StudentServiceTest extends IntegrationTest { +public abstract class StudentServiceIntegrationTest extends IntegrationTest { static final String typeField = "_class"; static final String joe = "Joe"; diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceIntegrationTest.java similarity index 79% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceIntegrationTest.java index dd5be8e059..29fd605bc6 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceIntegrationTest.java @@ -3,7 +3,7 @@ package org.baeldung.spring.data.couchbase.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -public class StudentTemplateServiceTest extends StudentServiceTest { +public class StudentTemplateServiceIntegrationTest extends StudentServiceIntegrationTest { @Autowired @Qualifier("StudentTemplateService") diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplIntegrationTest.java similarity index 98% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplIntegrationTest.java index d3982e1ecc..71648cf59b 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/CampusServiceImplIntegrationTest.java @@ -18,7 +18,7 @@ import org.springframework.data.geo.Distance; import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; -public class CampusServiceImplTest extends MultiBucketIntegationTest { +public class CampusServiceImplIntegrationTest extends MultiBucketIntegationTest { @Autowired private CampusServiceImpl campusService; diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplIntegrationTest.java similarity index 98% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplIntegrationTest.java index e1a880d9da..819798d536 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/PersonServiceImplIntegrationTest.java @@ -21,7 +21,7 @@ import com.couchbase.client.java.CouchbaseCluster; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; -public class PersonServiceImplTest extends MultiBucketIntegationTest { +public class PersonServiceImplIntegrationTest extends MultiBucketIntegationTest { static final String typeField = "_class"; static final String john = "John"; diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplIntegrationTest.java similarity index 98% rename from spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java rename to spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplIntegrationTest.java index c503726377..f37f11744d 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase2b/service/StudentServiceImplIntegrationTest.java @@ -23,7 +23,7 @@ import com.couchbase.client.java.CouchbaseCluster; import com.couchbase.client.java.document.JsonDocument; import com.couchbase.client.java.document.json.JsonObject; -public class StudentServiceImplTest extends MultiBucketIntegationTest { +public class StudentServiceImplIntegrationTest extends MultiBucketIntegationTest { static final String typeField = "_class"; static final String joe = "Joe"; From 7d59175bb6969b3e43e373de06a315d8e0f4f95d Mon Sep 17 00:00:00 2001 From: maibin Date: Wed, 19 Oct 2016 16:19:08 +0200 Subject: [PATCH 204/309] Executable WAR (#757) * 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 * Thymeleaf Natural Processing and Inlining * Expression Utility Objects, Thymeleaf * listOfStudents edited * Thymeleaf layout decorators * Executable Jar with Maven * Maven War executable --- spring-thymeleaf/pom.xml | 113 ++++++++++++++++++++++++++------------- 1 file changed, 76 insertions(+), 37 deletions(-) diff --git a/spring-thymeleaf/pom.xml b/spring-thymeleaf/pom.xml index d2b3be1651..e59ce77e57 100644 --- a/spring-thymeleaf/pom.xml +++ b/spring-thymeleaf/pom.xml @@ -166,47 +166,86 @@ ${maven-surefire-plugin.version} - **/*IntegrationTest.java - **/*LiveTest.java + **/*IntegrationTest.java + **/*LiveTest.java - + + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + jetty8x + embedded + + + + + + 8082 + + + + + + org.apache.tomcat.maven + tomcat7-maven-plugin + 2.0 + + + tomcat-run + + exec-war-only + + package + + / + false + webapp.jar + utf-8 + + + + - - - integration - - - - org.apache.maven.plugins - maven-surefire-plugin - - - integration-test - - test - - - - **/*LiveTest.java - - - **/*IntegrationTest.java - - - - - - - json - - - - - - - + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + From 09825ca25ad14739a27213e341a9f8b9fa59ae95 Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 19 Oct 2016 16:25:35 +0200 Subject: [PATCH 205/309] add integration test profile --- spring-data-cassandra/pom.xml | 51 +++++++++++++++++++++++++++++++++-- 1 file changed, 49 insertions(+), 2 deletions(-) diff --git a/spring-data-cassandra/pom.xml b/spring-data-cassandra/pom.xml index e5f8779942..5c1a42b8bd 100644 --- a/spring-data-cassandra/pom.xml +++ b/spring-data-cassandra/pom.xml @@ -23,6 +23,7 @@ 2.1.9.2 2.1.9.2 2.0-0 + 2.19.1 @@ -108,6 +109,52 @@ 1.7 - - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + From e4f1be2daa87bdbd1c212d7de905c87ac3004667 Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 19 Oct 2016 16:45:26 +0200 Subject: [PATCH 206/309] add integration test profile --- spring-cucumber/pom.xml | 52 +++++++++++++++++-- ...Test.java => CucumberIntegrationTest.java} | 2 +- ...efs.java => OtherDefsIntegrationTest.java} | 2 +- ...Defs.java => StepDefsIntegrationTest.java} | 2 +- 4 files changed, 52 insertions(+), 6 deletions(-) rename spring-cucumber/src/test/java/com/baeldung/{CucumberTest.java => CucumberIntegrationTest.java} (83%) rename spring-cucumber/src/test/java/com/baeldung/{OtherDefs.java => OtherDefsIntegrationTest.java} (85%) rename spring-cucumber/src/test/java/com/baeldung/{StepDefs.java => StepDefsIntegrationTest.java} (93%) diff --git a/spring-cucumber/pom.xml b/spring-cucumber/pom.xml index f3b9c983f0..b493962a75 100644 --- a/spring-cucumber/pom.xml +++ b/spring-cucumber/pom.xml @@ -73,17 +73,63 @@ - - - + + + org.springframework.boot spring-boot-maven-plugin + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-cucumber/src/test/java/com/baeldung/CucumberTest.java b/spring-cucumber/src/test/java/com/baeldung/CucumberIntegrationTest.java similarity index 83% rename from spring-cucumber/src/test/java/com/baeldung/CucumberTest.java rename to spring-cucumber/src/test/java/com/baeldung/CucumberIntegrationTest.java index c31a35b271..56eb810c09 100644 --- a/spring-cucumber/src/test/java/com/baeldung/CucumberTest.java +++ b/spring-cucumber/src/test/java/com/baeldung/CucumberIntegrationTest.java @@ -6,5 +6,5 @@ import org.junit.runner.RunWith; @RunWith(Cucumber.class) @CucumberOptions(features = "src/test/resources") -public class CucumberTest { +public class CucumberIntegrationTest { } \ No newline at end of file diff --git a/spring-cucumber/src/test/java/com/baeldung/OtherDefs.java b/spring-cucumber/src/test/java/com/baeldung/OtherDefsIntegrationTest.java similarity index 85% rename from spring-cucumber/src/test/java/com/baeldung/OtherDefs.java rename to spring-cucumber/src/test/java/com/baeldung/OtherDefsIntegrationTest.java index edbc14f319..17f298c3fb 100644 --- a/spring-cucumber/src/test/java/com/baeldung/OtherDefs.java +++ b/spring-cucumber/src/test/java/com/baeldung/OtherDefsIntegrationTest.java @@ -3,7 +3,7 @@ package com.baeldung; import cucumber.api.java.en.Given; import cucumber.api.java.en.When; -public class OtherDefs extends SpringIntegrationTest { +public class OtherDefsIntegrationTest extends SpringIntegrationTest { @When("^the client calls /baeldung$") public void the_client_issues_POST_hello() throws Throwable { executePost("http://localhost:8080/baeldung"); diff --git a/spring-cucumber/src/test/java/com/baeldung/StepDefs.java b/spring-cucumber/src/test/java/com/baeldung/StepDefsIntegrationTest.java similarity index 93% rename from spring-cucumber/src/test/java/com/baeldung/StepDefs.java rename to spring-cucumber/src/test/java/com/baeldung/StepDefsIntegrationTest.java index 865a1e13fa..8220d5e861 100644 --- a/spring-cucumber/src/test/java/com/baeldung/StepDefs.java +++ b/spring-cucumber/src/test/java/com/baeldung/StepDefsIntegrationTest.java @@ -9,7 +9,7 @@ import cucumber.api.java.en.And; import cucumber.api.java.en.Then; import cucumber.api.java.en.When; -public class StepDefs extends SpringIntegrationTest { +public class StepDefsIntegrationTest extends SpringIntegrationTest { @When("^the client calls /version$") public void the_client_issues_GET_version() throws Throwable { From 72bdf6c2be5671079e7959683a051523177c554e Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Wed, 19 Oct 2016 22:27:02 +0700 Subject: [PATCH 207/309] Changes HTTP request handling methods, adds negative test cases --- .../cxf/jaxrs/implementation/Baeldung.java | 17 +++--- .../cxf/jaxrs/implementation/Course.java | 34 ++++++++---- .../cxf/jaxrs/implementation/Student.java | 10 ++++ .../src/main/resources/changed_course.xml | 4 ++ .../src/main/resources/conflict_student.xml | 4 ++ .../{student.xml => created_student.xml} | 1 - .../{course.xml => non_existent_course.xml} | 0 .../src/main/resources/unchanged_course.xml | 4 ++ .../cxf/jaxrs/implementation/ServiceTest.java | 54 ++++++++++++++++--- 9 files changed, 101 insertions(+), 27 deletions(-) create mode 100644 apache-cxf/cxf-jaxrs-implementation/src/main/resources/changed_course.xml create mode 100644 apache-cxf/cxf-jaxrs-implementation/src/main/resources/conflict_student.xml rename apache-cxf/cxf-jaxrs-implementation/src/main/resources/{student.xml => created_student.xml} (82%) rename apache-cxf/cxf-jaxrs-implementation/src/main/resources/{course.xml => non_existent_course.xml} (100%) create mode 100644 apache-cxf/cxf-jaxrs-implementation/src/main/resources/unchanged_course.xml diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java index 592df4b7c3..39872f4e32 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java @@ -44,15 +44,16 @@ public class Baeldung { @PUT @Path("courses/{courseOrder}") - public Response putCourse(@PathParam("courseOrder") int courseOrder, Course course) { - Course existingCourse = courses.get(courseOrder); - - if (existingCourse == null || existingCourse.getId() != course.getId() || !(existingCourse.getName().equals(course.getName()))) { - courses.put(courseOrder, course); - return Response.ok().build(); + public Response updateCourse(@PathParam("courseOrder") int courseOrder, Course course) { + Course existingCourse = courses.get(courseOrder); + if (existingCourse == null) { + return Response.status(Response.Status.NOT_FOUND).build(); } - - return Response.notModified().build(); + if (existingCourse.equals(course)) { + return Response.notModified().build(); + } + courses.put(courseOrder, course); + return Response.ok().build(); } @Path("courses/{courseOrder}/students") diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java index 32689a332f..efb7191290 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java @@ -3,6 +3,7 @@ package com.baeldung.cxf.jaxrs.implementation; import javax.ws.rs.*; import javax.ws.rs.core.Response; import javax.xml.bind.annotation.XmlRootElement; + import java.util.ArrayList; import java.util.List; @@ -35,31 +36,42 @@ public class Course { public void setStudents(List students) { this.students = students; } - + @GET @Path("{studentOrder}") - public Student getStudent(@PathParam("studentOrder")int studentOrder) { + public Student getStudent(@PathParam("studentOrder") int studentOrder) { return students.get(studentOrder); } - + @POST - public Response postStudent(Student student) { + public Response createStudent(Student student) { if (students == null) { students = new ArrayList<>(); } + if (students.contains(student)) { + return Response.status(Response.Status.CONFLICT).build(); + } students.add(student); return Response.ok(student).build(); } - + @DELETE @Path("{studentOrder}") public Response deleteStudent(@PathParam("studentOrder") int studentOrder) { - Student student = students.get(studentOrder); - if (student != null) { - students.remove(studentOrder); - return Response.ok().build(); - } else { - return Response.notModified().build(); + if (students == null || studentOrder >= students.size()) { + return Response.status(Response.Status.NOT_FOUND).build(); } + students.remove(studentOrder); + return Response.ok().build(); + } + + @Override + public int hashCode() { + return id + name.hashCode(); + } + + @Override + public boolean equals(Object obj) { + return (obj instanceof Course) && (id == ((Course) obj).getId()) && (name.equals(((Course) obj).getName())); } } \ No newline at end of file diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java index de782e4edb..bd3dad0f5e 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Student.java @@ -22,4 +22,14 @@ public class Student { public void setName(String name) { this.name = name; } + + @Override + public int hashCode() { + return id + name.hashCode(); + } + + @Override + public boolean equals(Object obj) { + return (obj instanceof Student) && (id == ((Student) obj).getId()) && (name.equals(((Student) obj).getName())); + } } \ No newline at end of file diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/resources/changed_course.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/changed_course.xml new file mode 100644 index 0000000000..097cf2ce58 --- /dev/null +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/changed_course.xml @@ -0,0 +1,4 @@ + + 2 + Apache CXF Support for RESTful + \ No newline at end of file diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/resources/conflict_student.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/conflict_student.xml new file mode 100644 index 0000000000..ccf97edb2e --- /dev/null +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/conflict_student.xml @@ -0,0 +1,4 @@ + + 1 + Student A + \ No newline at end of file diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/resources/student.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/created_student.xml similarity index 82% rename from apache-cxf/cxf-jaxrs-implementation/src/main/resources/student.xml rename to apache-cxf/cxf-jaxrs-implementation/src/main/resources/created_student.xml index 7fb6189815..068c9dae4b 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/resources/student.xml +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/created_student.xml @@ -1,4 +1,3 @@ - 3 Student C diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/resources/course.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/non_existent_course.xml similarity index 100% rename from apache-cxf/cxf-jaxrs-implementation/src/main/resources/course.xml rename to apache-cxf/cxf-jaxrs-implementation/src/main/resources/non_existent_course.xml diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/resources/unchanged_course.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/unchanged_course.xml new file mode 100644 index 0000000000..5936fdc094 --- /dev/null +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/unchanged_course.xml @@ -0,0 +1,4 @@ + + 1 + REST with Spring + \ No newline at end of file diff --git a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java index 8c606436c8..8d06518df2 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java @@ -34,24 +34,57 @@ public class ServiceTest { } @Test - public void whenPutCourse_thenCorrect() throws IOException { + public void whenUpdateNonExistentCourse_thenReceiveNotFoundResponse() throws IOException { HttpPut httpPut = new HttpPut(BASE_URL + "3"); - InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("course.xml"); + InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("non_existent_course.xml"); + httpPut.setEntity(new InputStreamEntity(resourceStream)); + httpPut.setHeader("Content-Type", "text/xml"); + + HttpResponse response = client.execute(httpPut); + assertEquals(404, response.getStatusLine().getStatusCode()); + } + + @Test + public void whenUpdateUnchangedCourse_thenReceiveNotModifiedResponse() throws IOException { + HttpPut httpPut = new HttpPut(BASE_URL + "1"); + InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("unchanged_course.xml"); + httpPut.setEntity(new InputStreamEntity(resourceStream)); + httpPut.setHeader("Content-Type", "text/xml"); + + HttpResponse response = client.execute(httpPut); + assertEquals(304, response.getStatusLine().getStatusCode()); + } + + @Test + public void whenUpdateValidCourse_thenReceiveOKResponse() throws IOException { + HttpPut httpPut = new HttpPut(BASE_URL + "2"); + InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("changed_course.xml"); httpPut.setEntity(new InputStreamEntity(resourceStream)); httpPut.setHeader("Content-Type", "text/xml"); HttpResponse response = client.execute(httpPut); assertEquals(200, response.getStatusLine().getStatusCode()); - Course course = getCourse(3); - assertEquals(3, course.getId()); + Course course = getCourse(2); + assertEquals(2, course.getId()); assertEquals("Apache CXF Support for RESTful", course.getName()); } + + @Test + public void whenCreateConflictStudent_thenReceiveConflictResponse() throws IOException { + HttpPost httpPost = new HttpPost(BASE_URL + "1/students"); + InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("conflict_student.xml"); + httpPost.setEntity(new InputStreamEntity(resourceStream)); + httpPost.setHeader("Content-Type", "text/xml"); + + HttpResponse response = client.execute(httpPost); + assertEquals(409, response.getStatusLine().getStatusCode()); + } @Test - public void whenPostStudent_thenCorrect() throws IOException { + public void whenCreateValidStudent_thenReceiveOKResponse() throws IOException { HttpPost httpPost = new HttpPost(BASE_URL + "2/students"); - InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("student.xml"); + InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("created_student.xml"); httpPost.setEntity(new InputStreamEntity(resourceStream)); httpPost.setHeader("Content-Type", "text/xml"); @@ -64,7 +97,14 @@ public class ServiceTest { } @Test - public void whenDeleteStudent_thenCorrect() throws IOException { + public void whenDeleteInvalidStudent_thenReceiveNotFoundResponse() throws IOException { + HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/2"); + HttpResponse response = client.execute(httpDelete); + assertEquals(404, response.getStatusLine().getStatusCode()); + } + + @Test + public void whenDeleteValidStudent_thenReceiveOKResponse() throws IOException { HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/0"); HttpResponse response = client.execute(httpDelete); assertEquals(200, response.getStatusLine().getStatusCode()); From 15ab6c6326927cdb3fc0d3f81cf90335aa4f9f28 Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Thu, 20 Oct 2016 16:41:38 +0700 Subject: [PATCH 208/309] Changes order parameter to id --- .../cxf/jaxrs/implementation/Baeldung.java | 31 ++++++++++++------- .../cxf/jaxrs/implementation/Course.java | 29 ++++++++++------- .../src/main/resources/conflict_student.xml | 4 +-- .../cxf/jaxrs/implementation/ServiceTest.java | 6 ++-- 4 files changed, 43 insertions(+), 27 deletions(-) diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java index 39872f4e32..9dd63cf3ac 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java @@ -37,27 +37,36 @@ public class Baeldung { } @GET - @Path("courses/{courseOrder}") - public Course getCourse(@PathParam("courseOrder") int courseOrder) { - return courses.get(courseOrder); + @Path("courses/{courseId}") + public Course getCourse(@PathParam("courseId") int courseId) { + return findById(courseId); } @PUT - @Path("courses/{courseOrder}") - public Response updateCourse(@PathParam("courseOrder") int courseOrder, Course course) { - Course existingCourse = courses.get(courseOrder); + @Path("courses/{courseId}") + public Response updateCourse(@PathParam("courseId") int courseId, Course course) { + Course existingCourse = findById(courseId); if (existingCourse == null) { return Response.status(Response.Status.NOT_FOUND).build(); } if (existingCourse.equals(course)) { - return Response.notModified().build(); + return Response.notModified().build(); } - courses.put(courseOrder, course); + courses.put(courseId, course); return Response.ok().build(); } - @Path("courses/{courseOrder}/students") - public Course pathToStudent(@PathParam("courseOrder") int courseOrder) { - return courses.get(courseOrder); + @Path("courses/{courseId}/students") + public Course pathToStudent(@PathParam("courseId") int courseId) { + return findById(courseId); + } + + private Course findById(int id) { + for (Map.Entry course : courses.entrySet()) { + if (course.getKey() == id) { + return course.getValue(); + } + } + return null; } } \ No newline at end of file diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java index efb7191290..dfbe8eef1d 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java @@ -11,7 +11,7 @@ import java.util.List; public class Course { private int id; private String name; - private List students; + private List students = new ArrayList<>(); public int getId() { return id; @@ -38,16 +38,13 @@ public class Course { } @GET - @Path("{studentOrder}") - public Student getStudent(@PathParam("studentOrder") int studentOrder) { - return students.get(studentOrder); + @Path("{studentId}") + public Student getStudent(@PathParam("studentId") int studentId) { + return findById(studentId); } @POST public Response createStudent(Student student) { - if (students == null) { - students = new ArrayList<>(); - } if (students.contains(student)) { return Response.status(Response.Status.CONFLICT).build(); } @@ -56,14 +53,24 @@ public class Course { } @DELETE - @Path("{studentOrder}") - public Response deleteStudent(@PathParam("studentOrder") int studentOrder) { - if (students == null || studentOrder >= students.size()) { + @Path("{studentId}") + public Response deleteStudent(@PathParam("studentId") int studentId) { + Student student = findById(studentId); + if (student == null) { return Response.status(Response.Status.NOT_FOUND).build(); } - students.remove(studentOrder); + students.remove(student); return Response.ok().build(); } + + private Student findById(int id) { + for (Student student : students) { + if (student.getId() == id) { + return student; + } + } + return null; + } @Override public int hashCode() { diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/resources/conflict_student.xml b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/conflict_student.xml index ccf97edb2e..7d083dbdc9 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/resources/conflict_student.xml +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/resources/conflict_student.xml @@ -1,4 +1,4 @@ - 1 - Student A + 2 + Student B \ No newline at end of file diff --git a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java index 8d06518df2..b8fc833194 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java @@ -91,21 +91,21 @@ public class ServiceTest { HttpResponse response = client.execute(httpPost); assertEquals(200, response.getStatusLine().getStatusCode()); - Student student = getStudent(2, 0); + Student student = getStudent(2, 3); assertEquals(3, student.getId()); assertEquals("Student C", student.getName()); } @Test public void whenDeleteInvalidStudent_thenReceiveNotFoundResponse() throws IOException { - HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/2"); + HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/3"); HttpResponse response = client.execute(httpDelete); assertEquals(404, response.getStatusLine().getStatusCode()); } @Test public void whenDeleteValidStudent_thenReceiveOKResponse() throws IOException { - HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/0"); + HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/1"); HttpResponse response = client.execute(httpDelete); assertEquals(200, response.getStatusLine().getStatusCode()); From 4d54080b3ec57559b0c1d842fcb885a23340f3c5 Mon Sep 17 00:00:00 2001 From: Nikhil Khatwani Date: Thu, 20 Oct 2016 16:00:31 +0530 Subject: [PATCH 209/309] Fixed Failing EchoTest --- .../java/nio/selector/EchoServer.java | 26 ++++++++++++++----- .../baeldung/java/nio/selector/EchoTest.java | 7 +++-- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java index aedcbb319b..285d4e51fc 100644 --- a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java +++ b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java @@ -1,14 +1,15 @@ package com.baeldung.java.nio.selector; +import java.io.File; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; -import java.nio.channels.Selector; -import java.nio.channels.SelectionKey; -import java.nio.ByteBuffer; -import java.io.IOException; -import java.util.Set; import java.util.Iterator; -import java.net.InetSocketAddress; +import java.util.Set; public class EchoServer { @@ -47,4 +48,15 @@ public class EchoServer { } } } -} + + public static Process start() throws IOException, InterruptedException { + String javaHome = System.getProperty("java.home"); + String javaBin = javaHome + File.separator + "bin" + File.separator + "java"; + String classpath = System.getProperty("java.class.path"); + String className = EchoServer.class.getCanonicalName(); + + ProcessBuilder builder = new ProcessBuilder(javaBin, "-cp", classpath, className); + + return builder.start(); + } +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java b/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java index 63da2fe2bf..d1ac6df5e4 100644 --- a/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java +++ b/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java @@ -2,17 +2,20 @@ package com.baeldung.java.nio.selector; import static org.junit.Assert.assertEquals; +import java.io.IOException; + import org.junit.Test; public class EchoTest { @Test - public void givenClient_whenServerEchosMessage_thenCorrect() { + public void givenClient_whenServerEchosMessage_thenCorrect() throws IOException, InterruptedException { + Process process = EchoServer.start(); EchoClient client = EchoClient.start(); String resp1 = client.sendMessage("hello"); String resp2 = client.sendMessage("world"); assertEquals("hello", resp1); assertEquals("world", resp2); + process.destroy(); } - } From b6e9223fed08d43d78241020b39f8b01d9507aa9 Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Thu, 20 Oct 2016 17:47:34 +0700 Subject: [PATCH 210/309] Refactors Apache CXF support for REST --- .../com/baeldung/cxf/jaxrs/implementation/Course.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java index dfbe8eef1d..dba9b9c661 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Course.java @@ -45,8 +45,10 @@ public class Course { @POST public Response createStudent(Student student) { - if (students.contains(student)) { - return Response.status(Response.Status.CONFLICT).build(); + for (Student element : students) { + if (element.getId() == student.getId()) { + return Response.status(Response.Status.CONFLICT).build(); + } } students.add(student); return Response.ok(student).build(); @@ -62,7 +64,7 @@ public class Course { students.remove(student); return Response.ok().build(); } - + private Student findById(int id) { for (Student student : students) { if (student.getId() == id) { From 017dc13db1ebf30907a7cb05b42b619a765803fd Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 20 Oct 2016 13:44:16 +0200 Subject: [PATCH 211/309] add integration test profile --- spring-boot/pom.xml | 46 +++++++++++++++++++ ...ebjarsdemoApplicationIntegrationTest.java} | 2 +- ...Test.java => CommitIdIntegrationTest.java} | 4 +- ...SpringBootApplicationIntegrationTest.java} | 2 +- ...java => SpringBootJPAIntegrationTest.java} | 2 +- ...ava => SpringBootMailIntegrationTest.java} | 2 +- ...s.java => ApplicationIntegrationTest.java} | 2 +- ...va => DemoApplicationIntegrationTest.java} | 2 +- ...java => FooRepositoryIntegrationTest.java} | 4 +- ...a => HibernateSessionIntegrationTest.java} | 4 +- ...=> NoHibernateSessionIntegrationTest.java} | 4 +- ... DetailsServiceClientIntegrationTest.java} | 2 +- .../data-flow-shell/spring-shell.log | 1 + 13 files changed, 62 insertions(+), 15 deletions(-) rename spring-boot/src/test/java/com/baeldung/{WebjarsdemoApplicationTests.java => WebjarsdemoApplicationIntegrationTest.java} (89%) rename spring-boot/src/test/java/com/baeldung/git/{CommitIdTest.java => CommitIdIntegrationTest.java} (93%) rename spring-boot/src/test/java/org/baeldung/{SpringBootApplicationTest.java => SpringBootApplicationIntegrationTest.java} (97%) rename spring-boot/src/test/java/org/baeldung/{SpringBootJPATest.java => SpringBootJPAIntegrationTest.java} (95%) rename spring-boot/src/test/java/org/baeldung/{SpringBootMailTest.java => SpringBootMailIntegrationTest.java} (98%) rename spring-boot/src/test/java/org/baeldung/boot/{ApplicationTests.java => ApplicationIntegrationTest.java} (92%) rename spring-boot/src/test/java/org/baeldung/boot/{DemoApplicationTests.java => DemoApplicationIntegrationTest.java} (90%) rename spring-boot/src/test/java/org/baeldung/boot/repository/{FooRepositoryTest.java => FooRepositoryIntegrationTest.java} (84%) rename spring-boot/src/test/java/org/baeldung/boot/repository/{HibernateSessionTest.java => HibernateSessionIntegrationTest.java} (88%) rename spring-boot/src/test/java/org/baeldung/boot/repository/{NoHibernateSessionTest.java => NoHibernateSessionIntegrationTest.java} (81%) rename spring-boot/src/test/java/org/baeldung/client/{DetailsServiceClientTest.java => DetailsServiceClientIntegrationTest.java} (96%) create mode 100644 spring-cloud-data-flow/data-flow-shell/spring-shell.log diff --git a/spring-boot/pom.xml b/spring-boot/pom.xml index 5281b9b2c0..a2555259b0 100644 --- a/spring-boot/pom.xml +++ b/spring-boot/pom.xml @@ -133,10 +133,56 @@ 2.2.1 + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + spring-snapshots diff --git a/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java b/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationIntegrationTest.java similarity index 89% rename from spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java rename to spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationIntegrationTest.java index c43b13ea0b..3558682b97 100644 --- a/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java +++ b/spring-boot/src/test/java/com/baeldung/WebjarsdemoApplicationIntegrationTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = WebjarsdemoApplication.class) @WebAppConfiguration -public class WebjarsdemoApplicationTests { +public class WebjarsdemoApplicationIntegrationTest { @Test public void contextLoads() { diff --git a/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java b/spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java similarity index 93% rename from spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java rename to spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java index c0fc1befd3..348d594c05 100644 --- a/spring-boot/src/test/java/com/baeldung/git/CommitIdTest.java +++ b/spring-boot/src/test/java/com/baeldung/git/CommitIdIntegrationTest.java @@ -12,9 +12,9 @@ import static org.assertj.core.api.Assertions.assertThat; @RunWith(SpringRunner.class) @ContextConfiguration(classes = CommitIdApplication.class) -public class CommitIdTest { +public class CommitIdIntegrationTest { - private static final Logger LOG = LoggerFactory.getLogger(CommitIdTest.class); + private static final Logger LOG = LoggerFactory.getLogger(CommitIdIntegrationTest.class); @Value("${git.commit.message.short:UNKNOWN}") private String commitMessage; diff --git a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java similarity index 97% rename from spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java rename to spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java index 1255180e44..3c5444942c 100644 --- a/spring-boot/src/test/java/org/baeldung/SpringBootApplicationTest.java +++ b/spring-boot/src/test/java/org/baeldung/SpringBootApplicationIntegrationTest.java @@ -26,7 +26,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration -public class SpringBootApplicationTest { +public class SpringBootApplicationIntegrationTest { @Autowired private WebApplicationContext webApplicationContext; private MockMvc mockMvc; diff --git a/spring-boot/src/test/java/org/baeldung/SpringBootJPATest.java b/spring-boot/src/test/java/org/baeldung/SpringBootJPAIntegrationTest.java similarity index 95% rename from spring-boot/src/test/java/org/baeldung/SpringBootJPATest.java rename to spring-boot/src/test/java/org/baeldung/SpringBootJPAIntegrationTest.java index 8a6b5139fe..233684bc24 100644 --- a/spring-boot/src/test/java/org/baeldung/SpringBootJPATest.java +++ b/spring-boot/src/test/java/org/baeldung/SpringBootJPAIntegrationTest.java @@ -13,7 +13,7 @@ import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) -public class SpringBootJPATest { +public class SpringBootJPAIntegrationTest { @Autowired private GenericEntityRepository genericEntityRepository; diff --git a/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java b/spring-boot/src/test/java/org/baeldung/SpringBootMailIntegrationTest.java similarity index 98% rename from spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java rename to spring-boot/src/test/java/org/baeldung/SpringBootMailIntegrationTest.java index f4ce158661..cec25f20f9 100644 --- a/spring-boot/src/test/java/org/baeldung/SpringBootMailTest.java +++ b/spring-boot/src/test/java/org/baeldung/SpringBootMailIntegrationTest.java @@ -24,7 +24,7 @@ import static org.junit.Assert.assertThat; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) -public class SpringBootMailTest { +public class SpringBootMailIntegrationTest { @Autowired private JavaMailSender javaMailSender; diff --git a/spring-boot/src/test/java/org/baeldung/boot/ApplicationTests.java b/spring-boot/src/test/java/org/baeldung/boot/ApplicationIntegrationTest.java similarity index 92% rename from spring-boot/src/test/java/org/baeldung/boot/ApplicationTests.java rename to spring-boot/src/test/java/org/baeldung/boot/ApplicationIntegrationTest.java index 7911465048..57a8abc1ee 100644 --- a/spring-boot/src/test/java/org/baeldung/boot/ApplicationTests.java +++ b/spring-boot/src/test/java/org/baeldung/boot/ApplicationIntegrationTest.java @@ -10,7 +10,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = Application.class) @TestPropertySource("classpath:exception.properties") -public class ApplicationTests { +public class ApplicationIntegrationTest { @Test public void contextLoads() { } diff --git a/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationTests.java b/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationIntegrationTest.java similarity index 90% rename from spring-boot/src/test/java/org/baeldung/boot/DemoApplicationTests.java rename to spring-boot/src/test/java/org/baeldung/boot/DemoApplicationIntegrationTest.java index 7f9b2ba912..4fcea35b4a 100644 --- a/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationTests.java +++ b/spring-boot/src/test/java/org/baeldung/boot/DemoApplicationIntegrationTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = DemoApplication.class) @WebAppConfiguration -public class DemoApplicationTests { +public class DemoApplicationIntegrationTest { @Test public void contextLoads() { diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryTest.java b/spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryIntegrationTest.java similarity index 84% rename from spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryTest.java rename to spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryIntegrationTest.java index 9de7790a75..a844b26b2d 100644 --- a/spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryTest.java +++ b/spring-boot/src/test/java/org/baeldung/boot/repository/FooRepositoryIntegrationTest.java @@ -2,7 +2,7 @@ package org.baeldung.boot.repository; import static org.junit.Assert.assertThat; -import org.baeldung.boot.DemoApplicationTests; +import org.baeldung.boot.DemoApplicationIntegrationTest; import org.baeldung.boot.model.Foo; import static org.hamcrest.Matchers.notNullValue; @@ -14,7 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @Transactional -public class FooRepositoryTest extends DemoApplicationTests { +public class FooRepositoryIntegrationTest extends DemoApplicationIntegrationTest { @Autowired private FooRepository fooRepository; diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionTest.java b/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionIntegrationTest.java similarity index 88% rename from spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionTest.java rename to spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionIntegrationTest.java index 4cb1b60cde..be992bcc36 100644 --- a/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionTest.java +++ b/spring-boot/src/test/java/org/baeldung/boot/repository/HibernateSessionIntegrationTest.java @@ -4,7 +4,7 @@ import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.junit.Assert.assertThat; -import org.baeldung.boot.ApplicationTests; +import org.baeldung.boot.ApplicationIntegrationTest; import org.baeldung.boot.model.Foo; import org.baeldung.session.exception.repository.FooRepository; import org.junit.Test; @@ -14,7 +14,7 @@ import org.springframework.transaction.annotation.Transactional; @Transactional @TestPropertySource("classpath:exception-hibernate.properties") -public class HibernateSessionTest extends ApplicationTests { +public class HibernateSessionIntegrationTest extends ApplicationIntegrationTest { @Autowired private FooRepository fooRepository; diff --git a/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionTest.java b/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionIntegrationTest.java similarity index 81% rename from spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionTest.java rename to spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionIntegrationTest.java index 5f5a49841a..55b7fa7216 100644 --- a/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionTest.java +++ b/spring-boot/src/test/java/org/baeldung/boot/repository/NoHibernateSessionIntegrationTest.java @@ -1,6 +1,6 @@ package org.baeldung.boot.repository; -import org.baeldung.boot.ApplicationTests; +import org.baeldung.boot.ApplicationIntegrationTest; import org.baeldung.boot.model.Foo; import org.baeldung.session.exception.repository.FooRepository; import org.hibernate.HibernateException; @@ -9,7 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; @Transactional -public class NoHibernateSessionTest extends ApplicationTests { +public class NoHibernateSessionIntegrationTest extends ApplicationIntegrationTest { @Autowired private FooRepository fooRepository; diff --git a/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java b/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientIntegrationTest.java similarity index 96% rename from spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java rename to spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientIntegrationTest.java index ba0da968ad..5627855aa3 100644 --- a/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientTest.java +++ b/spring-boot/src/test/java/org/baeldung/client/DetailsServiceClientIntegrationTest.java @@ -16,7 +16,7 @@ import static org.springframework.test.web.client.response.MockRestResponseCreat @RunWith(SpringRunner.class) @RestClientTest(DetailsServiceClient.class) -public class DetailsServiceClientTest { +public class DetailsServiceClientIntegrationTest { @Autowired private DetailsServiceClient client; diff --git a/spring-cloud-data-flow/data-flow-shell/spring-shell.log b/spring-cloud-data-flow/data-flow-shell/spring-shell.log new file mode 100644 index 0000000000..d497215e2a --- /dev/null +++ b/spring-cloud-data-flow/data-flow-shell/spring-shell.log @@ -0,0 +1 @@ +// dataflow 1.2.0.RELEASE log opened at 2016-10-20 13:13:20 From a4f8b50c4f6a1e95a88e991459fa3f07419f28a8 Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 20 Oct 2016 13:49:04 +0200 Subject: [PATCH 212/309] add integration test profile --- spring-autowire/pom.xml | 41 +++++++++++++++++++ ...st.java => FooServiceIntegrationTest.java} | 2 +- 2 files changed, 42 insertions(+), 1 deletion(-) rename spring-autowire/src/test/java/com/baeldung/autowire/sample/{FooServiceTest.java => FooServiceIntegrationTest.java} (94%) diff --git a/spring-autowire/pom.xml b/spring-autowire/pom.xml index e28efdae61..fd03c77605 100644 --- a/spring-autowire/pom.xml +++ b/spring-autowire/pom.xml @@ -57,7 +57,48 @@ org.apache.maven.plugins maven-surefire-plugin ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceTest.java b/spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceIntegrationTest.java similarity index 94% rename from spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceTest.java rename to spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceIntegrationTest.java index 50e89fcc55..34ba7902ca 100644 --- a/spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceTest.java +++ b/spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceIntegrationTest.java @@ -10,7 +10,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = AppConfig.class, loader = AnnotationConfigContextLoader.class) -public class FooServiceTest { +public class FooServiceIntegrationTest { @Autowired FooService fooService; From 5a0c407987dfd93eb6672170c7665b3f850bb005 Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 20 Oct 2016 14:14:55 +0200 Subject: [PATCH 213/309] add integration test profile --- spring-all/pom.xml | 58 ++++++++++++------- ...syncAnnotationExampleIntegrationTest.java} | 2 +- ....java => AsyncWithXMLIntegrationTest.java} | 2 +- ... ControllerAnnotationIntegrationTest.java} | 2 +- ...st.java => ControllerIntegrationTest.java} | 2 +- ... DataAccessAnnotationIntegrationTest.java} | 2 +- ...taAccessFieldCallbackIntegrationTest.java} | 2 +- ...t.java => EmployeeDAOIntegrationTest.java} | 2 +- ...ProfileWithAnnotationIntegrationTest.java} | 2 +- ...ProfileWithAnnotationIntegrationTest.java} | 2 +- ...PlaceHolderPropertiesIntegrationTest.java} | 2 +- ...pertySourcePropertiesIntegrationTest.java} | 2 +- ...uledAnnotationExampleIntegrationTest.java} | 2 +- ...hedulingWithXmlConfigIntegrationTest.java} | 2 +- ...> AttributeAnnotationIntegrationTest.java} | 2 +- ...a => CacheRefinementsIntegrationTest.java} | 2 +- ...va => ComposedMappingIntegrationTest.java} | 2 +- ...nConstructorInjectionIntegrationTest.java} | 2 +- ...> ImplicitConstructorIntegrationTest.java} | 2 +- ...faultMethodsInjectionIntegrationTest.java} | 2 +- ...java => TransactionalIntegrationTest.java} | 2 +- ...ava => ObjectProviderIntegrationTest.java} | 2 +- ...a => ScopeAnnotationsIntegrationTest.java} | 2 +- ...ousCustomSpringEventsIntegrationTest.java} | 2 +- ...textRefreshedListenerIntegrationTest.java} | 2 +- ...ousCustomSpringEventsIntegrationTest.java} | 2 +- ...java => SpringStartupIntegrationTest.java} | 2 +- ...pringStartupXMLConfigIntegrationTest.java} | 2 +- 28 files changed, 63 insertions(+), 49 deletions(-) rename spring-all/src/test/java/org/baeldung/async/{AsyncAnnotationExampleTest.java => AsyncAnnotationExampleIntegrationTest.java} (97%) rename spring-all/src/test/java/org/baeldung/async/{AsyncWithXMLTest.java => AsyncWithXMLIntegrationTest.java} (95%) rename spring-all/src/test/java/org/baeldung/controller/{ControllerAnnotationTest.java => ControllerAnnotationIntegrationTest.java} (95%) rename spring-all/src/test/java/org/baeldung/controller/{ControllerTest.java => ControllerIntegrationTest.java} (98%) rename spring-all/src/test/java/org/baeldung/customannotation/{DataAccessAnnotationTest.java => DataAccessAnnotationIntegrationTest.java} (97%) rename spring-all/src/test/java/org/baeldung/customannotation/{DataAccessFieldCallbackTest.java => DataAccessFieldCallbackIntegrationTest.java} (97%) rename spring-all/src/test/java/org/baeldung/jdbc/{EmployeeDAOTest.java => EmployeeDAOIntegrationTest.java} (99%) rename spring-all/src/test/java/org/baeldung/profiles/{DevProfileWithAnnotationTest.java => DevProfileWithAnnotationIntegrationTest.java} (93%) rename spring-all/src/test/java/org/baeldung/profiles/{ProductionProfileWithAnnotationTest.java => ProductionProfileWithAnnotationIntegrationTest.java} (94%) rename spring-all/src/test/java/org/baeldung/properties/parentchild/{ParentChildPropertyPlaceHolderPropertiesTest.java => ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java} (96%) rename spring-all/src/test/java/org/baeldung/properties/parentchild/{ParentChildPropertySourcePropertiesTest.java => ParentChildPropertySourcePropertiesIntegrationTest.java} (96%) rename spring-all/src/test/java/org/baeldung/scheduling/{ScheduledAnnotationExampleTest.java => ScheduledAnnotationExampleIntegrationTest.java} (90%) rename spring-all/src/test/java/org/baeldung/scheduling/{SchedulingWithXmlConfigTest.java => SchedulingWithXmlConfigIntegrationTest.java} (89%) rename spring-all/src/test/java/org/baeldung/spring43/attributeannotations/{AttributeAnnotationTest.java => AttributeAnnotationIntegrationTest.java} (94%) rename spring-all/src/test/java/org/baeldung/spring43/cache/{CacheRefinementsTest.java => CacheRefinementsIntegrationTest.java} (92%) rename spring-all/src/test/java/org/baeldung/spring43/composedmapping/{ComposedMappingTest.java => ComposedMappingIntegrationTest.java} (94%) rename spring-all/src/test/java/org/baeldung/spring43/ctor/{ConfigurationConstructorInjectionTest.java => ConfigurationConstructorInjectionIntegrationTest.java} (85%) rename spring-all/src/test/java/org/baeldung/spring43/ctor/{ImplicitConstructorTest.java => ImplicitConstructorIntegrationTest.java} (86%) rename spring-all/src/test/java/org/baeldung/spring43/defaultmethods/{DefaultMethodsInjectionTest.java => DefaultMethodsInjectionIntegrationTest.java} (87%) rename spring-all/src/test/java/org/baeldung/spring43/defaultmethods/{TransactionalTest.java => TransactionalIntegrationTest.java} (76%) rename spring-all/src/test/java/org/baeldung/spring43/depresolution/{ObjectProviderTest.java => ObjectProviderIntegrationTest.java} (87%) rename spring-all/src/test/java/org/baeldung/spring43/scopeannotations/{ScopeAnnotationsTest.java => ScopeAnnotationsIntegrationTest.java} (97%) rename spring-all/src/test/java/org/baeldung/springevents/asynchronous/{AsynchronousCustomSpringEventsTest.java => AsynchronousCustomSpringEventsIntegrationTest.java} (93%) rename spring-all/src/test/java/org/baeldung/springevents/synchronous/{ContextRefreshedListenerTest.java => ContextRefreshedListenerIntegrationTest.java} (92%) rename spring-all/src/test/java/org/baeldung/springevents/synchronous/{SynchronousCustomSpringEventsTest.java => SynchronousCustomSpringEventsIntegrationTest.java} (93%) rename spring-all/src/test/java/org/baeldung/startup/{SpringStartupTest.java => SpringStartupIntegrationTest.java} (97%) rename spring-all/src/test/java/org/baeldung/startup/{SpringStartupXMLConfigTest.java => SpringStartupXMLConfigIntegrationTest.java} (93%) diff --git a/spring-all/pom.xml b/spring-all/pom.xml index 003cdacc2c..23f2531b51 100644 --- a/spring-all/pom.xml +++ b/spring-all/pom.xml @@ -224,7 +224,7 @@ maven-surefire-plugin - + **/*IntegrationTest.java @@ -232,31 +232,45 @@ - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - true - - jetty8x - embedded - - - - - - - 8082 - - - - - + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + 4.3.1.RELEASE diff --git a/spring-all/src/test/java/org/baeldung/async/AsyncAnnotationExampleTest.java b/spring-all/src/test/java/org/baeldung/async/AsyncAnnotationExampleIntegrationTest.java similarity index 97% rename from spring-all/src/test/java/org/baeldung/async/AsyncAnnotationExampleTest.java rename to spring-all/src/test/java/org/baeldung/async/AsyncAnnotationExampleIntegrationTest.java index 2f41766cb6..0c010cf732 100644 --- a/spring-all/src/test/java/org/baeldung/async/AsyncAnnotationExampleTest.java +++ b/spring-all/src/test/java/org/baeldung/async/AsyncAnnotationExampleIntegrationTest.java @@ -13,7 +13,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { SpringAsyncConfig.class }, loader = AnnotationConfigContextLoader.class) -public class AsyncAnnotationExampleTest { +public class AsyncAnnotationExampleIntegrationTest { @Autowired private AsyncComponent asyncAnnotationExample; diff --git a/spring-all/src/test/java/org/baeldung/async/AsyncWithXMLTest.java b/spring-all/src/test/java/org/baeldung/async/AsyncWithXMLIntegrationTest.java similarity index 95% rename from spring-all/src/test/java/org/baeldung/async/AsyncWithXMLTest.java rename to spring-all/src/test/java/org/baeldung/async/AsyncWithXMLIntegrationTest.java index b91666261c..ffaa653a9a 100644 --- a/spring-all/src/test/java/org/baeldung/async/AsyncWithXMLTest.java +++ b/spring-all/src/test/java/org/baeldung/async/AsyncWithXMLIntegrationTest.java @@ -8,7 +8,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:springAsync-config.xml") -public class AsyncWithXMLTest { +public class AsyncWithXMLIntegrationTest { @Autowired private AsyncComponent asyncAnnotationExample; diff --git a/spring-all/src/test/java/org/baeldung/controller/ControllerAnnotationTest.java b/spring-all/src/test/java/org/baeldung/controller/ControllerAnnotationIntegrationTest.java similarity index 95% rename from spring-all/src/test/java/org/baeldung/controller/ControllerAnnotationTest.java rename to spring-all/src/test/java/org/baeldung/controller/ControllerAnnotationIntegrationTest.java index 84bc3a8033..82c8704360 100644 --- a/spring-all/src/test/java/org/baeldung/controller/ControllerAnnotationTest.java +++ b/spring-all/src/test/java/org/baeldung/controller/ControllerAnnotationIntegrationTest.java @@ -21,7 +21,7 @@ import org.springframework.web.servlet.ModelAndView; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration(classes = { WebConfig.class }, loader = AnnotationConfigWebContextLoader.class) -public class ControllerAnnotationTest { +public class ControllerAnnotationIntegrationTest { private MockMvc mockMvc; diff --git a/spring-all/src/test/java/org/baeldung/controller/ControllerTest.java b/spring-all/src/test/java/org/baeldung/controller/ControllerIntegrationTest.java similarity index 98% rename from spring-all/src/test/java/org/baeldung/controller/ControllerTest.java rename to spring-all/src/test/java/org/baeldung/controller/ControllerIntegrationTest.java index 47915b8ce9..8e8a021530 100644 --- a/spring-all/src/test/java/org/baeldung/controller/ControllerTest.java +++ b/spring-all/src/test/java/org/baeldung/controller/ControllerIntegrationTest.java @@ -20,7 +20,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextConfiguration({ "classpath:test-mvc.xml" }) -public class ControllerTest { +public class ControllerIntegrationTest { private MockMvc mockMvc; diff --git a/spring-all/src/test/java/org/baeldung/customannotation/DataAccessAnnotationTest.java b/spring-all/src/test/java/org/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java similarity index 97% rename from spring-all/src/test/java/org/baeldung/customannotation/DataAccessAnnotationTest.java rename to spring-all/src/test/java/org/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java index ec0d46876e..ae3d53fb9b 100644 --- a/spring-all/src/test/java/org/baeldung/customannotation/DataAccessAnnotationTest.java +++ b/spring-all/src/test/java/org/baeldung/customannotation/DataAccessAnnotationIntegrationTest.java @@ -14,7 +14,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) -public class DataAccessAnnotationTest { +public class DataAccessAnnotationIntegrationTest { @DataAccess(entity = Person.class) private GenericDAO personGenericDAO; diff --git a/spring-all/src/test/java/org/baeldung/customannotation/DataAccessFieldCallbackTest.java b/spring-all/src/test/java/org/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java similarity index 97% rename from spring-all/src/test/java/org/baeldung/customannotation/DataAccessFieldCallbackTest.java rename to spring-all/src/test/java/org/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java index e47d03c961..bab2574cd2 100644 --- a/spring-all/src/test/java/org/baeldung/customannotation/DataAccessFieldCallbackTest.java +++ b/spring-all/src/test/java/org/baeldung/customannotation/DataAccessFieldCallbackIntegrationTest.java @@ -17,7 +17,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { CustomAnnotationConfiguration.class }) -public class DataAccessFieldCallbackTest { +public class DataAccessFieldCallbackIntegrationTest { @Autowired private ConfigurableListableBeanFactory configurableListableBeanFactory; diff --git a/spring-all/src/test/java/org/baeldung/jdbc/EmployeeDAOTest.java b/spring-all/src/test/java/org/baeldung/jdbc/EmployeeDAOIntegrationTest.java similarity index 99% rename from spring-all/src/test/java/org/baeldung/jdbc/EmployeeDAOTest.java rename to spring-all/src/test/java/org/baeldung/jdbc/EmployeeDAOIntegrationTest.java index d544409254..4a92aa838f 100644 --- a/spring-all/src/test/java/org/baeldung/jdbc/EmployeeDAOTest.java +++ b/spring-all/src/test/java/org/baeldung/jdbc/EmployeeDAOIntegrationTest.java @@ -15,7 +15,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { SpringJdbcConfig.class }, loader = AnnotationConfigContextLoader.class) -public class EmployeeDAOTest { +public class EmployeeDAOIntegrationTest { @Autowired private EmployeeDAO employeeDao; diff --git a/spring-all/src/test/java/org/baeldung/profiles/DevProfileWithAnnotationTest.java b/spring-all/src/test/java/org/baeldung/profiles/DevProfileWithAnnotationIntegrationTest.java similarity index 93% rename from spring-all/src/test/java/org/baeldung/profiles/DevProfileWithAnnotationTest.java rename to spring-all/src/test/java/org/baeldung/profiles/DevProfileWithAnnotationIntegrationTest.java index 2b65928da8..cf5ca132e6 100644 --- a/spring-all/src/test/java/org/baeldung/profiles/DevProfileWithAnnotationTest.java +++ b/spring-all/src/test/java/org/baeldung/profiles/DevProfileWithAnnotationIntegrationTest.java @@ -12,7 +12,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles("dev") @ContextConfiguration(classes = { SpringProfilesConfig.class }, loader = AnnotationConfigContextLoader.class) -public class DevProfileWithAnnotationTest { +public class DevProfileWithAnnotationIntegrationTest { @Autowired DatasourceConfig datasourceConfig; diff --git a/spring-all/src/test/java/org/baeldung/profiles/ProductionProfileWithAnnotationTest.java b/spring-all/src/test/java/org/baeldung/profiles/ProductionProfileWithAnnotationIntegrationTest.java similarity index 94% rename from spring-all/src/test/java/org/baeldung/profiles/ProductionProfileWithAnnotationTest.java rename to spring-all/src/test/java/org/baeldung/profiles/ProductionProfileWithAnnotationIntegrationTest.java index 551636bd31..5bacaef07b 100644 --- a/spring-all/src/test/java/org/baeldung/profiles/ProductionProfileWithAnnotationTest.java +++ b/spring-all/src/test/java/org/baeldung/profiles/ProductionProfileWithAnnotationIntegrationTest.java @@ -13,7 +13,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles("production") @ContextConfiguration(classes = { SpringProfilesConfig.class }, loader = AnnotationConfigContextLoader.class) -public class ProductionProfileWithAnnotationTest { +public class ProductionProfileWithAnnotationIntegrationTest { @Autowired DatasourceConfig datasourceConfig; diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesTest.java b/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java similarity index 96% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesTest.java rename to spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java index 92af3f52f0..e0eccc978a 100644 --- a/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesTest.java +++ b/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertyPlaceHolderPropertiesIntegrationTest.java @@ -18,7 +18,7 @@ import org.springframework.web.context.WebApplicationContext; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextHierarchy({ @ContextConfiguration(classes = ParentConfig2.class), @ContextConfiguration(classes = ChildConfig2.class) }) -public class ParentChildPropertyPlaceHolderPropertiesTest { +public class ParentChildPropertyPlaceHolderPropertiesIntegrationTest { @Autowired private WebApplicationContext wac; diff --git a/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesTest.java b/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java similarity index 96% rename from spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesTest.java rename to spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java index 3ffd490c87..e9990523a7 100644 --- a/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesTest.java +++ b/spring-all/src/test/java/org/baeldung/properties/parentchild/ParentChildPropertySourcePropertiesIntegrationTest.java @@ -18,7 +18,7 @@ import org.springframework.web.context.WebApplicationContext; @RunWith(SpringJUnit4ClassRunner.class) @WebAppConfiguration @ContextHierarchy({ @ContextConfiguration(classes = ParentConfig.class), @ContextConfiguration(classes = ChildConfig.class) }) -public class ParentChildPropertySourcePropertiesTest { +public class ParentChildPropertySourcePropertiesIntegrationTest { @Autowired private WebApplicationContext wac; diff --git a/spring-all/src/test/java/org/baeldung/scheduling/ScheduledAnnotationExampleTest.java b/spring-all/src/test/java/org/baeldung/scheduling/ScheduledAnnotationExampleIntegrationTest.java similarity index 90% rename from spring-all/src/test/java/org/baeldung/scheduling/ScheduledAnnotationExampleTest.java rename to spring-all/src/test/java/org/baeldung/scheduling/ScheduledAnnotationExampleIntegrationTest.java index 9317c7bb7f..c5ca78aaa1 100644 --- a/spring-all/src/test/java/org/baeldung/scheduling/ScheduledAnnotationExampleTest.java +++ b/spring-all/src/test/java/org/baeldung/scheduling/ScheduledAnnotationExampleIntegrationTest.java @@ -8,7 +8,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { SpringSchedulingConfig.class }, loader = AnnotationConfigContextLoader.class) -public class ScheduledAnnotationExampleTest { +public class ScheduledAnnotationExampleIntegrationTest { @Test public void testScheduledAnnotation() throws InterruptedException { diff --git a/spring-all/src/test/java/org/baeldung/scheduling/SchedulingWithXmlConfigTest.java b/spring-all/src/test/java/org/baeldung/scheduling/SchedulingWithXmlConfigIntegrationTest.java similarity index 89% rename from spring-all/src/test/java/org/baeldung/scheduling/SchedulingWithXmlConfigTest.java rename to spring-all/src/test/java/org/baeldung/scheduling/SchedulingWithXmlConfigIntegrationTest.java index 0fca4d21c8..08df73f8fd 100644 --- a/spring-all/src/test/java/org/baeldung/scheduling/SchedulingWithXmlConfigTest.java +++ b/spring-all/src/test/java/org/baeldung/scheduling/SchedulingWithXmlConfigIntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:springScheduled-config.xml") -public class SchedulingWithXmlConfigTest { +public class SchedulingWithXmlConfigIntegrationTest { @Test public void testXmlBasedScheduling() throws InterruptedException { diff --git a/spring-all/src/test/java/org/baeldung/spring43/attributeannotations/AttributeAnnotationTest.java b/spring-all/src/test/java/org/baeldung/spring43/attributeannotations/AttributeAnnotationIntegrationTest.java similarity index 94% rename from spring-all/src/test/java/org/baeldung/spring43/attributeannotations/AttributeAnnotationTest.java rename to spring-all/src/test/java/org/baeldung/spring43/attributeannotations/AttributeAnnotationIntegrationTest.java index 5162a067d7..fff2716a64 100644 --- a/spring-all/src/test/java/org/baeldung/spring43/attributeannotations/AttributeAnnotationTest.java +++ b/spring-all/src/test/java/org/baeldung/spring43/attributeannotations/AttributeAnnotationIntegrationTest.java @@ -17,7 +17,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ContextConfiguration(classes = AttributeAnnotationConfiguration.class) @WebAppConfiguration -public class AttributeAnnotationTest extends AbstractJUnit4SpringContextTests { +public class AttributeAnnotationIntegrationTest extends AbstractJUnit4SpringContextTests { private MockMvc mockMvc; diff --git a/spring-all/src/test/java/org/baeldung/spring43/cache/CacheRefinementsTest.java b/spring-all/src/test/java/org/baeldung/spring43/cache/CacheRefinementsIntegrationTest.java similarity index 92% rename from spring-all/src/test/java/org/baeldung/spring43/cache/CacheRefinementsTest.java rename to spring-all/src/test/java/org/baeldung/spring43/cache/CacheRefinementsIntegrationTest.java index bfd6e5047c..986932dafe 100644 --- a/spring-all/src/test/java/org/baeldung/spring43/cache/CacheRefinementsTest.java +++ b/spring-all/src/test/java/org/baeldung/spring43/cache/CacheRefinementsIntegrationTest.java @@ -12,7 +12,7 @@ import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import static org.junit.Assert.assertEquals; @ContextConfiguration(classes = CacheRefinementsConfiguration.class) -public class CacheRefinementsTest extends AbstractJUnit4SpringContextTests { +public class CacheRefinementsIntegrationTest extends AbstractJUnit4SpringContextTests { private ExecutorService executorService = Executors.newFixedThreadPool(10); diff --git a/spring-all/src/test/java/org/baeldung/spring43/composedmapping/ComposedMappingTest.java b/spring-all/src/test/java/org/baeldung/spring43/composedmapping/ComposedMappingIntegrationTest.java similarity index 94% rename from spring-all/src/test/java/org/baeldung/spring43/composedmapping/ComposedMappingTest.java rename to spring-all/src/test/java/org/baeldung/spring43/composedmapping/ComposedMappingIntegrationTest.java index 75d828c3d3..d0af48cd0e 100644 --- a/spring-all/src/test/java/org/baeldung/spring43/composedmapping/ComposedMappingTest.java +++ b/spring-all/src/test/java/org/baeldung/spring43/composedmapping/ComposedMappingIntegrationTest.java @@ -17,7 +17,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ContextConfiguration(classes = ComposedMappingConfiguration.class) @WebAppConfiguration -public class ComposedMappingTest extends AbstractJUnit4SpringContextTests { +public class ComposedMappingIntegrationTest extends AbstractJUnit4SpringContextTests { @Autowired private AppointmentService appointmentService; diff --git a/spring-all/src/test/java/org/baeldung/spring43/ctor/ConfigurationConstructorInjectionTest.java b/spring-all/src/test/java/org/baeldung/spring43/ctor/ConfigurationConstructorInjectionIntegrationTest.java similarity index 85% rename from spring-all/src/test/java/org/baeldung/spring43/ctor/ConfigurationConstructorInjectionTest.java rename to spring-all/src/test/java/org/baeldung/spring43/ctor/ConfigurationConstructorInjectionIntegrationTest.java index 3edf693a13..871a985479 100644 --- a/spring-all/src/test/java/org/baeldung/spring43/ctor/ConfigurationConstructorInjectionTest.java +++ b/spring-all/src/test/java/org/baeldung/spring43/ctor/ConfigurationConstructorInjectionIntegrationTest.java @@ -8,7 +8,7 @@ import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import static org.junit.Assert.assertNotNull; @ContextConfiguration(classes = { FooRepositoryConfiguration.class, FooServiceConfiguration.class }) -public class ConfigurationConstructorInjectionTest extends AbstractJUnit4SpringContextTests { +public class ConfigurationConstructorInjectionIntegrationTest extends AbstractJUnit4SpringContextTests { @Autowired public FooService fooService; diff --git a/spring-all/src/test/java/org/baeldung/spring43/ctor/ImplicitConstructorTest.java b/spring-all/src/test/java/org/baeldung/spring43/ctor/ImplicitConstructorIntegrationTest.java similarity index 86% rename from spring-all/src/test/java/org/baeldung/spring43/ctor/ImplicitConstructorTest.java rename to spring-all/src/test/java/org/baeldung/spring43/ctor/ImplicitConstructorIntegrationTest.java index be0cf77a62..83fa11294e 100644 --- a/spring-all/src/test/java/org/baeldung/spring43/ctor/ImplicitConstructorTest.java +++ b/spring-all/src/test/java/org/baeldung/spring43/ctor/ImplicitConstructorIntegrationTest.java @@ -8,7 +8,7 @@ import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import static org.junit.Assert.assertNotNull; @ContextConfiguration("classpath:implicit-ctor-context.xml") -public class ImplicitConstructorTest extends AbstractJUnit4SpringContextTests { +public class ImplicitConstructorIntegrationTest extends AbstractJUnit4SpringContextTests { @Autowired private FooService fooService; diff --git a/spring-all/src/test/java/org/baeldung/spring43/defaultmethods/DefaultMethodsInjectionTest.java b/spring-all/src/test/java/org/baeldung/spring43/defaultmethods/DefaultMethodsInjectionIntegrationTest.java similarity index 87% rename from spring-all/src/test/java/org/baeldung/spring43/defaultmethods/DefaultMethodsInjectionTest.java rename to spring-all/src/test/java/org/baeldung/spring43/defaultmethods/DefaultMethodsInjectionIntegrationTest.java index e29d89a679..956df44821 100644 --- a/spring-all/src/test/java/org/baeldung/spring43/defaultmethods/DefaultMethodsInjectionTest.java +++ b/spring-all/src/test/java/org/baeldung/spring43/defaultmethods/DefaultMethodsInjectionIntegrationTest.java @@ -10,7 +10,7 @@ import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import static org.junit.Assert.assertEquals; @ContextConfiguration("classpath:defaultmethods-context.xml") -public class DefaultMethodsInjectionTest extends AbstractJUnit4SpringContextTests { +public class DefaultMethodsInjectionIntegrationTest extends AbstractJUnit4SpringContextTests { @Autowired private IDateHolder dateHolder; diff --git a/spring-all/src/test/java/org/baeldung/spring43/defaultmethods/TransactionalTest.java b/spring-all/src/test/java/org/baeldung/spring43/defaultmethods/TransactionalIntegrationTest.java similarity index 76% rename from spring-all/src/test/java/org/baeldung/spring43/defaultmethods/TransactionalTest.java rename to spring-all/src/test/java/org/baeldung/spring43/defaultmethods/TransactionalIntegrationTest.java index 89c96ba1d4..b4ac7e8ccf 100644 --- a/spring-all/src/test/java/org/baeldung/spring43/defaultmethods/TransactionalTest.java +++ b/spring-all/src/test/java/org/baeldung/spring43/defaultmethods/TransactionalIntegrationTest.java @@ -5,7 +5,7 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests; @ContextConfiguration(classes = TransactionalTestConfiguration.class) -public class TransactionalTest extends AbstractTransactionalJUnit4SpringContextTests implements ITransactionalTest { +public class TransactionalIntegrationTest extends AbstractTransactionalJUnit4SpringContextTests implements ITransactionalTest { @Test public void whenDefaultMethodAnnotatedWithBeforeTransaction_thenDefaultMethodIsExecuted() { diff --git a/spring-all/src/test/java/org/baeldung/spring43/depresolution/ObjectProviderTest.java b/spring-all/src/test/java/org/baeldung/spring43/depresolution/ObjectProviderIntegrationTest.java similarity index 87% rename from spring-all/src/test/java/org/baeldung/spring43/depresolution/ObjectProviderTest.java rename to spring-all/src/test/java/org/baeldung/spring43/depresolution/ObjectProviderIntegrationTest.java index eeeb005f81..6d06bfdc2a 100644 --- a/spring-all/src/test/java/org/baeldung/spring43/depresolution/ObjectProviderTest.java +++ b/spring-all/src/test/java/org/baeldung/spring43/depresolution/ObjectProviderIntegrationTest.java @@ -8,7 +8,7 @@ import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; import static org.junit.Assert.assertNotNull; @ContextConfiguration(classes = ObjectProviderConfiguration.class) -public class ObjectProviderTest extends AbstractJUnit4SpringContextTests { +public class ObjectProviderIntegrationTest extends AbstractJUnit4SpringContextTests { @Autowired private FooService fooService; diff --git a/spring-all/src/test/java/org/baeldung/spring43/scopeannotations/ScopeAnnotationsTest.java b/spring-all/src/test/java/org/baeldung/spring43/scopeannotations/ScopeAnnotationsIntegrationTest.java similarity index 97% rename from spring-all/src/test/java/org/baeldung/spring43/scopeannotations/ScopeAnnotationsTest.java rename to spring-all/src/test/java/org/baeldung/spring43/scopeannotations/ScopeAnnotationsIntegrationTest.java index ecf14f0d6c..69cce15029 100644 --- a/spring-all/src/test/java/org/baeldung/spring43/scopeannotations/ScopeAnnotationsTest.java +++ b/spring-all/src/test/java/org/baeldung/spring43/scopeannotations/ScopeAnnotationsIntegrationTest.java @@ -19,7 +19,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @ContextConfiguration(classes = ScopeAnnotationsConfiguration.class) @WebAppConfiguration -public class ScopeAnnotationsTest extends AbstractJUnit4SpringContextTests { +public class ScopeAnnotationsIntegrationTest extends AbstractJUnit4SpringContextTests { private MockMvc mockMvc; diff --git a/spring-all/src/test/java/org/baeldung/springevents/asynchronous/AsynchronousCustomSpringEventsTest.java b/spring-all/src/test/java/org/baeldung/springevents/asynchronous/AsynchronousCustomSpringEventsIntegrationTest.java similarity index 93% rename from spring-all/src/test/java/org/baeldung/springevents/asynchronous/AsynchronousCustomSpringEventsTest.java rename to spring-all/src/test/java/org/baeldung/springevents/asynchronous/AsynchronousCustomSpringEventsIntegrationTest.java index 2b45ae4e68..e12baed7e0 100644 --- a/spring-all/src/test/java/org/baeldung/springevents/asynchronous/AsynchronousCustomSpringEventsTest.java +++ b/spring-all/src/test/java/org/baeldung/springevents/asynchronous/AsynchronousCustomSpringEventsIntegrationTest.java @@ -10,7 +10,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { AsynchronousSpringEventsConfig.class }, loader = AnnotationConfigContextLoader.class) -public class AsynchronousCustomSpringEventsTest { +public class AsynchronousCustomSpringEventsIntegrationTest { @Autowired private CustomSpringEventPublisher publisher; diff --git a/spring-all/src/test/java/org/baeldung/springevents/synchronous/ContextRefreshedListenerTest.java b/spring-all/src/test/java/org/baeldung/springevents/synchronous/ContextRefreshedListenerIntegrationTest.java similarity index 92% rename from spring-all/src/test/java/org/baeldung/springevents/synchronous/ContextRefreshedListenerTest.java rename to spring-all/src/test/java/org/baeldung/springevents/synchronous/ContextRefreshedListenerIntegrationTest.java index d971698e3f..ac8758bbf6 100644 --- a/spring-all/src/test/java/org/baeldung/springevents/synchronous/ContextRefreshedListenerTest.java +++ b/spring-all/src/test/java/org/baeldung/springevents/synchronous/ContextRefreshedListenerIntegrationTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { SynchronousSpringEventsConfig.class }, loader = AnnotationConfigContextLoader.class) -public class ContextRefreshedListenerTest { +public class ContextRefreshedListenerIntegrationTest { @Test public void testContextRefreshedListener() throws InterruptedException { diff --git a/spring-all/src/test/java/org/baeldung/springevents/synchronous/SynchronousCustomSpringEventsTest.java b/spring-all/src/test/java/org/baeldung/springevents/synchronous/SynchronousCustomSpringEventsIntegrationTest.java similarity index 93% rename from spring-all/src/test/java/org/baeldung/springevents/synchronous/SynchronousCustomSpringEventsTest.java rename to spring-all/src/test/java/org/baeldung/springevents/synchronous/SynchronousCustomSpringEventsIntegrationTest.java index b559ca9fc9..f9783f57dc 100644 --- a/spring-all/src/test/java/org/baeldung/springevents/synchronous/SynchronousCustomSpringEventsTest.java +++ b/spring-all/src/test/java/org/baeldung/springevents/synchronous/SynchronousCustomSpringEventsIntegrationTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { SynchronousSpringEventsConfig.class }, loader = AnnotationConfigContextLoader.class) -public class SynchronousCustomSpringEventsTest { +public class SynchronousCustomSpringEventsIntegrationTest { @Autowired private CustomSpringEventPublisher publisher; diff --git a/spring-all/src/test/java/org/baeldung/startup/SpringStartupTest.java b/spring-all/src/test/java/org/baeldung/startup/SpringStartupIntegrationTest.java similarity index 97% rename from spring-all/src/test/java/org/baeldung/startup/SpringStartupTest.java rename to spring-all/src/test/java/org/baeldung/startup/SpringStartupIntegrationTest.java index 523a27c2c4..6263482948 100644 --- a/spring-all/src/test/java/org/baeldung/startup/SpringStartupTest.java +++ b/spring-all/src/test/java/org/baeldung/startup/SpringStartupIntegrationTest.java @@ -12,7 +12,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { SpringStartupConfig.class }, loader = AnnotationConfigContextLoader.class) -public class SpringStartupTest { +public class SpringStartupIntegrationTest { @Autowired private ApplicationContext ctx; diff --git a/spring-all/src/test/java/org/baeldung/startup/SpringStartupXMLConfigTest.java b/spring-all/src/test/java/org/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java similarity index 93% rename from spring-all/src/test/java/org/baeldung/startup/SpringStartupXMLConfigTest.java rename to spring-all/src/test/java/org/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java index 19a35bb92b..a46d24fa3b 100644 --- a/spring-all/src/test/java/org/baeldung/startup/SpringStartupXMLConfigTest.java +++ b/spring-all/src/test/java/org/baeldung/startup/SpringStartupXMLConfigIntegrationTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:startupConfig.xml") -public class SpringStartupXMLConfigTest { +public class SpringStartupXMLConfigIntegrationTest { @Autowired private ApplicationContext ctx; From c1017af8a09d9b10a5821c237a01d263b785084e Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 20 Oct 2016 14:21:12 +0200 Subject: [PATCH 214/309] add integration test profile --- spring-akka/pom.xml | 51 ++++++++++++++++++- ...st.java => SpringAkkaIntegrationTest.java} | 2 +- 2 files changed, 50 insertions(+), 3 deletions(-) rename spring-akka/src/test/java/org/baeldung/akka/{SpringAkkaTest.java => SpringAkkaIntegrationTest.java} (94%) diff --git a/spring-akka/pom.xml b/spring-akka/pom.xml index 6299448ec8..eb33ca4848 100644 --- a/spring-akka/pom.xml +++ b/spring-akka/pom.xml @@ -65,9 +65,54 @@ + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + - - + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + 4.3.2.RELEASE @@ -75,6 +120,8 @@ 4.12 3.5.1 + 2.19.1 + \ No newline at end of file diff --git a/spring-akka/src/test/java/org/baeldung/akka/SpringAkkaTest.java b/spring-akka/src/test/java/org/baeldung/akka/SpringAkkaIntegrationTest.java similarity index 94% rename from spring-akka/src/test/java/org/baeldung/akka/SpringAkkaTest.java rename to spring-akka/src/test/java/org/baeldung/akka/SpringAkkaIntegrationTest.java index e5351e9d0f..c5da0f747e 100644 --- a/spring-akka/src/test/java/org/baeldung/akka/SpringAkkaTest.java +++ b/spring-akka/src/test/java/org/baeldung/akka/SpringAkkaIntegrationTest.java @@ -20,7 +20,7 @@ import static akka.pattern.Patterns.ask; import static org.baeldung.akka.SpringExtension.SPRING_EXTENSION_PROVIDER; @ContextConfiguration(classes = AppConfiguration.class) -public class SpringAkkaTest extends AbstractJUnit4SpringContextTests { +public class SpringAkkaIntegrationTest extends AbstractJUnit4SpringContextTests { @Autowired private ActorSystem system; From 6e9f4a6f29cdfbbbd4aebdbe90705908112c5cae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ambrus=20Adri=C3=A1n-Zolt=C3=A1n?= Date: Thu, 20 Oct 2016 19:33:41 +0300 Subject: [PATCH 215/309] Added module in root pom file. --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 5526c1e2a3..4497d08ade 100644 --- a/pom.xml +++ b/pom.xml @@ -109,6 +109,7 @@ spring-security-basic-auth spring-security-custom-permission + spring-security-custom-voter spring-security-mvc-custom spring-security-mvc-digest-auth spring-security-mvc-ldap From 511d96614d086daf4216e880b8de09b4aff3dd53 Mon Sep 17 00:00:00 2001 From: Sameera Date: Thu, 20 Oct 2016 23:10:17 +0530 Subject: [PATCH 216/309] PrintScreen code samples moved to core-java module --- .../com/baeldung/printscreen}/Screenshot.java | 2 +- .../baeldung/printscreen}/ScreenshotTest.java | 2 +- printscreen/pom.xml | 26 ------------------- 3 files changed, 2 insertions(+), 28 deletions(-) rename {printscreen/src/main/java/org/baeldung/corejava => core-java/src/main/java/com/baeldung/printscreen}/Screenshot.java (97%) rename {printscreen/src/test/java/org/baeldung/corejava => core-java/src/test/java/com/baeldung/printscreen}/ScreenshotTest.java (95%) delete mode 100644 printscreen/pom.xml diff --git a/printscreen/src/main/java/org/baeldung/corejava/Screenshot.java b/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java similarity index 97% rename from printscreen/src/main/java/org/baeldung/corejava/Screenshot.java rename to core-java/src/main/java/com/baeldung/printscreen/Screenshot.java index d33761932f..500860640a 100644 --- a/printscreen/src/main/java/org/baeldung/corejava/Screenshot.java +++ b/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java @@ -1,4 +1,4 @@ -package org.baeldung.corejava;; +package com.baeldung.printscreen; import javax.imageio.ImageIO; import java.awt.*; diff --git a/printscreen/src/test/java/org/baeldung/corejava/ScreenshotTest.java b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java similarity index 95% rename from printscreen/src/test/java/org/baeldung/corejava/ScreenshotTest.java rename to core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java index 588c2eea78..5c0341cb36 100644 --- a/printscreen/src/test/java/org/baeldung/corejava/ScreenshotTest.java +++ b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java @@ -1,4 +1,4 @@ -package org.baeldung.corejava; +package com.baeldung.printscreen; import org.junit.After; import org.junit.Before; diff --git a/printscreen/pom.xml b/printscreen/pom.xml deleted file mode 100644 index ddb813a7a2..0000000000 --- a/printscreen/pom.xml +++ /dev/null @@ -1,26 +0,0 @@ - - 4.0.0 - - com.baeldung - corejava-printscreen - 1.0-SNAPSHOT - jar - - How to Print Screen in Java - https://github.com/eugenp/tutorials - - - UTF-8 - 4.12 - - - - - junit - junit - ${junit.version} - test - - - From cdbd83e8518b2cf0dcf66ce8d64b105fde479015 Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 20 Oct 2016 21:53:32 +0200 Subject: [PATCH 217/309] add integration test profile --- spring-mvc-java/pom.xml | 54 ++++++++++++------- ...arDependencyA => CircularDependencyA.java} | 0 ...arDependencyB => CircularDependencyB.java} | 0 .../CircularDependencyIntegrationTest.java | 35 ++++++++++++ .../circulardependency/CircularDependencyTest | 35 ------------ .../{TestConfig => TestConfig.java} | 0 .../HtmlUnitAndSpringIntegrationTest.java | 4 +- 7 files changed, 73 insertions(+), 55 deletions(-) rename spring-mvc-java/src/main/java/com/baeldung/circulardependency/{CircularDependencyA => CircularDependencyA.java} (100%) rename spring-mvc-java/src/main/java/com/baeldung/circulardependency/{CircularDependencyB => CircularDependencyB.java} (100%) create mode 100644 spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyIntegrationTest.java delete mode 100644 spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyTest rename spring-mvc-java/src/test/java/com/baeldung/circulardependency/{TestConfig => TestConfig.java} (100%) diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index 8248343105..011de70ad2 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -208,28 +208,44 @@ - - org.codehaus.cargo - cargo-maven2-plugin - ${cargo-maven2-plugin.version} - - - jetty8x - embedded - - - - - - - 8082 - - - - + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + 4.2.5.RELEASE diff --git a/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyA b/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyA.java similarity index 100% rename from spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyA rename to spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyA.java diff --git a/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyB b/spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyB.java similarity index 100% rename from spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyB rename to spring-mvc-java/src/main/java/com/baeldung/circulardependency/CircularDependencyB.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyIntegrationTest.java b/spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyIntegrationTest.java new file mode 100644 index 0000000000..42847f4dd1 --- /dev/null +++ b/spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyIntegrationTest.java @@ -0,0 +1,35 @@ +package com.baeldung.circulardependency; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { TestConfig.class }) +public class CircularDependencyIntegrationTest { + + @Autowired + ApplicationContext context; + + @Bean + public CircularDependencyA getCircularDependencyA() { + return new CircularDependencyA(); + } + + @Bean + public CircularDependencyB getCircularDependencyB() { + return new CircularDependencyB(); + } + + @Test + public void givenCircularDependency_whenSetterInjection_thenItWorks() { + final CircularDependencyA circA = context.getBean(CircularDependencyA.class); + + Assert.assertEquals("Hi!", circA.getCircB().getMessage()); + } +} diff --git a/spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyTest b/spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyTest deleted file mode 100644 index 4229f21f10..0000000000 --- a/spring-mvc-java/src/test/java/com/baeldung/circulardependency/CircularDependencyTest +++ /dev/null @@ -1,35 +0,0 @@ -package com.baeldung.circulardependency; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = { TestConfig.class }) -public class CircularDependencyTest { - - @Autowired - ApplicationContext context; - - @Bean - public CircularDependencyA getCircularDependencyA() { - return new CircularDependencyA(); - } - - @Bean - public CircularDependencyB getCircularDependencyB() { - return new CircularDependencyB(); - } - - @Test - public void givenCircularDependency_whenSetterInjection_thenItWorks() { - final CircularDependencyA circA = context.getBean(CircularDependencyA.class); - - Assert.assertEquals("Hi!", circA.getCircB().getMessage()); - } -} diff --git a/spring-mvc-java/src/test/java/com/baeldung/circulardependency/TestConfig b/spring-mvc-java/src/test/java/com/baeldung/circulardependency/TestConfig.java similarity index 100% rename from spring-mvc-java/src/test/java/com/baeldung/circulardependency/TestConfig rename to spring-mvc-java/src/test/java/com/baeldung/circulardependency/TestConfig.java diff --git a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java index 7a23908fe5..406975b6cc 100644 --- a/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java +++ b/spring-mvc-java/src/test/java/com/baeldung/htmlunit/HtmlUnitAndSpringIntegrationTest.java @@ -5,6 +5,7 @@ import java.net.MalformedURLException; import org.junit.Assert; import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -39,9 +40,10 @@ public class HtmlUnitAndSpringIntegrationTest { // @Test + @Ignore("Related view message.html does not exist check MessageController") public void givenAMessage_whenSent_thenItShows() throws FailingHttpStatusCodeException, MalformedURLException, IOException { final String text = "Hello world!"; - HtmlPage page = webClient.getPage("http://localhost/message/showForm"); + final HtmlPage page = webClient.getPage("http://localhost/message/showForm"); System.out.println(page.asXml()); final HtmlTextInput messageText = page.getHtmlElementById("message"); From fd1a5796a91be4db4d30c2166c98e4a94a39046d Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 20 Oct 2016 23:10:14 +0200 Subject: [PATCH 218/309] Refactor Screenshot examples --- .../com/baeldung/printscreen/Screenshot.java | 13 +++++------- .../baeldung/printscreen/ScreenshotTest.java | 21 ++++--------------- .../ehcache/SquareCalculatorTest.java | 18 ++++++++-------- 3 files changed, 18 insertions(+), 34 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java b/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java index 500860640a..7c29a61842 100644 --- a/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java +++ b/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java @@ -7,20 +7,17 @@ import java.io.File; public class Screenshot { - private String filePath; - private String filenamePrefix; - private String fileType; - private int timeToWait; + private final String filePath; + private final String filenamePrefix; + private final String fileType; - public Screenshot(String filePath, String filenamePrefix, - String fileType, int timeToWait) { + public Screenshot(String filePath, String filenamePrefix, String fileType) { this.filePath = filePath; this.filenamePrefix = filenamePrefix; this.fileType = fileType; - this.timeToWait = timeToWait; } - public void getScreenshot() throws Exception { + public void getScreenshot(int timeToWait) throws Exception { Thread.sleep(timeToWait); Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); Robot robot = new Robot(); diff --git a/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java index 5c0341cb36..895f514f4a 100644 --- a/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java +++ b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java @@ -1,34 +1,21 @@ package com.baeldung.printscreen; import org.junit.After; -import org.junit.Before; import org.junit.Test; import java.io.File; -import static org.junit.Assert.*; +import static org.junit.Assert.assertTrue; public class ScreenshotTest { - private Screenshot screenshot; - private String filePath; - private String fileName; - private String fileType; - private File file; - - @Before - public void setUp() throws Exception { - filePath = ""; - fileName = "Screenshot"; - fileType = "jpg"; - file = new File(filePath + fileName + "." + fileType); - screenshot = new Screenshot(filePath, fileName, fileType, 2000); - } + private Screenshot screenshot = new Screenshot("", "Screenshot", "jpg"); + private File file = new File("Screenshot.jpg"); @Test public void testGetScreenshot() throws Exception { - screenshot.getScreenshot(); + screenshot.getScreenshot(2000); assertTrue(file.exists()); } diff --git a/spring-all/src/test/java/org/baeldung/ehcache/SquareCalculatorTest.java b/spring-all/src/test/java/org/baeldung/ehcache/SquareCalculatorTest.java index 875fd2a25e..ab7aebf7a1 100644 --- a/spring-all/src/test/java/org/baeldung/ehcache/SquareCalculatorTest.java +++ b/spring-all/src/test/java/org/baeldung/ehcache/SquareCalculatorTest.java @@ -1,20 +1,20 @@ package org.baeldung.ehcache; -import static org.junit.Assert.*; - import org.baeldung.ehcache.calculator.SquaredCalculator; import org.baeldung.ehcache.config.CacheHelper; import org.junit.Before; import org.junit.Test; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + public class SquareCalculatorTest { - SquaredCalculator squaredCalculator = new SquaredCalculator(); - CacheHelper cacheHelper = new CacheHelper(); + private SquaredCalculator squaredCalculator = new SquaredCalculator(); + private CacheHelper cacheHelper = new CacheHelper(); @Before public void setup() { squaredCalculator.setCache(cacheHelper); - } @Test @@ -22,7 +22,7 @@ public class SquareCalculatorTest { for (int i = 10; i < 15; i++) { assertFalse(cacheHelper.getSquareNumberCache().containsKey(i)); System.out.println("Square value of " + i + " is: " - + squaredCalculator.getSquareValueOfNumber(i) + "\n"); + + squaredCalculator.getSquareValueOfNumber(i) + "\n"); } } @@ -31,13 +31,13 @@ public class SquareCalculatorTest { for (int i = 10; i < 15; i++) { assertFalse(cacheHelper.getSquareNumberCache().containsKey(i)); System.out.println("Square value of " + i + " is: " - + squaredCalculator.getSquareValueOfNumber(i) + "\n"); + + squaredCalculator.getSquareValueOfNumber(i) + "\n"); } - + for (int i = 10; i < 15; i++) { assertTrue(cacheHelper.getSquareNumberCache().containsKey(i)); System.out.println("Square value of " + i + " is: " - + squaredCalculator.getSquareValueOfNumber(i) + "\n"); + + squaredCalculator.getSquareValueOfNumber(i) + "\n"); } } } From 89754421a293f8882b6b7cb4f632d5a027c67db6 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 20 Oct 2016 23:14:05 +0200 Subject: [PATCH 219/309] Refactor Screenshot examples 2 --- .../com/baeldung/printscreen/Screenshot.java | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java b/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java index 7c29a61842..27fd84e374 100644 --- a/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java +++ b/core-java/src/main/java/com/baeldung/printscreen/Screenshot.java @@ -7,14 +7,10 @@ import java.io.File; public class Screenshot { - private final String filePath; - private final String filenamePrefix; - private final String fileType; + private final String path; - public Screenshot(String filePath, String filenamePrefix, String fileType) { - this.filePath = filePath; - this.filenamePrefix = filenamePrefix; - this.fileType = fileType; + public Screenshot(String path) { + this.path = path; } public void getScreenshot(int timeToWait) throws Exception { @@ -22,14 +18,6 @@ public class Screenshot { Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); Robot robot = new Robot(); BufferedImage img = robot.createScreenCapture(rectangle); - ImageIO.write(img, fileType, setupFileNamePath()); - } - - private File setupFileNamePath() { - return new File(filePath + filenamePrefix + "." + fileType); - } - - private Rectangle getScreenSizedRectangle(final Dimension d) { - return new Rectangle(0, 0, d.width, d.height); + ImageIO.write(img, "jpg", new File(path)); } } From 1018c4b3fb3acedac854011e69cac0c925560284 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 20 Oct 2016 23:18:50 +0200 Subject: [PATCH 220/309] Refactor JedisTest --- .../src/test/java/com/baeldung/JedisTest.java | 25 +++++-------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/redis/src/test/java/com/baeldung/JedisTest.java b/redis/src/test/java/com/baeldung/JedisTest.java index 766fd7b5e9..582bb266aa 100644 --- a/redis/src/test/java/com/baeldung/JedisTest.java +++ b/redis/src/test/java/com/baeldung/JedisTest.java @@ -1,28 +1,15 @@ package com.baeldung; +import org.junit.*; +import redis.clients.jedis.*; +import redis.embedded.RedisServer; + import java.io.IOException; import java.time.Duration; import java.util.HashMap; import java.util.Map; import java.util.Set; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Assert; -import org.junit.BeforeClass; -import org.junit.Test; - -import redis.clients.jedis.Jedis; -import redis.clients.jedis.JedisPool; -import redis.clients.jedis.JedisPoolConfig; -import redis.clients.jedis.Pipeline; -import redis.clients.jedis.Response; -import redis.clients.jedis.Transaction; -import redis.embedded.RedisServer; - -/** - * Unit test for Redis Java library - Jedis. - */ public class JedisTest { private Jedis jedis; @@ -140,9 +127,9 @@ public class JedisTest { scores.put("PlayerTwo", 1500.0); scores.put("PlayerThree", 8200.0); - for (String player : scores.keySet()) { + scores.keySet().forEach(player -> { jedis.zadd(key, scores.get(player), player); - } + }); Set players = jedis.zrevrange(key, 0, 1); Assert.assertEquals("PlayerThree", players.iterator().next()); From 395a6731d9a1bfac956c820ca8e86f0b3f0026ea Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 21 Oct 2016 00:11:19 +0200 Subject: [PATCH 221/309] add integration test profile --- rest-testing/pom.xml | 42 +++++++++++++++++++ ...Test.java => CucumberIntegrationTest.java} | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) rename rest-testing/src/test/java/com/baeldung/rest/cucumber/{CucumberTest.java => CucumberIntegrationTest.java} (84%) diff --git a/rest-testing/pom.xml b/rest-testing/pom.xml index 819e8de8a5..90c160af15 100644 --- a/rest-testing/pom.xml +++ b/rest-testing/pom.xml @@ -148,12 +148,54 @@ org.apache.maven.plugins maven-surefire-plugin ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*UnitTest.java + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + json + + + + + + + + 2.7.8 diff --git a/rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberTest.java b/rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberIntegrationTest.java similarity index 84% rename from rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberTest.java rename to rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberIntegrationTest.java index 041de592e9..f80178a43d 100644 --- a/rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberTest.java +++ b/rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberIntegrationTest.java @@ -6,5 +6,5 @@ import cucumber.api.junit.Cucumber; @RunWith(Cucumber.class) @CucumberOptions(features = "classpath:Feature") -public class CucumberTest { +public class CucumberIntegrationTest { } \ No newline at end of file From 13cf6590ba0e0e5738a6cf8c7d51b35503a4010a Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 21 Oct 2016 00:24:15 +0200 Subject: [PATCH 222/309] add integration test profile --- querydsl/pom.xml | 49 +++++++++++++++++++ ...est.java => PersonDaoIntegrationTest.java} | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) rename querydsl/src/test/java/org/baeldung/dao/{PersonDaoTest.java => PersonDaoIntegrationTest.java} (98%) diff --git a/querydsl/pom.xml b/querydsl/pom.xml index bed0cf90e5..13528526ea 100644 --- a/querydsl/pom.xml +++ b/querydsl/pom.xml @@ -20,6 +20,7 @@ 5.2.1.Final 4.1.3 1.7.21 + 2.19.1 @@ -166,7 +167,55 @@ + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + \ No newline at end of file diff --git a/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java b/querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java similarity index 98% rename from querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java rename to querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java index 0e5996a8c8..a666aea8da 100644 --- a/querydsl/src/test/java/org/baeldung/dao/PersonDaoTest.java +++ b/querydsl/src/test/java/org/baeldung/dao/PersonDaoIntegrationTest.java @@ -17,7 +17,7 @@ import junit.framework.Assert; @RunWith(SpringJUnit4ClassRunner.class) @Transactional @TransactionConfiguration(defaultRollback = true) -public class PersonDaoTest { +public class PersonDaoIntegrationTest { @Autowired private PersonDao personDao; From 60d60508c38580ddcb2763794b895d152be4b784 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 21 Oct 2016 13:08:10 +0200 Subject: [PATCH 223/309] add integration test profile --- mapstruct/pom.xml | 52 ++++++++++++++++++- ...urceDestinationMapperIntegrationTest.java} | 2 +- 2 files changed, 51 insertions(+), 3 deletions(-) rename mapstruct/src/test/java/com/baeldung/mapper/{SimpleSourceDestinationMapperTest.java => SimpleSourceDestinationMapperIntegrationTest.java} (96%) diff --git a/mapstruct/pom.xml b/mapstruct/pom.xml index 4159ef35c9..aaa3e95f8c 100644 --- a/mapstruct/pom.xml +++ b/mapstruct/pom.xml @@ -55,6 +55,54 @@ - - + + + org.apache.maven.plugins + maven-surefire-plugin + 2.19.1 + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + diff --git a/mapstruct/src/test/java/com/baeldung/mapper/SimpleSourceDestinationMapperTest.java b/mapstruct/src/test/java/com/baeldung/mapper/SimpleSourceDestinationMapperIntegrationTest.java similarity index 96% rename from mapstruct/src/test/java/com/baeldung/mapper/SimpleSourceDestinationMapperTest.java rename to mapstruct/src/test/java/com/baeldung/mapper/SimpleSourceDestinationMapperIntegrationTest.java index a7addf33a7..31d60c0d7d 100644 --- a/mapstruct/src/test/java/com/baeldung/mapper/SimpleSourceDestinationMapperTest.java +++ b/mapstruct/src/test/java/com/baeldung/mapper/SimpleSourceDestinationMapperIntegrationTest.java @@ -12,7 +12,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:applicationContext.xml") -public class SimpleSourceDestinationMapperTest { +public class SimpleSourceDestinationMapperIntegrationTest { @Autowired SimpleSourceDestinationMapper simpleSourceDestinationMapper; From 60a1c5f481e2db0911cbaf7b4106bd95b63c5d71 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 21 Oct 2016 14:02:01 +0200 Subject: [PATCH 224/309] add integration test profile --- jooq-spring/pom.xml | 47 +++++++++++++++++++ ...=> PersistenceContextIntegrationTest.java} | 2 +- ...eryTest.java => QueryIntegrationTest.java} | 4 +- ...st.java => SpringBootIntegrationTest.java} | 2 +- 4 files changed, 51 insertions(+), 4 deletions(-) rename jooq-spring/src/test/java/com/baeldung/jooq/introduction/{PersistenceContext.java => PersistenceContextIntegrationTest.java} (98%) rename jooq-spring/src/test/java/com/baeldung/jooq/introduction/{QueryTest.java => QueryIntegrationTest.java} (97%) rename jooq-spring/src/test/java/com/baeldung/jooq/springboot/{SpringBootTest.java => SpringBootIntegrationTest.java} (99%) diff --git a/jooq-spring/pom.xml b/jooq-spring/pom.xml index e77ff0cbfd..96a3de11db 100644 --- a/jooq-spring/pom.xml +++ b/jooq-spring/pom.xml @@ -161,9 +161,55 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + 3.7.3 1.4.191 @@ -173,6 +219,7 @@ 4.12 3.5.1 + 2.19.1 \ No newline at end of file diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContext.java b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContextIntegrationTest.java similarity index 98% rename from jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContext.java rename to jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContextIntegrationTest.java index df628f9f78..06290ae8db 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContext.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContextIntegrationTest.java @@ -22,7 +22,7 @@ import javax.sql.DataSource; @ComponentScan({ "com.baeldung.jooq.introduction.db.public_.tables" }) @EnableTransactionManagement @PropertySource("classpath:intro_config.properties") -public class PersistenceContext { +public class PersistenceContextIntegrationTest { @Autowired private Environment environment; diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryTest.java b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java similarity index 97% rename from jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryTest.java rename to jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java index 68f975dd6d..28bc4c63c7 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryTest.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java @@ -17,10 +17,10 @@ import static com.baeldung.jooq.introduction.db.public_.tables.AuthorBook.AUTHOR import static com.baeldung.jooq.introduction.db.public_.tables.Book.BOOK; import static org.junit.Assert.assertEquals; -@ContextConfiguration(classes = PersistenceContext.class) +@ContextConfiguration(classes = PersistenceContextIntegrationTest.class) @Transactional(transactionManager = "transactionManager") @RunWith(SpringJUnit4ClassRunner.class) -public class QueryTest { +public class QueryIntegrationTest { @Autowired private DSLContext dsl; diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java similarity index 99% rename from jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java rename to jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java index f9427f30fb..fa3f342ecd 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java @@ -20,7 +20,7 @@ import static org.junit.Assert.assertEquals; @SpringApplicationConfiguration(Application.class) @Transactional("transactionManager") @RunWith(SpringJUnit4ClassRunner.class) -public class SpringBootTest { +public class SpringBootIntegrationTest { @Autowired private DSLContext dsl; From a22daf9513b5e42afeb4b09b4ff0962b8e987430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ambrus=20Adri=C3=A1n-Zolt=C3=A1n?= Date: Fri, 21 Oct 2016 17:49:14 +0300 Subject: [PATCH 225/309] Added test cases --- spring-security-custom-voter/pom.xml | 40 ++++++++++++++++++ .../test/java/org/baeldung/web/LiveTest.java | 42 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java diff --git a/spring-security-custom-voter/pom.xml b/spring-security-custom-voter/pom.xml index 800fe356b4..727efa48ab 100644 --- a/spring-security-custom-voter/pom.xml +++ b/spring-security-custom-voter/pom.xml @@ -21,6 +21,7 @@ UTF-8 UTF-8 + 3.0.1 1.8 @@ -43,6 +44,45 @@ spring-boot-starter-test test + + + + + junit + junit + test + + + + org.hamcrest + hamcrest-core + test + + + + org.hamcrest + hamcrest-library + test + + + + org.springframework + spring-test + 4.3.3.RELEASE + + + + org.springframework.security + spring-security-test + 4.1.3.RELEASE + test + + + + org.springframework.security + spring-security-web + 4.1.3.RELEASE + diff --git a/spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java b/spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java new file mode 100644 index 0000000000..3ddeab5920 --- /dev/null +++ b/spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java @@ -0,0 +1,42 @@ +package org.baeldung.web; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +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.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; +import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated; +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @WebAppConfiguration @SpringBootTest public class LiveTest { + @Autowired private WebApplicationContext context; + + private MockMvc mvc; + + @Before public void setup() { + mvc = MockMvcBuilders.webAppContextSetup(context).apply(springSecurity()).build(); + } + + @Test public void givenUnauthenticatedUser_whenAccessingMainPage_thenRedirect() throws Exception { + mvc.perform(get("/")).andExpect(status().is3xxRedirection()); + } + + @Test public void givenValidUsernameAndPassword_whenLogin_thenOK() throws Exception { + mvc.perform(formLogin("/login").user("user").password("pass")).andExpect(authenticated()); + } + + @Test public void givenAuthenticatedAdmin_whenAccessingMainPage_thenOK() throws Exception { + mvc.perform(get("/").with(user("admin").password("pass").roles("ADMIN"))).andExpect(status().isOk()); + } +} From 1d3ac0836f12ccb5a59fb619b2bcfd339e89fbaa Mon Sep 17 00:00:00 2001 From: Eugen Date: Fri, 21 Oct 2016 20:50:38 +0300 Subject: [PATCH 226/309] Update README.md --- spring-all/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-all/README.md b/spring-all/README.md index aae98440f3..90ae69300a 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -15,3 +15,4 @@ The "REST With Spring" Classes: http://bit.ly/restwithspring - [Guide To Running Logic on Startup in Spring](http://www.baeldung.com/running-setup-logic-on-startup-in-spring) - [Quick Guide to Spring Controllers](http://www.baeldung.com/spring-controllers) - [Quick Guide to Spring Bean Scopes](http://www.baeldung.com/spring-bean-scopes) +- [Introduction To Ehcache](http://www.baeldung.com/ehcache) From 9aef7f21ece55732e512175a3e562698e8aa1ea5 Mon Sep 17 00:00:00 2001 From: Chris Anatalio Date: Fri, 21 Oct 2016 16:32:58 -0700 Subject: [PATCH 227/309] BAEL-223: Clean up and update dependencies --- spring-boot-data-dynamodb/pom.xml | 54 ++++++++---------- .../main/java/com/baeldung/Application.java | 13 +++++ .../spring/data/es/config/DynamoDBConfig.java | 13 ++--- .../spring/data/es/model/ProductInfo.java | 2 + .../ProductInfoRepository.java | 8 +-- .../main/java/org/baeldung/Application.java | 13 ----- .../src/main/resources/application.properties | 7 ++- .../ProductInfoRepositoryIntegrationTest.java | 55 +++++++++---------- 8 files changed, 78 insertions(+), 87 deletions(-) create mode 100644 spring-boot-data-dynamodb/src/main/java/com/baeldung/Application.java rename spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/{repository => repositories}/ProductInfoRepository.java (87%) delete mode 100644 spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java diff --git a/spring-boot-data-dynamodb/pom.xml b/spring-boot-data-dynamodb/pom.xml index 9c6c5a875f..11e1366f3e 100644 --- a/spring-boot-data-dynamodb/pom.xml +++ b/spring-boot-data-dynamodb/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung - spring-boot + spring-boot-dynamodb 0.0.1-SNAPSHOT jar Spring Boot Actuator @@ -17,27 +17,29 @@ - org.baeldung.boot.DemoApplication + com.baeldung.Application UTF-8 1.8 4.3.1.RELEASE - - - org.springframework.boot - spring-boot-starter-thymeleaf - + + + + org.springframework.data + spring-data-releasetrain + Gosling-SR1 + pom + import + + + + + org.springframework.boot spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-data-jpa - - org.springframework.boot spring-boot-starter-actuator @@ -77,28 +79,13 @@ org.springframework.boot spring-boot-starter-mail - - org.subethamail - subethasmtp - 3.1.7 - test - - + org.webjars bootstrap 3.3.4 - - org.webjars - jquery - 2.1.4 - - - org.springframework.data - spring-data-jpa - 1.10.2.RELEASE - + com.amazonaws aws-java-sdk-dynamodb @@ -108,7 +95,12 @@ com.github.derjust spring-data-dynamodb 4.3.1 - + + + org.apache.httpcomponents + httpclient + 4.5.2 + diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/Application.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/Application.java new file mode 100644 index 0000000000..f5e0e98fd4 --- /dev/null +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/Application.java @@ -0,0 +1,13 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; + +@SpringBootApplication +@ComponentScan(basePackages = { "com.baeldung" }) +public class Application { + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java index f98292ea06..4bc8a128bc 100644 --- a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/config/DynamoDBConfig.java @@ -1,18 +1,17 @@ package com.baeldung.spring.data.es.config; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.util.StringUtils; - import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicAWSCredentials; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient; +import org.socialsignin.spring.data.dynamodb.repository.config.EnableDynamoDBRepositories; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.StringUtils; @Configuration -@ComponentScan(basePackages = { "com.baeldung.spring.data.es" }) +@EnableDynamoDBRepositories(basePackages = "com.baeldung.spring.data.es.repositories") public class DynamoDBConfig { @Value("${amazon.dynamodb.endpoint}") diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/model/ProductInfo.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/model/ProductInfo.java index 4c97d14045..3e75c9e6f2 100644 --- a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/model/ProductInfo.java +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/model/ProductInfo.java @@ -3,7 +3,9 @@ package com.baeldung.spring.data.es.model; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAutoGeneratedKey; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; +@DynamoDBTable(tableName = "ProductInfo") public class ProductInfo { private String id; private String msrp; diff --git a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repository/ProductInfoRepository.java b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repositories/ProductInfoRepository.java similarity index 87% rename from spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repository/ProductInfoRepository.java rename to spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repositories/ProductInfoRepository.java index a30ff1c4aa..c5eee49634 100644 --- a/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repository/ProductInfoRepository.java +++ b/spring-boot-data-dynamodb/src/main/java/com/baeldung/spring/data/es/repositories/ProductInfoRepository.java @@ -1,14 +1,12 @@ -package com.baeldung.spring.data.es.repository; - -import java.util.List; +package com.baeldung.spring.data.es.repositories; +import com.baeldung.spring.data.es.model.ProductInfo; import org.socialsignin.spring.data.dynamodb.repository.EnableScan; import org.springframework.data.repository.CrudRepository; -import com.baeldung.spring.data.es.model.ProductInfo; +import java.util.List; @EnableScan public interface ProductInfoRepository extends CrudRepository { - List findById(String id); } diff --git a/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java b/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java deleted file mode 100644 index aae0c427a9..0000000000 --- a/spring-boot-data-dynamodb/src/main/java/org/baeldung/Application.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.baeldung; - -import org.springframework.boot.SpringApplication; -import org.springframework.context.ApplicationContext; - -@org.springframework.boot.autoconfigure.SpringBootApplication -public class Application { - private static ApplicationContext applicationContext; - - public static void main(String[] args) { - applicationContext = SpringApplication.run(Application.class, args); - } -} diff --git a/spring-boot-data-dynamodb/src/main/resources/application.properties b/spring-boot-data-dynamodb/src/main/resources/application.properties index fb5c8e2da0..e6911bc9e7 100644 --- a/spring-boot-data-dynamodb/src/main/resources/application.properties +++ b/spring-boot-data-dynamodb/src/main/resources/application.properties @@ -24,4 +24,9 @@ security.user.name=admin1 security.user.password=secret1 management.security.role=SUPERUSER -logging.level.org.springframework=INFO \ No newline at end of file +logging.level.org.springframework=INFO + +#AWS Keys +amazon.dynamodb.endpoint=http://localhost:8000/ +amazon.aws.accesskey=test1 +amazon.aws.secretkey=test1 \ No newline at end of file diff --git a/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java index 2421505acd..73ce60e79a 100644 --- a/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java +++ b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java @@ -1,15 +1,22 @@ package com.baeldung.spring.data.es.repository; -import static org.junit.Assert.assertTrue; - -import java.util.List; - -import org.baeldung.Application; +import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; +import com.amazonaws.services.dynamodbv2.document.Table; +import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; +import com.amazonaws.services.dynamodbv2.model.CreateTableResult; +import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; +import com.amazonaws.services.dynamodbv2.model.ResourceInUseException; +import com.baeldung.Application; +import com.baeldung.spring.data.es.config.DynamoDBConfig; +import com.baeldung.spring.data.es.model.ProductInfo; +import com.baeldung.spring.data.es.repositories.ProductInfoRepository; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.ActiveProfiles; @@ -17,17 +24,12 @@ import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; -import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; -import com.amazonaws.services.dynamodbv2.document.DynamoDB; -import com.amazonaws.services.dynamodbv2.document.Table; -import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; -import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; -import com.amazonaws.services.dynamodbv2.model.ResourceInUseException; -import com.baeldung.spring.data.es.model.ProductInfo; +import java.util.List; + +import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = Application.class) +@SpringApplicationConfiguration(classes = {Application.class, DynamoDBConfig.class, PropertyPlaceholderAutoConfiguration.class}) @WebAppConfiguration @IntegrationTest @ActiveProfiles("local") @@ -36,48 +38,41 @@ public class ProductInfoRepositoryIntegrationTest { private DynamoDBMapper dynamoDBMapper; - @Autowired - private DynamoDB dynamoDB; - @Autowired private AmazonDynamoDB amazonDynamoDB; @Autowired - ProductInfoRepository ProductInfoRepository; + ProductInfoRepository repository; private static final String EXPECTED_COST = "20"; private static final String EXPECTED_PRICE = "50"; - @BeforeClass - @Ignore - public static void setUp() throws Exception { + @Before + public void setup() throws Exception { try { dynamoDBMapper = new DynamoDBMapper(amazonDynamoDB); - CreateTableRequest tableRequest = dynamoDBMapper.generateCreateTableRequest(ProductInfo.class); // 1 + CreateTableRequest tableRequest = dynamoDBMapper.generateCreateTableRequest(ProductInfo.class); - tableRequest.setProvisionedThroughput(new ProvisionedThroughput(1L, 1L)); // 2 + tableRequest.setProvisionedThroughput(new ProvisionedThroughput(1L, 1L)); - Table table = dynamoDB.createTable(tableRequest); // 3 - - table.waitForActive(); // 4 + amazonDynamoDB.createTable(tableRequest); } catch (ResourceInUseException e) { // Do nothing, table already created } // TODO How to handle different environments. i.e. AVOID deleting all entries in ProductInfoion table - dynamoDBMapper.batchDelete((List) ProductInfoRepository.findAll()); + dynamoDBMapper.batchDelete((List) repository.findAll()); } - @Ignore @Test public void givenItemWithExpectedCost_whenRunFindAll_thenItemIsFound() { ProductInfo productInfo = new ProductInfo(EXPECTED_COST, EXPECTED_PRICE); - ProductInfoRepository.save(productInfo); + repository.save(productInfo); - List result = (List) ProductInfoRepository.findAll(); + List result = (List) repository.findAll(); assertTrue("Not empty", result.size() > 0); assertTrue("Contains item with expected cost", result.get(0).getCost().equals(EXPECTED_COST)); } From 5444f7c1dfa26336ef68a5e1fa3a56bc7a165166 Mon Sep 17 00:00:00 2001 From: Chris Anatalio Date: Fri, 21 Oct 2016 16:48:16 -0700 Subject: [PATCH 228/309] BAEL-223: Clean up imports and annotations --- .../repository/ProductInfoRepositoryIntegrationTest.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java index 73ce60e79a..df727cf727 100644 --- a/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java +++ b/spring-boot-data-dynamodb/src/test/java/com/baeldung/spring/data/es/repository/ProductInfoRepositoryIntegrationTest.java @@ -2,21 +2,16 @@ package com.baeldung.spring.data.es.repository; import com.amazonaws.services.dynamodbv2.AmazonDynamoDB; import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; -import com.amazonaws.services.dynamodbv2.document.Table; import com.amazonaws.services.dynamodbv2.model.CreateTableRequest; -import com.amazonaws.services.dynamodbv2.model.CreateTableResult; import com.amazonaws.services.dynamodbv2.model.ProvisionedThroughput; import com.amazonaws.services.dynamodbv2.model.ResourceInUseException; import com.baeldung.Application; -import com.baeldung.spring.data.es.config.DynamoDBConfig; import com.baeldung.spring.data.es.model.ProductInfo; import com.baeldung.spring.data.es.repositories.ProductInfoRepository; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.test.context.ActiveProfiles; @@ -29,7 +24,7 @@ import java.util.List; import static org.junit.Assert.assertTrue; @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = {Application.class, DynamoDBConfig.class, PropertyPlaceholderAutoConfiguration.class}) +@SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @IntegrationTest @ActiveProfiles("local") From d55903a667e6d494c4dbdc9d68108bcd6dc9c695 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Sat, 22 Oct 2016 07:16:14 +0200 Subject: [PATCH 229/309] BAEL-276 - URL encoding --- .../encoderdecoder/EncoderDecoder.java | 72 +++++++++++++++---- 1 file changed, 59 insertions(+), 13 deletions(-) diff --git a/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java b/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java index 62d2663994..208a23eb91 100644 --- a/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java +++ b/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java @@ -3,36 +3,82 @@ package com.baeldung.encoderdecoder; import org.hamcrest.CoreMatchers; import org.junit.Assert; import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; import java.net.URLDecoder; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; public class EncoderDecoder { - @Test - public void givenPlainURL_whenUsingUTF8EncodingScheme_thenEncodeURL() throws UnsupportedEncodingException { - String plainURL = "http://www.baeldung.com" ; - String encodedURL = URLEncoder.encode(plainURL, StandardCharsets.UTF_8.toString()); + private static final String URL = "http://www.baeldung.com?key1=value+1&key2=value%40%21%242&key3=value%253"; + private static final Logger LOGGER = LoggerFactory.getLogger(EncoderDecoder.class); - Assert.assertThat("http%3A%2F%2Fwww.baeldung.com", CoreMatchers.is(encodedURL)); + private String encodeValue(String value) { + String encoded = null; + try { + encoded = URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error encoding parameter {}", e.getMessage(), e); + } + return encoded; + } + + + private String decode(String value) { + String decoded = null; + try { + decoded = URLDecoder.decode(value, StandardCharsets.UTF_8.toString()); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error encoding parameter {}", e.getMessage(), e); + } + return decoded; } @Test - public void givenEncodedURL_whenUsingUTF8EncodingScheme_thenDecodeURL() throws UnsupportedEncodingException { - String encodedURL = "http%3A%2F%2Fwww.baeldung.com" ; - String decodedURL = URLDecoder.decode(encodedURL, StandardCharsets.UTF_8.toString()); + public void givenURL_whenAnalyze_thenCorrect() throws Exception { + URL url = new URL(URL); - Assert.assertThat("http://www.baeldung.com", CoreMatchers.is(decodedURL)); + Assert.assertThat(url.getProtocol(), CoreMatchers.is("http")); + Assert.assertThat(url.getHost(), CoreMatchers.is("www.baeldung.com")); + Assert.assertThat(url.getQuery(), CoreMatchers.is("key1=value+1&key2=value%40%21%242&key3=value%253")); } @Test - public void givenEncodedURL_whenUsingWrongEncodingScheme_thenDecodeInvalidURL() throws UnsupportedEncodingException { - String encodedURL = "http%3A%2F%2Fwww.baeldung.com"; + public void givenRequestParam_whenUTF8Scheme_thenEncode() throws Exception { + Map requestParams = new HashMap<>(); + requestParams.put("key1", "value 1"); + requestParams.put("key2", "value@!$2"); + requestParams.put("key3", "value%3"); - String decodedURL = URLDecoder.decode(encodedURL, StandardCharsets.UTF_16.toString()); + String encodedQuery = requestParams.keySet().stream() + .map(key -> key + "=" + encodeValue(requestParams.get(key))) + .collect(Collectors.joining("&")); + String encodedURL = "http://www.baeldung.com?" + encodedQuery; - Assert.assertFalse("http://www.baeldung.com".equals(decodedURL)); + Assert.assertThat(URL, CoreMatchers.is(encodedURL)); } + + @Test + public void givenRequestParam_whenUTF8Scheme_thenDecodeRequestParams() throws Exception { + URL url = new URL(URL); + String query = url.getQuery(); + + String decodedQuery = Arrays.stream(query.split("&")) + .map(param -> param.split("=")[0] + "=" + decode(param.split("=")[1])) + .collect(Collectors.joining("&")); + + Assert.assertEquals( + "http://www.baeldung.com?key1=value 1&key2=value@!$2&key3=value%3", url.getProtocol() + "://" + url.getHost() + "?" + decodedQuery); + } + } From ac277fdc8a660904a47425f46156e3c2a3f64dbc Mon Sep 17 00:00:00 2001 From: Sandeep Kumar Date: Sat, 22 Oct 2016 10:51:53 +0530 Subject: [PATCH 230/309] Handling Optional as per orElseThrow criteria --- .../java/com/baeldung/selenium/SeleniumExample.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) 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 index 1007bf7503..ce60a1f638 100644 --- a/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java +++ b/selenium-junit-testng/src/main/java/com/baeldung/selenium/SeleniumExample.java @@ -1,6 +1,7 @@ package main.java.com.baeldung.selenium; import java.util.List; +import java.util.NoSuchElementException; import java.util.concurrent.TimeUnit; import org.openqa.selenium.By; @@ -28,16 +29,16 @@ public class SeleniumExample { return webDriver.getTitle(); } - public void getAboutBaeldungPage() { + public void getAboutBaeldungPage() throws Exception { closeOverlay(); clickAboutLink(); clickAboutUsLink(); } - private void closeOverlay() { + private void closeOverlay() throws Exception { List webElementList = webDriver.findElements(By.tagName("a")); - if (webElementList != null && !webElementList.isEmpty()) { - webElementList.stream().filter(webElement -> "Close".equalsIgnoreCase(webElement.getAttribute("title"))).findAny().get().click(); + if (webElementList != null && !webElementList.isEmpty() && webElementList.stream().filter(webElement -> "Close".equalsIgnoreCase(webElement.getAttribute("title"))).findAny().isPresent()) { + webElementList.stream().filter(webElement -> "Close".equalsIgnoreCase(webElement.getAttribute("title"))).findAny().orElseThrow(NoSuchElementException::new).click(); } } @@ -50,8 +51,6 @@ public class SeleniumExample { } public boolean isAuthorInformationAvailable() { - return webDriver - .findElement(By.xpath("//*[contains(text(), 'Eugen – an engineer')]")) - .isDisplayed(); + return webDriver.findElement(By.xpath("//*[contains(text(), 'Eugen – an engineer')]")).isDisplayed(); } } From 37ccb60f1d312e3de9049569e2d8c15c886fa3f7 Mon Sep 17 00:00:00 2001 From: ambrusadrianz Date: Sat, 22 Oct 2016 15:50:19 +0300 Subject: [PATCH 231/309] [BAEL-123] Created an example about custom AccessDecisionVoters in Spring Security. (#728) * Created an example about custom AccessDecisionVoters in Spring Security. * Added module in root pom file. * Added test cases --- pom.xml | 1 + spring-security-custom-voter/pom.xml | 96 +++++++++++++++++++ .../main/java/org/baeldung/Application.java | 12 +++ .../baeldung/security/MinuteBasedVoter.java | 38 ++++++++ .../baeldung/security/WebSecurityConfig.java | 69 +++++++++++++ .../baeldung/security/XmlSecurityConfig.java | 15 +++ .../main/java/org/baeldung/web/MvcConfig.java | 18 ++++ .../src/main/resources/spring-security.xml | 40 ++++++++ .../src/main/resources/templates/private.html | 10 ++ .../src/main/webapp/WEB-INF/web.xml | 47 +++++++++ .../test/java/org/baeldung/web/LiveTest.java | 42 ++++++++ 11 files changed, 388 insertions(+) create mode 100644 spring-security-custom-voter/pom.xml create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/Application.java create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java create mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java create mode 100644 spring-security-custom-voter/src/main/resources/spring-security.xml create mode 100644 spring-security-custom-voter/src/main/resources/templates/private.html create mode 100644 spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml create mode 100644 spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java diff --git a/pom.xml b/pom.xml index eee9f07ab9..9979ff95a5 100644 --- a/pom.xml +++ b/pom.xml @@ -107,6 +107,7 @@ spring-security-basic-auth spring-security-custom-permission + spring-security-custom-voter spring-security-mvc-custom spring-security-mvc-digest-auth spring-security-mvc-ldap diff --git a/spring-security-custom-voter/pom.xml b/spring-security-custom-voter/pom.xml new file mode 100644 index 0000000000..727efa48ab --- /dev/null +++ b/spring-security-custom-voter/pom.xml @@ -0,0 +1,96 @@ + + + 4.0.0 + + org.baeldung + spring-security-custom-voter + 0.0.1-SNAPSHOT + war + + spring-security-custom-voter + Custom AccessDecisionVoter with Spring Security + + + org.springframework.boot + spring-boot-starter-parent + 1.4.1.RELEASE + + + + + UTF-8 + UTF-8 + 3.0.1 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-security + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + junit + junit + test + + + + org.hamcrest + hamcrest-core + test + + + + org.hamcrest + hamcrest-library + test + + + + org.springframework + spring-test + 4.3.3.RELEASE + + + + org.springframework.security + spring-security-test + 4.1.3.RELEASE + test + + + + org.springframework.security + spring-security-web + 4.1.3.RELEASE + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/Application.java b/spring-security-custom-voter/src/main/java/org/baeldung/Application.java new file mode 100644 index 0000000000..a9d6f3b8b1 --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/Application.java @@ -0,0 +1,12 @@ +package org.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } +} diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java new file mode 100644 index 0000000000..8d22c52b0d --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java @@ -0,0 +1,38 @@ +package org.baeldung.security; + +import org.springframework.security.access.AccessDecisionVoter; +import org.springframework.security.access.ConfigAttribute; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.GrantedAuthority; + +import java.time.LocalDateTime; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +public class MinuteBasedVoter implements AccessDecisionVoter { + @Override + public boolean supports(ConfigAttribute attribute) { + return true; + } + + @Override + public boolean supports(Class clazz) { + return true; + } + + @Override + public int vote(Authentication authentication, Object object, Collection collection) { + List roles = authentication + .getAuthorities() + .stream().map(GrantedAuthority::getAuthority) + .collect(Collectors.toList()); + + for (String role: roles) { + if ("ROLE_USER".equals(role) && LocalDateTime.now().getMinute() % 2 != 0) { + return ACCESS_DENIED; + } + } + return ACCESS_ABSTAIN; + } +} diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java b/spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java new file mode 100644 index 0000000000..b3fb196424 --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java @@ -0,0 +1,69 @@ +package org.baeldung.security; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.access.AccessDecisionManager; +import org.springframework.security.access.AccessDecisionVoter; +import org.springframework.security.access.vote.AuthenticatedVoter; +import org.springframework.security.access.vote.RoleVoter; +import org.springframework.security.access.vote.UnanimousBased; +import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.access.expression.WebExpressionVoter; +import org.springframework.security.web.util.matcher.AntPathRequestMatcher; + +import java.util.Arrays; +import java.util.List; + +@Configuration +@EnableWebSecurity +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + @Autowired + public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { + // @formatter: off + auth.inMemoryAuthentication() + .withUser("user").password("pass").roles("USER") + .and() + .withUser("admin").password("pass").roles("ADMIN"); + // @formatter: on + } + + @Override + protected void configure(HttpSecurity http) throws Exception { + // @formatter: off + http + // needed so our login could work + .csrf() + .disable() + .authorizeRequests() + .anyRequest() + .authenticated() + .accessDecisionManager(accessDecisionManager()) + .antMatchers("/").hasAnyRole("ROLE_ADMIN", "ROLE_USER") + .and() + .formLogin() + .permitAll() + .and() + .logout() + .permitAll() + .deleteCookies("JSESSIONID") + .logoutSuccessUrl("/login"); + // @formatter: on + } + + @Bean + public AccessDecisionManager accessDecisionManager() { + // @formatter: off + List> decisionVoters = + Arrays.asList( + new WebExpressionVoter(), + new RoleVoter(), + new AuthenticatedVoter(), + new MinuteBasedVoter()); + // @formatter: on + return new UnanimousBased(decisionVoters); + } +} diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java b/spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java new file mode 100644 index 0000000000..45e095c66e --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java @@ -0,0 +1,15 @@ +package org.baeldung.security; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.ImportResource; + +/** + * Created by ambrusadrianz on 09/10/2016. + */ +@Configuration +//@ImportResource({"classpath:spring-security.xml"}) +public class XmlSecurityConfig { + public XmlSecurityConfig() { + super(); + } +} diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java b/spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java new file mode 100644 index 0000000000..5d38dca1ff --- /dev/null +++ b/spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java @@ -0,0 +1,18 @@ +package org.baeldung.web; + +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +/** + * Created by ambrusadrianz on 30/09/2016. + */ + +@Configuration +public class MvcConfig extends WebMvcConfigurerAdapter { + @Override + public void addViewControllers(ViewControllerRegistry registry) { + registry.addViewController("/").setViewName("private"); + } +} diff --git a/spring-security-custom-voter/src/main/resources/spring-security.xml b/spring-security-custom-voter/src/main/resources/spring-security.xml new file mode 100644 index 0000000000..117638289e --- /dev/null +++ b/spring-security-custom-voter/src/main/resources/spring-security.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-security-custom-voter/src/main/resources/templates/private.html b/spring-security-custom-voter/src/main/resources/templates/private.html new file mode 100644 index 0000000000..5af8c7a13e --- /dev/null +++ b/spring-security-custom-voter/src/main/resources/templates/private.html @@ -0,0 +1,10 @@ + + + + Private + + +

    Congrats!

    + + \ No newline at end of file diff --git a/spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml b/spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..d69bce35ae --- /dev/null +++ b/spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,47 @@ + + + + Spring Secured Application + + + + mvc + org.springframework.web.servlet.DispatcherServlet + 1 + + + mvc + / + + + + contextClass + + org.springframework.web.context.support.AnnotationConfigWebApplicationContext + + + + contextConfigLocation + org.baeldung.spring.web.config + + + + org.springframework.web.context.ContextLoaderListener + + + + + + springSecurityFilterChain + org.springframework.web.filter.DelegatingFilterProxy + + + springSecurityFilterChain + /* + + + \ No newline at end of file diff --git a/spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java b/spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java new file mode 100644 index 0000000000..3ddeab5920 --- /dev/null +++ b/spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java @@ -0,0 +1,42 @@ +package org.baeldung.web; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +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.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin; +import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; +import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated; +import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @WebAppConfiguration @SpringBootTest public class LiveTest { + @Autowired private WebApplicationContext context; + + private MockMvc mvc; + + @Before public void setup() { + mvc = MockMvcBuilders.webAppContextSetup(context).apply(springSecurity()).build(); + } + + @Test public void givenUnauthenticatedUser_whenAccessingMainPage_thenRedirect() throws Exception { + mvc.perform(get("/")).andExpect(status().is3xxRedirection()); + } + + @Test public void givenValidUsernameAndPassword_whenLogin_thenOK() throws Exception { + mvc.perform(formLogin("/login").user("user").password("pass")).andExpect(authenticated()); + } + + @Test public void givenAuthenticatedAdmin_whenAccessingMainPage_thenOK() throws Exception { + mvc.perform(get("/").with(user("admin").password("pass").roles("ADMIN"))).andExpect(status().isOk()); + } +} From 18dfed06d0c68fe46eeffc0d7730a64d49d76f75 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 22 Oct 2016 15:08:10 +0200 Subject: [PATCH 232/309] add integration test profile --- jjwt/pom.xml | 49 +++++++++++++++++-- ...va => DemoApplicationIntegrationTest.java} | 2 +- 2 files changed, 47 insertions(+), 4 deletions(-) rename jjwt/src/test/java/io/jsonwebtoken/jjwtfun/{DemoApplicationTests.java => DemoApplicationIntegrationTest.java} (91%) diff --git a/jjwt/pom.xml b/jjwt/pom.xml index 24f1c5c5ab..d2a3f1cdd8 100644 --- a/jjwt/pom.xml +++ b/jjwt/pom.xml @@ -58,8 +58,51 @@ org.springframework.boot spring-boot-maven-plugin + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + -
    - - +
    + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java b/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationIntegrationTest.java similarity index 91% rename from jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java rename to jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationIntegrationTest.java index 82138ea23e..df147232d9 100644 --- a/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java +++ b/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationIntegrationTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = JJWTFunApplication.class) @WebAppConfiguration -public class DemoApplicationTests { +public class DemoApplicationIntegrationTest { @Test public void contextLoads() { From d60874a90d873b334f46c7d08190fb3d941c0387 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 22 Oct 2016 17:01:45 +0200 Subject: [PATCH 233/309] add integration test profile --- java-cassandra/pom.xml | 49 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/java-cassandra/pom.xml b/java-cassandra/pom.xml index a91c3b9b62..92d3a8ede6 100644 --- a/java-cassandra/pom.xml +++ b/java-cassandra/pom.xml @@ -76,8 +76,54 @@ 1.8 + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + - + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + UTF-8 @@ -97,6 +143,7 @@ 3.5.1 + 2.19.1 3.1.0 From 5c7d521402e858d532255ce506b628f447705c13 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 22 Oct 2016 17:07:54 +0200 Subject: [PATCH 234/309] add integration test profile --- hystrix/pom.xml | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/hystrix/pom.xml b/hystrix/pom.xml index 42828e1c97..54c17f1487 100644 --- a/hystrix/pom.xml +++ b/hystrix/pom.xml @@ -112,9 +112,54 @@ 1.8 + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + - - + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + From c9b956e9b949561ee557b7a8b886b3411568f4da Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 22 Oct 2016 17:21:26 +0200 Subject: [PATCH 235/309] add integration test profile --- dependency-injection/pom.xml | 42 +++++++++++++++++-- ...ava => FieldAutowiredIntegrationTest.java} | 2 +- ...=> FieldAutowiredNameIntegrationTest.java} | 2 +- ...eldQualifierAutowiredIntegrationTest.java} | 2 +- ... => FieldByNameInjectIntegrationTest.java} | 2 +- ...t.java => FieldInjectIntegrationTest.java} | 2 +- ... FieldQualifierInjectIntegrationTest.java} | 2 +- ...ieldResourceInjectionIntegrationTest.java} | 2 +- ...odByQualifierResourceIntegrationTest.java} | 2 +- ... MethodByTypeResourceIntegrationTest.java} | 2 +- ...thodResourceInjectionIntegrationTest.java} | 2 +- ...java => NamedResourceIntegrationTest.java} | 2 +- ...fierResourceInjectionIntegrationTest.java} | 2 +- ...tterResourceInjectionIntegrationTest.java} | 2 +- 14 files changed, 52 insertions(+), 16 deletions(-) rename dependency-injection/src/test/java/com/baeldung/autowired/{FieldAutowiredTest.java => FieldAutowiredIntegrationTest.java} (95%) rename dependency-injection/src/test/java/com/baeldung/autowired/{FieldAutowiredNameTest.java => FieldAutowiredNameIntegrationTest.java} (95%) rename dependency-injection/src/test/java/com/baeldung/autowired/{FieldQualifierAutowiredTest.java => FieldQualifierAutowiredIntegrationTest.java} (96%) rename dependency-injection/src/test/java/com/baeldung/inject/{FieldByNameInjectTest.java => FieldByNameInjectIntegrationTest.java} (95%) rename dependency-injection/src/test/java/com/baeldung/inject/{FieldInjectTest.java => FieldInjectIntegrationTest.java} (95%) rename dependency-injection/src/test/java/com/baeldung/inject/{FieldQualifierInjectTest.java => FieldQualifierInjectIntegrationTest.java} (96%) rename dependency-injection/src/test/java/com/baeldung/resource/{FieldResourceInjectionTest.java => FieldResourceInjectionIntegrationTest.java} (94%) rename dependency-injection/src/test/java/com/baeldung/resource/{MethodByQualifierResourceTest.java => MethodByQualifierResourceIntegrationTest.java} (96%) rename dependency-injection/src/test/java/com/baeldung/resource/{MethodByTypeResourceTest.java => MethodByTypeResourceIntegrationTest.java} (95%) rename dependency-injection/src/test/java/com/baeldung/resource/{MethodResourceInjectionTest.java => MethodResourceInjectionIntegrationTest.java} (95%) rename dependency-injection/src/test/java/com/baeldung/resource/{NamedResourceTest.java => NamedResourceIntegrationTest.java} (95%) rename dependency-injection/src/test/java/com/baeldung/resource/{QualifierResourceInjectionTest.java => QualifierResourceInjectionIntegrationTest.java} (95%) rename dependency-injection/src/test/java/com/baeldung/resource/{SetterResourceInjectionTest.java => SetterResourceInjectionIntegrationTest.java} (95%) diff --git a/dependency-injection/pom.xml b/dependency-injection/pom.xml index 9e78a66ad6..9b94ba7b35 100644 --- a/dependency-injection/pom.xml +++ b/dependency-injection/pom.xml @@ -66,9 +66,10 @@ org.apache.maven.plugins maven-surefire-plugin - - **/*Test.java - + + **/*IntegrationTest.java + **/*LiveTest.java + @@ -85,6 +86,41 @@ + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + + 2.6 diff --git a/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredTest.java b/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java similarity index 95% rename from dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredTest.java rename to dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java index b736871f85..a78799f1d9 100644 --- a/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredTest.java +++ b/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java @@ -16,7 +16,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestAutowiredType.class) -public class FieldAutowiredTest { +public class FieldAutowiredIntegrationTest { @Autowired private ArbitraryDependency fieldDependency; diff --git a/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameTest.java b/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java similarity index 95% rename from dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameTest.java rename to dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java index cbdac68543..8f09e73c33 100644 --- a/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameTest.java +++ b/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java @@ -16,7 +16,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestAutowiredName.class) -public class FieldAutowiredNameTest { +public class FieldAutowiredNameIntegrationTest { @Autowired private ArbitraryDependency autowiredFieldDependency; diff --git a/dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredTest.java b/dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java similarity index 96% rename from dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredTest.java rename to dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java index cbc3d56f67..01317aef6f 100644 --- a/dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredTest.java +++ b/dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestAutowiredQualifier.class) -public class FieldQualifierAutowiredTest { +public class FieldQualifierAutowiredIntegrationTest { @Autowired @Qualifier("autowiredFieldDependency") diff --git a/dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectTest.java b/dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java similarity index 95% rename from dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectTest.java rename to dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java index 665c9f1ddc..f5897febab 100644 --- a/dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectTest.java +++ b/dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestInjectName.class) -public class FieldByNameInjectTest { +public class FieldByNameInjectIntegrationTest { @Inject @Named("yetAnotherFieldInjectDependency") diff --git a/dependency-injection/src/test/java/com/baeldung/inject/FieldInjectTest.java b/dependency-injection/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java similarity index 95% rename from dependency-injection/src/test/java/com/baeldung/inject/FieldInjectTest.java rename to dependency-injection/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java index 7561c39e76..45b7c8015c 100644 --- a/dependency-injection/src/test/java/com/baeldung/inject/FieldInjectTest.java +++ b/dependency-injection/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestInjectType.class) -public class FieldInjectTest { +public class FieldInjectIntegrationTest { @Inject private ArbitraryDependency fieldInjectDependency; diff --git a/dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectTest.java b/dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java similarity index 96% rename from dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectTest.java rename to dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java index 7e5f7e7453..0fd6a0e4c1 100644 --- a/dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectTest.java +++ b/dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestInjectQualifier.class) -public class FieldQualifierInjectTest { +public class FieldQualifierInjectIntegrationTest { @Inject @Qualifier("defaultFile") diff --git a/dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionTest.java b/dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java similarity index 94% rename from dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionTest.java rename to dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java index ef7e7b0aeb..63a25cb499 100644 --- a/dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionTest.java +++ b/dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestResourceNameType.class) -public class FieldResourceInjectionTest { +public class FieldResourceInjectionIntegrationTest { @Resource(name = "namedFile") private File defaultFile; diff --git a/dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceTest.java b/dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java similarity index 96% rename from dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceTest.java rename to dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java index 95e9fc0bd5..f5bb9f10cf 100644 --- a/dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceTest.java +++ b/dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestResourceQualifier.class) -public class MethodByQualifierResourceTest { +public class MethodByQualifierResourceIntegrationTest { private File arbDependency; private File anotherArbDependency; diff --git a/dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceTest.java b/dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java similarity index 95% rename from dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceTest.java rename to dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java index ad9a9a4fb6..171cbfea47 100644 --- a/dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceTest.java +++ b/dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestResourceNameType.class) -public class MethodByTypeResourceTest { +public class MethodByTypeResourceIntegrationTest { private File defaultFile; diff --git a/dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionTest.java b/dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java similarity index 95% rename from dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionTest.java rename to dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java index 1622d8896c..2e1c3c39a9 100644 --- a/dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionTest.java +++ b/dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java @@ -17,7 +17,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestResourceNameType.class) -public class MethodResourceInjectionTest { +public class MethodResourceInjectionIntegrationTest { private File defaultFile; diff --git a/dependency-injection/src/test/java/com/baeldung/resource/NamedResourceTest.java b/dependency-injection/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java similarity index 95% rename from dependency-injection/src/test/java/com/baeldung/resource/NamedResourceTest.java rename to dependency-injection/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java index da104ecaae..d52660e9b8 100644 --- a/dependency-injection/src/test/java/com/baeldung/resource/NamedResourceTest.java +++ b/dependency-injection/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java @@ -16,7 +16,7 @@ import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestResourceNameType.class) -public class NamedResourceTest { +public class NamedResourceIntegrationTest { @Resource(name = "namedFile") private File testFile; diff --git a/dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionTest.java b/dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java similarity index 95% rename from dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionTest.java rename to dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java index 024c8e2bbe..3f812350c9 100644 --- a/dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionTest.java +++ b/dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java @@ -18,7 +18,7 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestResourceQualifier.class) -public class QualifierResourceInjectionTest { +public class QualifierResourceInjectionIntegrationTest { @Resource @Qualifier("defaultFile") diff --git a/dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionTest.java b/dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java similarity index 95% rename from dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionTest.java rename to dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java index aa7cfda975..ae13b2336a 100644 --- a/dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionTest.java +++ b/dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java @@ -16,7 +16,7 @@ import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = ApplicationContextTestResourceNameType.class) -public class SetterResourceInjectionTest { +public class SetterResourceInjectionIntegrationTest { private File defaultFile; From d8c4b20e71201d04e03f3dd6600342f391d2ec7f Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 22 Oct 2016 19:27:31 +0200 Subject: [PATCH 236/309] add integration test profile --- cdi/pom.xml | 52 +++++++++++++++++++ ... => SpringInterceptorIntegrationTest.java} | 2 +- 2 files changed, 53 insertions(+), 1 deletion(-) rename cdi/src/test/java/com/baeldung/test/{TestSpringInterceptor.java => SpringInterceptorIntegrationTest.java} (95%) diff --git a/cdi/pom.xml b/cdi/pom.xml index b771857938..30dd167fa8 100644 --- a/cdi/pom.xml +++ b/cdi/pom.xml @@ -45,8 +45,60 @@ + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + 4.3.1.RELEASE + 2.19.1 \ No newline at end of file diff --git a/cdi/src/test/java/com/baeldung/test/TestSpringInterceptor.java b/cdi/src/test/java/com/baeldung/test/SpringInterceptorIntegrationTest.java similarity index 95% rename from cdi/src/test/java/com/baeldung/test/TestSpringInterceptor.java rename to cdi/src/test/java/com/baeldung/test/SpringInterceptorIntegrationTest.java index 1f3a8d83e3..cffa2256ca 100644 --- a/cdi/src/test/java/com/baeldung/test/TestSpringInterceptor.java +++ b/cdi/src/test/java/com/baeldung/test/SpringInterceptorIntegrationTest.java @@ -16,7 +16,7 @@ import com.baeldung.spring.service.SpringSuperService; @RunWith(SpringRunner.class) @ContextConfiguration(classes = { AppConfig.class }) -public class TestSpringInterceptor { +public class SpringInterceptorIntegrationTest { @Autowired SpringSuperService springSuperService; From 366914a25ead8352c66290acd6047e6a6524b2d4 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sat, 22 Oct 2016 20:22:23 +0200 Subject: [PATCH 237/309] Fix Screenshot Test --- .../src/test/java/com/baeldung/printscreen/ScreenshotTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java index 895f514f4a..7e35fc3e30 100644 --- a/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java +++ b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java @@ -10,7 +10,7 @@ import static org.junit.Assert.assertTrue; public class ScreenshotTest { - private Screenshot screenshot = new Screenshot("", "Screenshot", "jpg"); + private Screenshot screenshot = new Screenshot("Screenshot.jpg"); private File file = new File("Screenshot.jpg"); @Test From b018c6ca3b38994c7b01a4f362d0d634536ea620 Mon Sep 17 00:00:00 2001 From: Nancy Bosecker Date: Sat, 22 Oct 2016 22:47:44 -0700 Subject: [PATCH 238/309] Fixed http ssl apache 4.4 test, moved from Sandbox to Live class (#764) * Moved project to core-java from eclipse folder * Fixed http ssl test, moved from Sandbox to Live. --- .../httpclient/HttpsClientSslLiveTest.java | 31 ++++++++++++++++++- .../base/HttpClientSandboxLiveTest.java | 11 ------- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java index 952ce3af25..34f99b9fb6 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java @@ -1,10 +1,12 @@ package org.baeldung.httpclient; -import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; import java.io.IOException; import java.security.GeneralSecurityException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; import java.security.cert.X509Certificate; import javax.net.ssl.SSLContext; @@ -16,6 +18,7 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; +import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLContextBuilder; import org.apache.http.conn.ssl.SSLContexts; @@ -108,4 +111,30 @@ public class HttpsClientSslLiveTest { assertThat(response.getStatusLine().getStatusCode(), equalTo(200)); } + @Test + public final void givenIgnoringCertificates_whenHttpsUrlIsConsumed_thenCorrect() throws ClientProtocolException, IOException { + + TrustStrategy acceptingTrustStrategy = new TrustStrategy() { + @Override + public boolean isTrusted(X509Certificate[] certificate, String authType) { + return true; + } + }; + + SSLContext sslContext = null; + try { + sslContext = new SSLContextBuilder().loadTrustMaterial(null, acceptingTrustStrategy).build(); + + } catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) { + e.printStackTrace(); + } + + CloseableHttpClient client = HttpClients.custom().setSSLContext(sslContext).setSSLHostnameVerifier(new NoopHostnameVerifier()).build(); + final HttpGet httpGet = new HttpGet("https://sesar3.geoinfogeochem.org/sample/igsn/ODP000002"); + httpGet.setHeader("Accept", "application/xml"); + + final HttpResponse response = client.execute(httpGet); + assertThat(response.getStatusLine().getStatusCode(), equalTo(200)); + } + } diff --git a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java index 2333e2f8c9..ce4057aa6d 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java @@ -59,15 +59,4 @@ public class HttpClientSandboxLiveTest { System.out.println(response.getStatusLine()); } - - @Test - public final void givenIgnoringCertificates_whenHttpsUrlIsConsumed_thenCorrect() throws ClientProtocolException, IOException { - final CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier()).build(); - - final HttpGet httpGet = new HttpGet("https://sesar3.geoinfogeochem.org/sample/igsn/ODP000002"); - httpGet.setHeader("Accept", "application/xml"); - - response = httpClient.execute(httpGet); - } - } From d0a376e6226b9658003d59ac0eb0872f7fdd457b Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 07:54:09 +0200 Subject: [PATCH 239/309] Refactor HttpClient test --- .../httpclient/HttpsClientSslLiveTest.java | 57 ++++++------------- .../httpclient/base/HttpClientLiveTest.java | 25 ++++---- .../base/HttpClientSandboxLiveTest.java | 11 ++-- 3 files changed, 33 insertions(+), 60 deletions(-) diff --git a/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java index 34f99b9fb6..66b4f5cff4 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/HttpsClientSslLiveTest.java @@ -1,30 +1,11 @@ package org.baeldung.httpclient; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.security.GeneralSecurityException; -import java.security.KeyManagementException; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.cert.X509Certificate; - -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLException; - import org.apache.http.HttpResponse; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; -import org.apache.http.conn.ssl.NoopHostnameVerifier; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.conn.ssl.SSLContextBuilder; -import org.apache.http.conn.ssl.SSLContexts; -import org.apache.http.conn.ssl.SSLSocketFactory; -import org.apache.http.conn.ssl.TrustSelfSignedStrategy; -import org.apache.http.conn.ssl.TrustStrategy; +import org.apache.http.conn.ssl.*; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClientBuilder; @@ -32,6 +13,17 @@ import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.junit.Test; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLException; +import java.io.IOException; +import java.security.GeneralSecurityException; +import java.security.KeyManagementException; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertThat; + /** * This test requires a localhost server over HTTPS
    * It should only be manually run, not part of the automated build @@ -45,7 +37,7 @@ public class HttpsClientSslLiveTest { // tests @Test(expected = SSLException.class) - public final void whenHttpsUrlIsConsumed_thenException() throws ClientProtocolException, IOException { + public final void whenHttpsUrlIsConsumed_thenException() throws IOException { final CloseableHttpClient httpClient = HttpClientBuilder.create().build(); final HttpGet getMethod = new HttpGet(HOST_WITH_SSL); @@ -56,12 +48,7 @@ public class HttpsClientSslLiveTest { @SuppressWarnings("deprecation") @Test public final void givenHttpClientPre4_3_whenAcceptingAllCertificates_thenCanConsumeHttpsUriWithSelfSignedCertificate() throws IOException, GeneralSecurityException { - final TrustStrategy acceptingTrustStrategy = new TrustStrategy() { - @Override - public final boolean isTrusted(final X509Certificate[] certificate, final String authType) { - return true; - } - }; + final TrustStrategy acceptingTrustStrategy = (certificate, authType) -> true; final SSLSocketFactory sf = new SSLSocketFactory(acceptingTrustStrategy, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); final SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("https", 443, sf)); @@ -78,12 +65,7 @@ public class HttpsClientSslLiveTest { @Test public final void givenHttpClientAfter4_3_whenAcceptingAllCertificates_thenCanConsumeHttpsUriWithSelfSignedCertificate() throws IOException, GeneralSecurityException { - final TrustStrategy acceptingTrustStrategy = new TrustStrategy() { - @Override - public final boolean isTrusted(final X509Certificate[] certificate, final String authType) { - return true; - } - }; + final TrustStrategy acceptingTrustStrategy = (certificate, authType) -> true; final SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build(); final SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); @@ -112,14 +94,9 @@ public class HttpsClientSslLiveTest { } @Test - public final void givenIgnoringCertificates_whenHttpsUrlIsConsumed_thenCorrect() throws ClientProtocolException, IOException { + public final void givenIgnoringCertificates_whenHttpsUrlIsConsumed_thenCorrect() throws IOException { - TrustStrategy acceptingTrustStrategy = new TrustStrategy() { - @Override - public boolean isTrusted(X509Certificate[] certificate, String authType) { - return true; - } - }; + TrustStrategy acceptingTrustStrategy = (certificate, authType) -> true; SSLContext sslContext = null; try { diff --git a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientLiveTest.java index 23c1fdf430..878d220f67 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientLiveTest.java @@ -1,16 +1,8 @@ package org.baeldung.httpclient.base; -import static org.hamcrest.Matchers.emptyArray; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertThat; - -import java.io.IOException; -import java.io.InputStream; - import org.apache.http.Header; import org.apache.http.HttpEntity; import org.apache.http.HttpHeaders; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; @@ -23,6 +15,13 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.io.IOException; +import java.io.InputStream; + +import static org.hamcrest.Matchers.emptyArray; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertThat; + public class HttpClientLiveTest { private static final String SAMPLE_URL = "http://www.github.com"; @@ -56,7 +55,7 @@ public class HttpClientLiveTest { // tests @Test(expected = ConnectTimeoutException.class) - public final void givenLowTimeout_whenExecutingRequestWithTimeout_thenException() throws ClientProtocolException, IOException { + public final void givenLowTimeout_whenExecutingRequestWithTimeout_thenException() throws IOException { final RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(50).setConnectTimeout(50).setSocketTimeout(20).build(); final HttpGet request = new HttpGet(SAMPLE_URL); request.setConfig(requestConfig); @@ -66,20 +65,20 @@ public class HttpClientLiveTest { // tests - configs @Test - public final void givenHttpClientIsConfiguredWithCustomConnectionManager_whenExecutingRequest_thenNoExceptions() throws ClientProtocolException, IOException { + public final void givenHttpClientIsConfiguredWithCustomConnectionManager_whenExecutingRequest_thenNoExceptions() throws IOException { instance = HttpClientBuilder.create().setConnectionManager(new BasicHttpClientConnectionManager()).build(); response = instance.execute(new HttpGet(SAMPLE_URL)); } @Test - public final void givenCustomHeaderIsSet_whenSendingRequest_thenNoExceptions() throws ClientProtocolException, IOException { + public final void givenCustomHeaderIsSet_whenSendingRequest_thenNoExceptions() throws IOException { final HttpGet request = new HttpGet(SAMPLE_URL); request.addHeader(HttpHeaders.ACCEPT, "application/xml"); response = instance.execute(request); } @Test - public final void givenRequestWasSet_whenAnalyzingTheHeadersOfTheResponse_thenCorrect() throws ClientProtocolException, IOException { + public final void givenRequestWasSet_whenAnalyzingTheHeadersOfTheResponse_thenCorrect() throws IOException { response = instance.execute(new HttpGet(SAMPLE_URL)); final Header[] headers = response.getHeaders(HttpHeaders.CONTENT_TYPE); @@ -89,7 +88,7 @@ public class HttpClientLiveTest { // tests - cancel request @Test - public final void whenRequestIsCanceled_thenCorrect() throws ClientProtocolException, IOException { + public final void whenRequestIsCanceled_thenCorrect() throws IOException { instance = HttpClients.custom().build(); final HttpGet request = new HttpGet(SAMPLE_URL); response = instance.execute(request); diff --git a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java index ce4057aa6d..c82022eb3f 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java @@ -1,23 +1,20 @@ package org.baeldung.httpclient.base; -import java.io.IOException; -import java.io.InputStream; - import org.apache.http.HttpEntity; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; -import org.apache.http.client.ClientProtocolException; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; -import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; -import org.apache.http.impl.client.HttpClients; import org.junit.After; import org.junit.Test; +import java.io.IOException; +import java.io.InputStream; + public class HttpClientSandboxLiveTest { private CloseableHttpClient client; @@ -47,7 +44,7 @@ public class HttpClientSandboxLiveTest { // simple request - response @Test - public final void givenGetRequestExecuted_whenAnalyzingTheResponse_thenCorrectStatusCode() throws ClientProtocolException, IOException { + public final void givenGetRequestExecuted_whenAnalyzingTheResponse_thenCorrectStatusCode() throws IOException { final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); final AuthScope authscp = new AuthScope("localhost", 8080); credentialsProvider.setCredentials(authscp, new UsernamePasswordCredentials("user1", "user1Pass")); From bfddf3344d5f65342c2cbbc8871c925f678ca6f4 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 07:55:07 +0200 Subject: [PATCH 240/309] Refactor LiveTest --- .../base/HttpClientSandboxLiveTest.java | 36 ++++++------------- 1 file changed, 10 insertions(+), 26 deletions(-) diff --git a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java index c82022eb3f..22b32e7ef5 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/base/HttpClientSandboxLiveTest.java @@ -9,7 +9,6 @@ import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; -import org.junit.After; import org.junit.Test; import java.io.IOException; @@ -17,15 +16,18 @@ import java.io.InputStream; public class HttpClientSandboxLiveTest { - private CloseableHttpClient client; + @Test + public final void givenGetRequestExecuted_whenAnalyzingTheResponse_thenCorrectStatusCode() throws IOException { + final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); + final AuthScope authscp = new AuthScope("localhost", 8080); + credentialsProvider.setCredentials(authscp, new UsernamePasswordCredentials("user1", "user1Pass")); - private CloseableHttpResponse response; + CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).build(); - @After - public final void after() throws IllegalStateException, IOException { - if (response == null) { - return; - } + final HttpGet httpGet = new HttpGet("http://localhost:8080/spring-security-rest-basic-auth/api/foos/1"); + CloseableHttpResponse response = client.execute(httpGet); + + System.out.println(response.getStatusLine()); try { final HttpEntity entity = response.getEntity(); @@ -38,22 +40,4 @@ public class HttpClientSandboxLiveTest { response.close(); } } - - // tests - - // simple request - response - - @Test - public final void givenGetRequestExecuted_whenAnalyzingTheResponse_thenCorrectStatusCode() throws IOException { - final CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); - final AuthScope authscp = new AuthScope("localhost", 8080); - credentialsProvider.setCredentials(authscp, new UsernamePasswordCredentials("user1", "user1Pass")); - - client = HttpClientBuilder.create().setDefaultCredentialsProvider(credentialsProvider).build(); - - final HttpGet httpGet = new HttpGet("http://localhost:8080/spring-security-rest-basic-auth/api/foos/1"); - response = client.execute(httpGet); - - System.out.println(response.getStatusLine()); - } } From 1e53355b1315be5b34bb3f807b82c97248013b52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ambrus=20Adri=C3=A1n-Zolt=C3=A1n?= Date: Sun, 23 Oct 2016 10:52:59 +0300 Subject: [PATCH 241/309] Changed collect, forEach call to filter, findAny, orElseGet --- .../java/org/baeldung/security/MinuteBasedVoter.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java index 8d22c52b0d..ae698789e1 100644 --- a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java +++ b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java @@ -23,16 +23,17 @@ public class MinuteBasedVoter implements AccessDecisionVoter { @Override public int vote(Authentication authentication, Object object, Collection collection) { - List roles = authentication + String role = authentication .getAuthorities() .stream().map(GrantedAuthority::getAuthority) - .collect(Collectors.toList()); + .filter("ROLE_USER"::equals) + .findAny() + .orElseGet(() -> "ROLE_ADMIN"); - for (String role: roles) { - if ("ROLE_USER".equals(role) && LocalDateTime.now().getMinute() % 2 != 0) { + if ("ROLE_USER".equals(role) && LocalDateTime.now().getMinute() % 2 != 0) { return ACCESS_DENIED; - } } + return ACCESS_ABSTAIN; } } From 4670b8dbdabaf3dd0294c69f93d6399322e55509 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 11:25:09 +0200 Subject: [PATCH 242/309] Sockets moved to core-java --- core-java/README.md | 1 + .../java/com/baeldung/socket/EchoClient.java | 0 .../com/baeldung/socket/EchoMultiServer.java | 2 +- .../java/com/baeldung/socket/EchoServer.java | 2 +- .../java/com/baeldung/socket/GreetClient.java | 0 .../java/com/baeldung/socket/GreetServer.java | 0 .../com/baeldung/socket/EchoMultiTest.java | 6 ++-- .../java/com/baeldung/socket/EchoTest.java | 2 +- .../com/baeldung/socket/GreetServerTest.java | 0 sockets/README.md | 2 -- sockets/pom.xml | 30 ------------------- 11 files changed, 7 insertions(+), 38 deletions(-) rename {sockets => core-java}/src/main/java/com/baeldung/socket/EchoClient.java (100%) rename {sockets => core-java}/src/main/java/com/baeldung/socket/EchoMultiServer.java (97%) rename {sockets => core-java}/src/main/java/com/baeldung/socket/EchoServer.java (96%) rename {sockets => core-java}/src/main/java/com/baeldung/socket/GreetClient.java (100%) rename {sockets => core-java}/src/main/java/com/baeldung/socket/GreetServer.java (100%) rename {sockets => core-java}/src/test/java/com/baeldung/socket/EchoMultiTest.java (91%) rename {sockets => core-java}/src/test/java/com/baeldung/socket/EchoTest.java (95%) rename {sockets => core-java}/src/test/java/com/baeldung/socket/GreetServerTest.java (100%) delete mode 100644 sockets/README.md delete mode 100644 sockets/pom.xml diff --git a/core-java/README.md b/core-java/README.md index 440af67252..fbbfa65589 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -18,3 +18,4 @@ - [MD5 Hashing in Java](http://www.baeldung.com/java-md5) - [Guide to the Java ArrayList](http://www.baeldung.com/java-arraylist) - [Guide to Java Reflection](http://www.baeldung.com/java-reflection) +- [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets) diff --git a/sockets/src/main/java/com/baeldung/socket/EchoClient.java b/core-java/src/main/java/com/baeldung/socket/EchoClient.java similarity index 100% rename from sockets/src/main/java/com/baeldung/socket/EchoClient.java rename to core-java/src/main/java/com/baeldung/socket/EchoClient.java diff --git a/sockets/src/main/java/com/baeldung/socket/EchoMultiServer.java b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java similarity index 97% rename from sockets/src/main/java/com/baeldung/socket/EchoMultiServer.java rename to core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java index 2ece1ceebe..1177b82c87 100644 --- a/sockets/src/main/java/com/baeldung/socket/EchoMultiServer.java +++ b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java @@ -46,7 +46,7 @@ public class EchoMultiServer { clientSocket.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { - if (".".equals(inputLine)) { + if ("".equals(inputLine)) { out.println("bye"); break; } diff --git a/sockets/src/main/java/com/baeldung/socket/EchoServer.java b/core-java/src/main/java/com/baeldung/socket/EchoServer.java similarity index 96% rename from sockets/src/main/java/com/baeldung/socket/EchoServer.java rename to core-java/src/main/java/com/baeldung/socket/EchoServer.java index 3607afa7f5..395624933c 100644 --- a/sockets/src/main/java/com/baeldung/socket/EchoServer.java +++ b/core-java/src/main/java/com/baeldung/socket/EchoServer.java @@ -18,7 +18,7 @@ public class EchoServer { clientSocket.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { - if (".".equals(inputLine)) { + if ("".equals(inputLine)) { out.println("good bye"); break; } diff --git a/sockets/src/main/java/com/baeldung/socket/GreetClient.java b/core-java/src/main/java/com/baeldung/socket/GreetClient.java similarity index 100% rename from sockets/src/main/java/com/baeldung/socket/GreetClient.java rename to core-java/src/main/java/com/baeldung/socket/GreetClient.java diff --git a/sockets/src/main/java/com/baeldung/socket/GreetServer.java b/core-java/src/main/java/com/baeldung/socket/GreetServer.java similarity index 100% rename from sockets/src/main/java/com/baeldung/socket/GreetServer.java rename to core-java/src/main/java/com/baeldung/socket/GreetServer.java diff --git a/sockets/src/test/java/com/baeldung/socket/EchoMultiTest.java b/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java similarity index 91% rename from sockets/src/test/java/com/baeldung/socket/EchoMultiTest.java rename to core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java index 19a59c211c..ef08385551 100644 --- a/sockets/src/test/java/com/baeldung/socket/EchoMultiTest.java +++ b/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java @@ -21,7 +21,7 @@ public class EchoMultiTest { client.startConnection("127.0.0.1", 5555); String msg1 = client.sendMessage("hello"); String msg2 = client.sendMessage("world"); - String terminate = client.sendMessage("."); + String terminate = client.sendMessage(""); assertEquals(msg1, "hello"); assertEquals(msg2, "world"); assertEquals(terminate, "bye"); @@ -34,7 +34,7 @@ public class EchoMultiTest { client.startConnection("127.0.0.1", 5555); String msg1 = client.sendMessage("hello"); String msg2 = client.sendMessage("world"); - String terminate = client.sendMessage("."); + String terminate = client.sendMessage(""); assertEquals(msg1, "hello"); assertEquals(msg2, "world"); assertEquals(terminate, "bye"); @@ -47,7 +47,7 @@ public class EchoMultiTest { client.startConnection("127.0.0.1", 5555); String msg1 = client.sendMessage("hello"); String msg2 = client.sendMessage("world"); - String terminate = client.sendMessage("."); + String terminate = client.sendMessage(""); assertEquals(msg1, "hello"); assertEquals(msg2, "world"); assertEquals(terminate, "bye"); diff --git a/sockets/src/test/java/com/baeldung/socket/EchoTest.java b/core-java/src/test/java/com/baeldung/socket/EchoTest.java similarity index 95% rename from sockets/src/test/java/com/baeldung/socket/EchoTest.java rename to core-java/src/test/java/com/baeldung/socket/EchoTest.java index 0f0c02e4d8..c12bd28a29 100644 --- a/sockets/src/test/java/com/baeldung/socket/EchoTest.java +++ b/core-java/src/test/java/com/baeldung/socket/EchoTest.java @@ -26,7 +26,7 @@ public class EchoTest { String resp1 = client.sendMessage("hello"); String resp2 = client.sendMessage("world"); String resp3 = client.sendMessage("!"); - String resp4 = client.sendMessage("."); + String resp4 = client.sendMessage(""); assertEquals("hello", resp1); assertEquals("world", resp2); assertEquals("!", resp3); diff --git a/sockets/src/test/java/com/baeldung/socket/GreetServerTest.java b/core-java/src/test/java/com/baeldung/socket/GreetServerTest.java similarity index 100% rename from sockets/src/test/java/com/baeldung/socket/GreetServerTest.java rename to core-java/src/test/java/com/baeldung/socket/GreetServerTest.java diff --git a/sockets/README.md b/sockets/README.md deleted file mode 100644 index ad8811ee80..0000000000 --- a/sockets/README.md +++ /dev/null @@ -1,2 +0,0 @@ -### Relevant Articles: -- [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets) diff --git a/sockets/pom.xml b/sockets/pom.xml deleted file mode 100644 index 24e8e436f3..0000000000 --- a/sockets/pom.xml +++ /dev/null @@ -1,30 +0,0 @@ - - 4.0.0 - com.baeldung - sockets - 1.0 - sockets - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.3 - - 8 - 8 - - - - - - - junit - junit - 4.3 - test - - - - From 803145826525fd88d3138d12fc9513f5cb16b8a5 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 11:53:43 +0200 Subject: [PATCH 243/309] Refactor Socket tests --- .../com/baeldung/socket/EchoMultiTest.java | 20 ++++++++++--------- .../java/com/baeldung/socket/EchoTest.java | 16 +++++++++------ .../com/baeldung/socket/GreetServerTest.java | 13 ++++++++---- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java b/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java index ef08385551..ccb5f48ddb 100644 --- a/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java +++ b/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java @@ -1,7 +1,6 @@ package com.baeldung.socket; -import org.junit.After; -import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import java.util.concurrent.Executors; @@ -10,18 +9,22 @@ import static org.junit.Assert.assertEquals; public class EchoMultiTest { - { - Executors.newSingleThreadExecutor().submit(() -> new EchoMultiServer().start(5555)); - } + private static final Integer PORT = 5555; + @BeforeClass + public static void start() throws InterruptedException { + Executors.newSingleThreadExecutor().submit(() -> new EchoMultiServer().start(PORT)); + Thread.sleep(500); + } @Test public void givenClient1_whenServerResponds_thenCorrect() { EchoClient client = new EchoClient(); - client.startConnection("127.0.0.1", 5555); + client.startConnection("127.0.0.1", PORT); String msg1 = client.sendMessage("hello"); String msg2 = client.sendMessage("world"); String terminate = client.sendMessage(""); + assertEquals(msg1, "hello"); assertEquals(msg2, "world"); assertEquals(terminate, "bye"); @@ -31,7 +34,7 @@ public class EchoMultiTest { @Test public void givenClient2_whenServerResponds_thenCorrect() { EchoClient client = new EchoClient(); - client.startConnection("127.0.0.1", 5555); + client.startConnection("127.0.0.1", PORT); String msg1 = client.sendMessage("hello"); String msg2 = client.sendMessage("world"); String terminate = client.sendMessage(""); @@ -44,7 +47,7 @@ public class EchoMultiTest { @Test public void givenClient3_whenServerResponds_thenCorrect() { EchoClient client = new EchoClient(); - client.startConnection("127.0.0.1", 5555); + client.startConnection("127.0.0.1", PORT); String msg1 = client.sendMessage("hello"); String msg2 = client.sendMessage("world"); String terminate = client.sendMessage(""); @@ -53,5 +56,4 @@ public class EchoMultiTest { assertEquals(terminate, "bye"); client.stopConnection(); } - } diff --git a/core-java/src/test/java/com/baeldung/socket/EchoTest.java b/core-java/src/test/java/com/baeldung/socket/EchoTest.java index c12bd28a29..76391f0f20 100644 --- a/core-java/src/test/java/com/baeldung/socket/EchoTest.java +++ b/core-java/src/test/java/com/baeldung/socket/EchoTest.java @@ -2,6 +2,7 @@ package com.baeldung.socket; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import java.util.concurrent.Executors; @@ -9,15 +10,19 @@ import java.util.concurrent.Executors; import static org.junit.Assert.assertEquals; public class EchoTest { - { - Executors.newSingleThreadExecutor().submit(() -> new EchoServer().start(4444)); - } + private static final Integer PORT = 4444; - EchoClient client = new EchoClient(); + @BeforeClass + public static void start() throws InterruptedException { + Executors.newSingleThreadExecutor().submit(() -> new EchoServer().start(PORT)); + Thread.sleep(500); + } + + private EchoClient client = new EchoClient(); @Before public void init() { - client.startConnection("127.0.0.1", 4444); + client.startConnection("127.0.0.1", PORT); } @Test @@ -37,5 +42,4 @@ public class EchoTest { public void tearDown() { client.stopConnection(); } - } diff --git a/core-java/src/test/java/com/baeldung/socket/GreetServerTest.java b/core-java/src/test/java/com/baeldung/socket/GreetServerTest.java index fedc32fb39..caf56a8c76 100644 --- a/core-java/src/test/java/com/baeldung/socket/GreetServerTest.java +++ b/core-java/src/test/java/com/baeldung/socket/GreetServerTest.java @@ -2,6 +2,7 @@ package com.baeldung.socket; import org.junit.After; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import java.util.concurrent.Executors; @@ -10,16 +11,20 @@ import static org.junit.Assert.assertEquals; public class GreetServerTest { - GreetClient client; + private GreetClient client; - { - Executors.newSingleThreadExecutor().submit(() -> new GreetServer().start(6666)); + private static final Integer PORT = 6666; + + @BeforeClass + public static void start() throws InterruptedException { + Executors.newSingleThreadExecutor().submit(() -> new GreetServer().start(PORT)); + Thread.sleep(500); } @Before public void init() { client = new GreetClient(); - client.startConnection("127.0.0.1", 6666); + client.startConnection("127.0.0.1", PORT); } From 65daa3aee2de7c813e852b1627be5fd288eac0eb Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 11:57:11 +0200 Subject: [PATCH 244/309] Refactor examples --- core-java/src/main/java/com/baeldung/socket/EchoClient.java | 3 +-- .../src/main/java/com/baeldung/socket/EchoMultiServer.java | 2 +- core-java/src/main/java/com/baeldung/socket/EchoServer.java | 2 +- .../src/main/java/com/baeldung/socket/GreetClient.java | 3 +-- .../src/test/java/com/baeldung/socket/EchoMultiTest.java | 6 +++--- core-java/src/test/java/com/baeldung/socket/EchoTest.java | 2 +- 6 files changed, 8 insertions(+), 10 deletions(-) diff --git a/core-java/src/main/java/com/baeldung/socket/EchoClient.java b/core-java/src/main/java/com/baeldung/socket/EchoClient.java index e8ec97c80a..1ddf752a03 100644 --- a/core-java/src/main/java/com/baeldung/socket/EchoClient.java +++ b/core-java/src/main/java/com/baeldung/socket/EchoClient.java @@ -23,8 +23,7 @@ public class EchoClient { public String sendMessage(String msg) { try { out.println(msg); - String resp = in.readLine(); - return resp; + return in.readLine(); } catch (Exception e) { return null; } diff --git a/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java index 1177b82c87..2ece1ceebe 100644 --- a/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java +++ b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java @@ -46,7 +46,7 @@ public class EchoMultiServer { clientSocket.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { - if ("".equals(inputLine)) { + if (".".equals(inputLine)) { out.println("bye"); break; } diff --git a/core-java/src/main/java/com/baeldung/socket/EchoServer.java b/core-java/src/main/java/com/baeldung/socket/EchoServer.java index 395624933c..3607afa7f5 100644 --- a/core-java/src/main/java/com/baeldung/socket/EchoServer.java +++ b/core-java/src/main/java/com/baeldung/socket/EchoServer.java @@ -18,7 +18,7 @@ public class EchoServer { clientSocket.getInputStream())); String inputLine; while ((inputLine = in.readLine()) != null) { - if ("".equals(inputLine)) { + if (".".equals(inputLine)) { out.println("good bye"); break; } diff --git a/core-java/src/main/java/com/baeldung/socket/GreetClient.java b/core-java/src/main/java/com/baeldung/socket/GreetClient.java index 7252827c87..21959c7469 100644 --- a/core-java/src/main/java/com/baeldung/socket/GreetClient.java +++ b/core-java/src/main/java/com/baeldung/socket/GreetClient.java @@ -26,8 +26,7 @@ public class GreetClient { public String sendMessage(String msg) { try { out.println(msg); - String resp = in.readLine(); - return resp; + return in.readLine(); } catch (Exception e) { return null; } diff --git a/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java b/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java index ccb5f48ddb..fcf353281d 100644 --- a/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java +++ b/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java @@ -23,7 +23,7 @@ public class EchoMultiTest { client.startConnection("127.0.0.1", PORT); String msg1 = client.sendMessage("hello"); String msg2 = client.sendMessage("world"); - String terminate = client.sendMessage(""); + String terminate = client.sendMessage("."); assertEquals(msg1, "hello"); assertEquals(msg2, "world"); @@ -37,7 +37,7 @@ public class EchoMultiTest { client.startConnection("127.0.0.1", PORT); String msg1 = client.sendMessage("hello"); String msg2 = client.sendMessage("world"); - String terminate = client.sendMessage(""); + String terminate = client.sendMessage("."); assertEquals(msg1, "hello"); assertEquals(msg2, "world"); assertEquals(terminate, "bye"); @@ -50,7 +50,7 @@ public class EchoMultiTest { client.startConnection("127.0.0.1", PORT); String msg1 = client.sendMessage("hello"); String msg2 = client.sendMessage("world"); - String terminate = client.sendMessage(""); + String terminate = client.sendMessage("."); assertEquals(msg1, "hello"); assertEquals(msg2, "world"); assertEquals(terminate, "bye"); diff --git a/core-java/src/test/java/com/baeldung/socket/EchoTest.java b/core-java/src/test/java/com/baeldung/socket/EchoTest.java index 76391f0f20..cb09d42f79 100644 --- a/core-java/src/test/java/com/baeldung/socket/EchoTest.java +++ b/core-java/src/test/java/com/baeldung/socket/EchoTest.java @@ -31,7 +31,7 @@ public class EchoTest { String resp1 = client.sendMessage("hello"); String resp2 = client.sendMessage("world"); String resp3 = client.sendMessage("!"); - String resp4 = client.sendMessage(""); + String resp4 = client.sendMessage("."); assertEquals("hello", resp1); assertEquals("world", resp2); assertEquals("!", resp3); From 8cdc680e6f76174625e5eba32f18d3f521301e3a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 12:11:23 +0200 Subject: [PATCH 245/309] Remove gson-jackson-performance --- gson-jackson-performance/README.md | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 gson-jackson-performance/README.md diff --git a/gson-jackson-performance/README.md b/gson-jackson-performance/README.md deleted file mode 100644 index e662219718..0000000000 --- a/gson-jackson-performance/README.md +++ /dev/null @@ -1,6 +0,0 @@ -## Performance of Gson and Jackson - -Standalone java programs to measure the performance of both JSON APIs based on file size and object graph complexity. - -###Relevant Articles: -- [Jackson vs Gson: A Quick Look At Performance](http://www.baeldung.com/jackson-gson-performance) From bc9b170e89c1fa927eabc83fe268f35ddc88021e Mon Sep 17 00:00:00 2001 From: DOHA Date: Sun, 23 Oct 2016 12:19:55 +0200 Subject: [PATCH 246/309] configure test profiles --- apache-cxf/cxf-introduction/pom.xml | 65 ++++++++++- ...{StudentTest.java => StudentLiveTest.java} | 30 +++-- apache-cxf/cxf-jaxrs-implementation/pom.xml | 65 ++++++++++- ...{ServiceTest.java => ServiceLiveTest.java} | 107 +++++++++--------- apache-cxf/cxf-spring/pom.xml | 4 +- ...{StudentTest.java => StudentLiveTest.java} | 2 +- 6 files changed, 198 insertions(+), 75 deletions(-) rename apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/{StudentTest.java => StudentLiveTest.java} (65%) rename apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/{ServiceTest.java => ServiceLiveTest.java} (63%) rename apache-cxf/cxf-spring/src/test/java/com/baeldung/cxf/spring/{StudentTest.java => StudentLiveTest.java} (97%) diff --git a/apache-cxf/cxf-introduction/pom.xml b/apache-cxf/cxf-introduction/pom.xml index 232a4f0089..9629dfda1b 100644 --- a/apache-cxf/cxf-introduction/pom.xml +++ b/apache-cxf/cxf-introduction/pom.xml @@ -11,6 +11,7 @@ 3.1.6 + 2.19.1 @@ -26,7 +27,7 @@ 2.19.1 - **/StudentTest.java + **/*LiveTest.java @@ -44,4 +45,66 @@ ${cxf.version} + + + + live + + + + org.codehaus.cargo + cargo-maven2-plugin + 1.4.19 + + + tomcat8x + embedded + + + + localhost + 8082 + + + + + + start-server + pre-integration-test + + start + + + + stop-server + post-integration-test + + stop + + + + + + + maven-surefire-plugin + ${surefire.version} + + + integration-test + + test + + + + none + + + + + + + + + + diff --git a/apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentTest.java b/apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentLiveTest.java similarity index 65% rename from apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentTest.java rename to apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentLiveTest.java index e1e5b60ec3..1c50fcb9b6 100644 --- a/apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentTest.java +++ b/apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentLiveTest.java @@ -2,20 +2,16 @@ package com.baeldung.cxf.introduction; import static org.junit.Assert.assertEquals; -import org.junit.Before; -import org.junit.Test; - import java.util.Map; import javax.xml.namespace.QName; import javax.xml.ws.Service; import javax.xml.ws.soap.SOAPBinding; -import com.baeldung.cxf.introduction.Baeldung; -import com.baeldung.cxf.introduction.Student; -import com.baeldung.cxf.introduction.StudentImpl; +import org.junit.Before; +import org.junit.Test; -public class StudentTest { +public class StudentLiveTest { private static QName SERVICE_NAME = new QName("http://introduction.cxf.baeldung.com/", "Baeldung"); private static QName PORT_NAME = new QName("http://introduction.cxf.baeldung.com/", "BaeldungPort"); @@ -25,7 +21,7 @@ public class StudentTest { { service = Service.create(SERVICE_NAME); - String endpointAddress = "http://localhost:8080/baeldung"; + final String endpointAddress = "http://localhost:8082/cxf-introduction/baeldung"; service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress); } @@ -37,28 +33,28 @@ public class StudentTest { @Test public void whenUsingHelloMethod_thenCorrect() { - String endpointResponse = baeldungProxy.hello("Baeldung"); - String localResponse = baeldungImpl.hello("Baeldung"); + final String endpointResponse = baeldungProxy.hello("Baeldung"); + final String localResponse = baeldungImpl.hello("Baeldung"); assertEquals(localResponse, endpointResponse); } @Test public void whenUsingHelloStudentMethod_thenCorrect() { - Student student = new StudentImpl("John Doe"); - String endpointResponse = baeldungProxy.helloStudent(student); - String localResponse = baeldungImpl.helloStudent(student); + final Student student = new StudentImpl("John Doe"); + final String endpointResponse = baeldungProxy.helloStudent(student); + final String localResponse = baeldungImpl.helloStudent(student); assertEquals(localResponse, endpointResponse); } @Test public void usingGetStudentsMethod_thenCorrect() { - Student student1 = new StudentImpl("Adam"); + final Student student1 = new StudentImpl("Adam"); baeldungProxy.helloStudent(student1); - Student student2 = new StudentImpl("Eve"); + final Student student2 = new StudentImpl("Eve"); baeldungProxy.helloStudent(student2); - - Map students = baeldungProxy.getStudents(); + + final Map students = baeldungProxy.getStudents(); assertEquals("Adam", students.get(1).getName()); assertEquals("Eve", students.get(2).getName()); } diff --git a/apache-cxf/cxf-jaxrs-implementation/pom.xml b/apache-cxf/cxf-jaxrs-implementation/pom.xml index 1f83ecf934..24dad05a0f 100644 --- a/apache-cxf/cxf-jaxrs-implementation/pom.xml +++ b/apache-cxf/cxf-jaxrs-implementation/pom.xml @@ -13,6 +13,7 @@ UTF-8 3.1.7 4.5.2 + 2.19.1
    @@ -28,7 +29,7 @@ 2.19.1 - **/ServiceTest + **/*LiveTest.java @@ -51,4 +52,66 @@ ${httpclient.version} + + + + live + + + + org.codehaus.cargo + cargo-maven2-plugin + 1.4.19 + + + tomcat8x + embedded + + + + localhost + 8082 + + + + + + start-server + pre-integration-test + + start + + + + stop-server + post-integration-test + + stop + + + + + + + maven-surefire-plugin + ${surefire.version} + + + integration-test + + test + + + + none + + + + + + + + + + diff --git a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceLiveTest.java similarity index 63% rename from apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java rename to apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceLiveTest.java index b8fc833194..692def81f5 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceTest.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceLiveTest.java @@ -1,5 +1,14 @@ package com.baeldung.cxf.jaxrs.implementation; +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URL; + +import javax.xml.bind.JAXB; + import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpDelete; import org.apache.http.client.methods.HttpPost; @@ -11,119 +20,111 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -import javax.xml.bind.JAXB; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URL; - -import static org.junit.Assert.assertEquals; - -public class ServiceTest { - private static final String BASE_URL = "http://localhost:8080/baeldung/courses/"; +public class ServiceLiveTest { + private static final String BASE_URL = "http://localhost:8082/baeldung/courses/"; private static CloseableHttpClient client; - + @BeforeClass public static void createClient() { client = HttpClients.createDefault(); } - + @AfterClass public static void closeClient() throws IOException { client.close(); } - + @Test public void whenUpdateNonExistentCourse_thenReceiveNotFoundResponse() throws IOException { - HttpPut httpPut = new HttpPut(BASE_URL + "3"); - InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("non_existent_course.xml"); + final HttpPut httpPut = new HttpPut(BASE_URL + "3"); + final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("non_existent_course.xml"); httpPut.setEntity(new InputStreamEntity(resourceStream)); httpPut.setHeader("Content-Type", "text/xml"); - - HttpResponse response = client.execute(httpPut); + + final HttpResponse response = client.execute(httpPut); assertEquals(404, response.getStatusLine().getStatusCode()); } - + @Test public void whenUpdateUnchangedCourse_thenReceiveNotModifiedResponse() throws IOException { - HttpPut httpPut = new HttpPut(BASE_URL + "1"); - InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("unchanged_course.xml"); + final HttpPut httpPut = new HttpPut(BASE_URL + "1"); + final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("unchanged_course.xml"); httpPut.setEntity(new InputStreamEntity(resourceStream)); httpPut.setHeader("Content-Type", "text/xml"); - - HttpResponse response = client.execute(httpPut); + + final HttpResponse response = client.execute(httpPut); assertEquals(304, response.getStatusLine().getStatusCode()); } - + @Test public void whenUpdateValidCourse_thenReceiveOKResponse() throws IOException { - HttpPut httpPut = new HttpPut(BASE_URL + "2"); - InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("changed_course.xml"); + final HttpPut httpPut = new HttpPut(BASE_URL + "2"); + final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("changed_course.xml"); httpPut.setEntity(new InputStreamEntity(resourceStream)); httpPut.setHeader("Content-Type", "text/xml"); - - HttpResponse response = client.execute(httpPut); + + final HttpResponse response = client.execute(httpPut); assertEquals(200, response.getStatusLine().getStatusCode()); - - Course course = getCourse(2); + + final Course course = getCourse(2); assertEquals(2, course.getId()); assertEquals("Apache CXF Support for RESTful", course.getName()); } - + @Test public void whenCreateConflictStudent_thenReceiveConflictResponse() throws IOException { - HttpPost httpPost = new HttpPost(BASE_URL + "1/students"); - InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("conflict_student.xml"); + final HttpPost httpPost = new HttpPost(BASE_URL + "1/students"); + final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("conflict_student.xml"); httpPost.setEntity(new InputStreamEntity(resourceStream)); httpPost.setHeader("Content-Type", "text/xml"); - - HttpResponse response = client.execute(httpPost); + + final HttpResponse response = client.execute(httpPost); assertEquals(409, response.getStatusLine().getStatusCode()); } @Test public void whenCreateValidStudent_thenReceiveOKResponse() throws IOException { - HttpPost httpPost = new HttpPost(BASE_URL + "2/students"); - InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("created_student.xml"); + final HttpPost httpPost = new HttpPost(BASE_URL + "2/students"); + final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("created_student.xml"); httpPost.setEntity(new InputStreamEntity(resourceStream)); httpPost.setHeader("Content-Type", "text/xml"); - - HttpResponse response = client.execute(httpPost); + + final HttpResponse response = client.execute(httpPost); assertEquals(200, response.getStatusLine().getStatusCode()); - - Student student = getStudent(2, 3); + + final Student student = getStudent(2, 3); assertEquals(3, student.getId()); assertEquals("Student C", student.getName()); } - + @Test public void whenDeleteInvalidStudent_thenReceiveNotFoundResponse() throws IOException { - HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/3"); - HttpResponse response = client.execute(httpDelete); + final HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/3"); + final HttpResponse response = client.execute(httpDelete); assertEquals(404, response.getStatusLine().getStatusCode()); - } - + } + @Test public void whenDeleteValidStudent_thenReceiveOKResponse() throws IOException { - HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/1"); - HttpResponse response = client.execute(httpDelete); + final HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/1"); + final HttpResponse response = client.execute(httpDelete); assertEquals(200, response.getStatusLine().getStatusCode()); - - Course course = getCourse(1); + + final Course course = getCourse(1); assertEquals(1, course.getStudents().size()); assertEquals(2, course.getStudents().get(0).getId()); assertEquals("Student B", course.getStudents().get(0).getName()); } private Course getCourse(int courseOrder) throws IOException { - URL url = new URL(BASE_URL + courseOrder); - InputStream input = url.openStream(); + final URL url = new URL(BASE_URL + courseOrder); + final InputStream input = url.openStream(); return JAXB.unmarshal(new InputStreamReader(input), Course.class); } private Student getStudent(int courseOrder, int studentOrder) throws IOException { - URL url = new URL(BASE_URL + courseOrder + "/students/" + studentOrder); - InputStream input = url.openStream(); + final URL url = new URL(BASE_URL + courseOrder + "/students/" + studentOrder); + final InputStream input = url.openStream(); return JAXB.unmarshal(new InputStreamReader(input), Student.class); } } \ No newline at end of file diff --git a/apache-cxf/cxf-spring/pom.xml b/apache-cxf/cxf-spring/pom.xml index 85e68300f0..8f1dee965a 100644 --- a/apache-cxf/cxf-spring/pom.xml +++ b/apache-cxf/cxf-spring/pom.xml @@ -51,7 +51,7 @@ ${surefire.version} - StudentTest.java + **/*LiveTest.java @@ -60,7 +60,7 @@ - integration + live diff --git a/apache-cxf/cxf-spring/src/test/java/com/baeldung/cxf/spring/StudentTest.java b/apache-cxf/cxf-spring/src/test/java/com/baeldung/cxf/spring/StudentLiveTest.java similarity index 97% rename from apache-cxf/cxf-spring/src/test/java/com/baeldung/cxf/spring/StudentTest.java rename to apache-cxf/cxf-spring/src/test/java/com/baeldung/cxf/spring/StudentLiveTest.java index 7466944e04..80a8f6c3b8 100644 --- a/apache-cxf/cxf-spring/src/test/java/com/baeldung/cxf/spring/StudentTest.java +++ b/apache-cxf/cxf-spring/src/test/java/com/baeldung/cxf/spring/StudentLiveTest.java @@ -6,7 +6,7 @@ import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; -public class StudentTest { +public class StudentLiveTest { private ApplicationContext context = new AnnotationConfigApplicationContext(ClientConfiguration.class); private Baeldung baeldungProxy = (Baeldung) context.getBean("client"); From 951552c7428c2aab1f531ffda16f74a070481d92 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 12:27:49 +0200 Subject: [PATCH 247/309] Rename autovalue-tutorial -> autovalue --- {autovalue-tutorial => autovalue}/README.md | 0 {autovalue-tutorial => autovalue}/pom.xml | 0 .../src/main/java/com/baeldung/autovalue/AutoValueMoney.java | 0 .../java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java | 0 .../src/main/java/com/baeldung/autovalue/Foo.java | 0 .../src/main/java/com/baeldung/autovalue/ImmutableMoney.java | 0 .../src/main/java/com/baeldung/autovalue/MutableMoney.java | 0 .../src/test/java/com/baeldung/autovalue/MoneyTest.java | 0 pom.xml | 2 +- 9 files changed, 1 insertion(+), 1 deletion(-) rename {autovalue-tutorial => autovalue}/README.md (100%) rename {autovalue-tutorial => autovalue}/pom.xml (100%) rename {autovalue-tutorial => autovalue}/src/main/java/com/baeldung/autovalue/AutoValueMoney.java (100%) rename {autovalue-tutorial => autovalue}/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java (100%) rename {autovalue-tutorial => autovalue}/src/main/java/com/baeldung/autovalue/Foo.java (100%) rename {autovalue-tutorial => autovalue}/src/main/java/com/baeldung/autovalue/ImmutableMoney.java (100%) rename {autovalue-tutorial => autovalue}/src/main/java/com/baeldung/autovalue/MutableMoney.java (100%) rename {autovalue-tutorial => autovalue}/src/test/java/com/baeldung/autovalue/MoneyTest.java (100%) diff --git a/autovalue-tutorial/README.md b/autovalue/README.md similarity index 100% rename from autovalue-tutorial/README.md rename to autovalue/README.md diff --git a/autovalue-tutorial/pom.xml b/autovalue/pom.xml similarity index 100% rename from autovalue-tutorial/pom.xml rename to autovalue/pom.xml diff --git a/autovalue-tutorial/src/main/java/com/baeldung/autovalue/AutoValueMoney.java b/autovalue/src/main/java/com/baeldung/autovalue/AutoValueMoney.java similarity index 100% rename from autovalue-tutorial/src/main/java/com/baeldung/autovalue/AutoValueMoney.java rename to autovalue/src/main/java/com/baeldung/autovalue/AutoValueMoney.java diff --git a/autovalue-tutorial/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java b/autovalue/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java similarity index 100% rename from autovalue-tutorial/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java rename to autovalue/src/main/java/com/baeldung/autovalue/AutoValueMoneyWithBuilder.java diff --git a/autovalue-tutorial/src/main/java/com/baeldung/autovalue/Foo.java b/autovalue/src/main/java/com/baeldung/autovalue/Foo.java similarity index 100% rename from autovalue-tutorial/src/main/java/com/baeldung/autovalue/Foo.java rename to autovalue/src/main/java/com/baeldung/autovalue/Foo.java diff --git a/autovalue-tutorial/src/main/java/com/baeldung/autovalue/ImmutableMoney.java b/autovalue/src/main/java/com/baeldung/autovalue/ImmutableMoney.java similarity index 100% rename from autovalue-tutorial/src/main/java/com/baeldung/autovalue/ImmutableMoney.java rename to autovalue/src/main/java/com/baeldung/autovalue/ImmutableMoney.java diff --git a/autovalue-tutorial/src/main/java/com/baeldung/autovalue/MutableMoney.java b/autovalue/src/main/java/com/baeldung/autovalue/MutableMoney.java similarity index 100% rename from autovalue-tutorial/src/main/java/com/baeldung/autovalue/MutableMoney.java rename to autovalue/src/main/java/com/baeldung/autovalue/MutableMoney.java diff --git a/autovalue-tutorial/src/test/java/com/baeldung/autovalue/MoneyTest.java b/autovalue/src/test/java/com/baeldung/autovalue/MoneyTest.java similarity index 100% rename from autovalue-tutorial/src/test/java/com/baeldung/autovalue/MoneyTest.java rename to autovalue/src/test/java/com/baeldung/autovalue/MoneyTest.java diff --git a/pom.xml b/pom.xml index 9979ff95a5..0a8b39b14f 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ assertj apache-cxf - autovalue-tutorial + autovalue cdi core-java From fc1aaef4717cf0734263e1268070accc68e6c189 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 14:19:10 +0200 Subject: [PATCH 248/309] Rename dependency-injection -> spring-core --- {dependency-injection => spring-core}/.gitignore | 0 {dependency-injection => spring-core}/README.md | 0 {dependency-injection => spring-core}/pom.xml | 0 .../ApplicationContextTestAutowiredName.java | 0 .../ApplicationContextTestAutowiredQualifier.java | 0 .../ApplicationContextTestAutowiredType.java | 0 .../ApplicationContextTestInjectName.java | 0 .../ApplicationContextTestInjectQualifier.java | 0 .../ApplicationContextTestInjectType.java | 0 .../ApplicationContextTestResourceNameType.java | 0 .../ApplicationContextTestResourceQualifier.java | 0 .../dependency/AnotherArbitraryDependency.java | 0 .../com/baeldung/dependency/ArbitraryDependency.java | 0 .../dependency/YetAnotherArbitraryDependency.java | 0 .../autowired/FieldAutowiredIntegrationTest.java | 0 .../autowired/FieldAutowiredNameIntegrationTest.java | 0 .../FieldQualifierAutowiredIntegrationTest.java | 0 .../inject/FieldByNameInjectIntegrationTest.java | 0 .../baeldung/inject/FieldInjectIntegrationTest.java | 0 .../inject/FieldQualifierInjectIntegrationTest.java | 0 .../FieldResourceInjectionIntegrationTest.java | 0 .../MethodByQualifierResourceIntegrationTest.java | 0 .../MethodByTypeResourceIntegrationTest.java | 0 .../MethodResourceInjectionIntegrationTest.java | 0 .../resource/NamedResourceIntegrationTest.java | 0 .../QualifierResourceInjectionIntegrationTest.java | 0 .../SetterResourceInjectionIntegrationTest.java | 0 .../spring/web/config/MainWebAppInitializer.java | 12 +++++------- 28 files changed, 5 insertions(+), 7 deletions(-) rename {dependency-injection => spring-core}/.gitignore (100%) rename {dependency-injection => spring-core}/README.md (100%) rename {dependency-injection => spring-core}/pom.xml (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectName.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectType.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/dependency/ArbitraryDependency.java (100%) rename {dependency-injection => spring-core}/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java (100%) rename {dependency-injection => spring-core}/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java (100%) diff --git a/dependency-injection/.gitignore b/spring-core/.gitignore similarity index 100% rename from dependency-injection/.gitignore rename to spring-core/.gitignore diff --git a/dependency-injection/README.md b/spring-core/README.md similarity index 100% rename from dependency-injection/README.md rename to spring-core/README.md diff --git a/dependency-injection/pom.xml b/spring-core/pom.xml similarity index 100% rename from dependency-injection/pom.xml rename to spring-core/pom.xml diff --git a/dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java b/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java rename to spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java diff --git a/dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java b/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java rename to spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java diff --git a/dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java b/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java rename to spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java diff --git a/dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectName.java b/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectName.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectName.java rename to spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectName.java diff --git a/dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java b/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java rename to spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java diff --git a/dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectType.java b/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectType.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectType.java rename to spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestInjectType.java diff --git a/dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java b/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java rename to spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java diff --git a/dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java b/spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java rename to spring-core/src/main/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java diff --git a/dependency-injection/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java b/spring-core/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java rename to spring-core/src/main/java/com/baeldung/dependency/AnotherArbitraryDependency.java diff --git a/dependency-injection/src/main/java/com/baeldung/dependency/ArbitraryDependency.java b/spring-core/src/main/java/com/baeldung/dependency/ArbitraryDependency.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/dependency/ArbitraryDependency.java rename to spring-core/src/main/java/com/baeldung/dependency/ArbitraryDependency.java diff --git a/dependency-injection/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java b/spring-core/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java similarity index 100% rename from dependency-injection/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java rename to spring-core/src/main/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java diff --git a/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java b/spring-core/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/autowired/FieldAutowiredIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java b/spring-core/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/autowired/FieldAutowiredNameIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java b/spring-core/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java b/spring-core/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/inject/FieldByNameInjectIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java b/spring-core/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/inject/FieldInjectIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java b/spring-core/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/inject/FieldQualifierInjectIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/resource/FieldResourceInjectionIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/resource/MethodByQualifierResourceIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/resource/MethodByTypeResourceIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/resource/MethodResourceInjectionIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/resource/NamedResourceIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/resource/QualifierResourceInjectionIntegrationTest.java diff --git a/dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java b/spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java similarity index 100% rename from dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java rename to spring-core/src/test/java/com/baeldung/resource/SetterResourceInjectionIntegrationTest.java diff --git a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/MainWebAppInitializer.java b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/MainWebAppInitializer.java index f428fc3223..80ce22edd6 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/MainWebAppInitializer.java +++ b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/MainWebAppInitializer.java @@ -1,17 +1,16 @@ package com.baeldung.spring.web.config; -import java.util.Set; - -import javax.servlet.ServletContext; -import javax.servlet.ServletException; -import javax.servlet.ServletRegistration; - import org.springframework.web.WebApplicationInitializer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.context.support.GenericWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import javax.servlet.ServletRegistration; +import java.util.Set; + public class MainWebAppInitializer implements WebApplicationInitializer { private static final String TMP_FOLDER = "/tmp"; @@ -28,7 +27,6 @@ public class MainWebAppInitializer implements WebApplicationInitializer { root.scan("com.baeldung.spring.web.config"); // root.getEnvironment().setDefaultProfiles("embedded"); - // Manages the lifecycle of the root application context sc.addListener(new ContextLoaderListener(root)); // Handles requests into the application From 26fbeb98da706708749575a9497254243c0c247f Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 14:23:56 +0200 Subject: [PATCH 249/309] Rename module --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0a8b39b14f..b38fe174c9 100644 --- a/pom.xml +++ b/pom.xml @@ -26,7 +26,6 @@ dozer - dependency-injection deltaspike patterns @@ -75,6 +74,7 @@ spring-autowire spring-batch spring-boot + spring-core spring-cucumber spring-data-cassandra spring-data-couchbase-2 From b1b4d4ff7fa9c70316352de43cbc44cce6574610 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 18:57:21 +0200 Subject: [PATCH 250/309] Rename jooq-spring -> spring-jooq --- pom.xml | 5 +++-- {jooq-spring => spring-jooq}/.gitignore | 0 {jooq-spring => spring-jooq}/README.md | 0 {jooq-spring => spring-jooq}/pom.xml | 0 .../src/main/resources/application.properties | 0 .../src/main/resources/intro_config.properties | 0 .../src/main/resources/intro_schema.sql | 0 .../com/baeldung/jooq/introduction/ExceptionTranslator.java | 0 .../jooq/introduction/PersistenceContextIntegrationTest.java | 0 .../com/baeldung/jooq/introduction/QueryIntegrationTest.java | 0 .../test/java/com/baeldung/jooq/springboot/Application.java | 0 .../com/baeldung/jooq/springboot/InitialConfiguration.java | 0 .../baeldung/jooq/springboot/SpringBootIntegrationTest.java | 0 13 files changed, 3 insertions(+), 2 deletions(-) rename {jooq-spring => spring-jooq}/.gitignore (100%) rename {jooq-spring => spring-jooq}/README.md (100%) rename {jooq-spring => spring-jooq}/pom.xml (100%) rename {jooq-spring => spring-jooq}/src/main/resources/application.properties (100%) rename {jooq-spring => spring-jooq}/src/main/resources/intro_config.properties (100%) rename {jooq-spring => spring-jooq}/src/main/resources/intro_schema.sql (100%) rename {jooq-spring => spring-jooq}/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java (100%) rename {jooq-spring => spring-jooq}/src/test/java/com/baeldung/jooq/introduction/PersistenceContextIntegrationTest.java (100%) rename {jooq-spring => spring-jooq}/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java (100%) rename {jooq-spring => spring-jooq}/src/test/java/com/baeldung/jooq/springboot/Application.java (100%) rename {jooq-spring => spring-jooq}/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java (100%) rename {jooq-spring => spring-jooq}/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java (100%) diff --git a/pom.xml b/pom.xml index b38fe174c9..71d12fddcf 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ jackson javaxval jjwt - jooq-spring + jpa-storedprocedure json json-path @@ -87,8 +87,9 @@ spring-freemarker spring-hibernate3 spring-hibernate4 - spring-jpa spring-jms + spring-jooq + spring-jpa spring-katharsis spring-mockito spring-mvc-java diff --git a/jooq-spring/.gitignore b/spring-jooq/.gitignore similarity index 100% rename from jooq-spring/.gitignore rename to spring-jooq/.gitignore diff --git a/jooq-spring/README.md b/spring-jooq/README.md similarity index 100% rename from jooq-spring/README.md rename to spring-jooq/README.md diff --git a/jooq-spring/pom.xml b/spring-jooq/pom.xml similarity index 100% rename from jooq-spring/pom.xml rename to spring-jooq/pom.xml diff --git a/jooq-spring/src/main/resources/application.properties b/spring-jooq/src/main/resources/application.properties similarity index 100% rename from jooq-spring/src/main/resources/application.properties rename to spring-jooq/src/main/resources/application.properties diff --git a/jooq-spring/src/main/resources/intro_config.properties b/spring-jooq/src/main/resources/intro_config.properties similarity index 100% rename from jooq-spring/src/main/resources/intro_config.properties rename to spring-jooq/src/main/resources/intro_config.properties diff --git a/jooq-spring/src/main/resources/intro_schema.sql b/spring-jooq/src/main/resources/intro_schema.sql similarity index 100% rename from jooq-spring/src/main/resources/intro_schema.sql rename to spring-jooq/src/main/resources/intro_schema.sql diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java b/spring-jooq/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java similarity index 100% rename from jooq-spring/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java rename to spring-jooq/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContextIntegrationTest.java b/spring-jooq/src/test/java/com/baeldung/jooq/introduction/PersistenceContextIntegrationTest.java similarity index 100% rename from jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContextIntegrationTest.java rename to spring-jooq/src/test/java/com/baeldung/jooq/introduction/PersistenceContextIntegrationTest.java diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java b/spring-jooq/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java similarity index 100% rename from jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java rename to spring-jooq/src/test/java/com/baeldung/jooq/introduction/QueryIntegrationTest.java diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java b/spring-jooq/src/test/java/com/baeldung/jooq/springboot/Application.java similarity index 100% rename from jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java rename to spring-jooq/src/test/java/com/baeldung/jooq/springboot/Application.java diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java b/spring-jooq/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java similarity index 100% rename from jooq-spring/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java rename to spring-jooq/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java b/spring-jooq/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java similarity index 100% rename from jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java rename to spring-jooq/src/test/java/com/baeldung/jooq/springboot/SpringBootIntegrationTest.java From a757c7e301012dac6c2615bef93dc0d7b2a28cb0 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 19:07:13 +0200 Subject: [PATCH 251/309] Rename flyway-migration -> flyway --- {flyway-migration => flyway}/.gitignore | 6 +- {flyway-migration => flyway}/README.MD | 0 .../V1_0__create_employee_schema.sql | 14 ++-- .../V2_0__create_department_schema.sql | 14 ++-- .../myFlywayConfig.properties | 8 +-- {flyway-migration => flyway}/pom.xml | 66 +++++++++---------- pom.xml | 2 + 7 files changed, 56 insertions(+), 54 deletions(-) rename {flyway-migration => flyway}/.gitignore (75%) rename {flyway-migration => flyway}/README.MD (100%) rename {flyway-migration => flyway}/db/migration/V1_0__create_employee_schema.sql (77%) rename {flyway-migration => flyway}/db/migration/V2_0__create_department_schema.sql (70%) rename {flyway-migration => flyway}/myFlywayConfig.properties (69%) rename {flyway-migration => flyway}/pom.xml (90%) diff --git a/flyway-migration/.gitignore b/flyway/.gitignore similarity index 75% rename from flyway-migration/.gitignore rename to flyway/.gitignore index abffe04ed2..9cdd5b9542 100644 --- a/flyway-migration/.gitignore +++ b/flyway/.gitignore @@ -1,4 +1,4 @@ -.classpath -.project -.settings +.classpath +.project +.settings target/ \ No newline at end of file diff --git a/flyway-migration/README.MD b/flyway/README.MD similarity index 100% rename from flyway-migration/README.MD rename to flyway/README.MD diff --git a/flyway-migration/db/migration/V1_0__create_employee_schema.sql b/flyway/db/migration/V1_0__create_employee_schema.sql similarity index 77% rename from flyway-migration/db/migration/V1_0__create_employee_schema.sql rename to flyway/db/migration/V1_0__create_employee_schema.sql index 09408faecb..b6167bfacc 100644 --- a/flyway-migration/db/migration/V1_0__create_employee_schema.sql +++ b/flyway/db/migration/V1_0__create_employee_schema.sql @@ -1,8 +1,8 @@ -CREATE TABLE IF NOT EXISTS `employee` ( - -`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, -`name` varchar(20), -`email` varchar(50), -`date_of_birth` timestamp - +CREATE TABLE IF NOT EXISTS `employee` ( + +`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, +`name` varchar(20), +`email` varchar(50), +`date_of_birth` timestamp + )ENGINE=InnoDB DEFAULT CHARSET=UTF8; \ No newline at end of file diff --git a/flyway-migration/db/migration/V2_0__create_department_schema.sql b/flyway/db/migration/V2_0__create_department_schema.sql similarity index 70% rename from flyway-migration/db/migration/V2_0__create_department_schema.sql rename to flyway/db/migration/V2_0__create_department_schema.sql index 2b9d3364a5..c85cc81353 100644 --- a/flyway-migration/db/migration/V2_0__create_department_schema.sql +++ b/flyway/db/migration/V2_0__create_department_schema.sql @@ -1,8 +1,8 @@ -CREATE TABLE IF NOT EXISTS `department` ( - -`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, -`name` varchar(20) - -)ENGINE=InnoDB DEFAULT CHARSET=UTF8; - +CREATE TABLE IF NOT EXISTS `department` ( + +`id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, +`name` varchar(20) + +)ENGINE=InnoDB DEFAULT CHARSET=UTF8; + ALTER TABLE `employee` ADD `dept_id` int AFTER `email`; \ No newline at end of file diff --git a/flyway-migration/myFlywayConfig.properties b/flyway/myFlywayConfig.properties similarity index 69% rename from flyway-migration/myFlywayConfig.properties rename to flyway/myFlywayConfig.properties index 22f3afefd3..8bb102930a 100644 --- a/flyway-migration/myFlywayConfig.properties +++ b/flyway/myFlywayConfig.properties @@ -1,5 +1,5 @@ -flyway.user=root -flyway.password=mysql -flyway.schemas=app-db -flyway.url=jdbc:mysql://localhost:3306/ +flyway.user=root +flyway.password=mysql +flyway.schemas=app-db +flyway.url=jdbc:mysql://localhost:3306/ flyway.locations=filesystem:db/migration \ No newline at end of file diff --git a/flyway-migration/pom.xml b/flyway/pom.xml similarity index 90% rename from flyway-migration/pom.xml rename to flyway/pom.xml index 6e9d683a0e..d53bc7dc41 100644 --- a/flyway-migration/pom.xml +++ b/flyway/pom.xml @@ -1,34 +1,34 @@ - - 4.0.0 - com.baeldung - flyway-migration - 1.0 - flyway-migration - A sample project to demonstrate Flyway migrations - - - mysql - mysql-connector-java - 6.0.3 - - - - - - org.flywaydb - flyway-maven-plugin - 4.0.3 - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - + + 4.0.0 + com.baeldung + flyway + 1.0 + flyway + A sample project to demonstrate Flyway migrations + + + mysql + mysql-connector-java + 6.0.3 + + + + + + org.flywaydb + flyway-maven-plugin + 4.0.3 + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 71d12fddcf..bec40024b7 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,8 @@ feign-client + flyway + gson guava guava18 From 9055ecbc6fc56e563eead2fc1ae615621e304af3 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 19:10:16 +0200 Subject: [PATCH 252/309] Rename xmlunit2-tutorial -> xmlunit2 --- pom.xml | 1 + {xmlunit2-tutorial => xmlunit2}/README.md | 0 {xmlunit2-tutorial => xmlunit2}/pom.xml | 2 +- .../baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java | 0 .../src/test/java/com/baeldung/xmlunit/XMLUnitTest.java | 0 {xmlunit2-tutorial => xmlunit2}/src/test/resources/control.xml | 0 {xmlunit2-tutorial => xmlunit2}/src/test/resources/students.xml | 0 {xmlunit2-tutorial => xmlunit2}/src/test/resources/students.xsd | 0 .../src/test/resources/students_with_error.xml | 0 {xmlunit2-tutorial => xmlunit2}/src/test/resources/teachers.xml | 0 {xmlunit2-tutorial => xmlunit2}/src/test/resources/test.xml | 0 11 files changed, 2 insertions(+), 1 deletion(-) rename {xmlunit2-tutorial => xmlunit2}/README.md (100%) rename {xmlunit2-tutorial => xmlunit2}/pom.xml (96%) rename {xmlunit2-tutorial => xmlunit2}/src/main/java/com/baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java (100%) rename {xmlunit2-tutorial => xmlunit2}/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java (100%) rename {xmlunit2-tutorial => xmlunit2}/src/test/resources/control.xml (100%) rename {xmlunit2-tutorial => xmlunit2}/src/test/resources/students.xml (100%) rename {xmlunit2-tutorial => xmlunit2}/src/test/resources/students.xsd (100%) rename {xmlunit2-tutorial => xmlunit2}/src/test/resources/students_with_error.xml (100%) rename {xmlunit2-tutorial => xmlunit2}/src/test/resources/teachers.xml (100%) rename {xmlunit2-tutorial => xmlunit2}/src/test/resources/test.xml (100%) diff --git a/pom.xml b/pom.xml index bec40024b7..f1c23bfb55 100644 --- a/pom.xml +++ b/pom.xml @@ -129,6 +129,7 @@ jsf xml + xmlunit2 lombok redis diff --git a/xmlunit2-tutorial/README.md b/xmlunit2/README.md similarity index 100% rename from xmlunit2-tutorial/README.md rename to xmlunit2/README.md diff --git a/xmlunit2-tutorial/pom.xml b/xmlunit2/pom.xml similarity index 96% rename from xmlunit2-tutorial/pom.xml rename to xmlunit2/pom.xml index b4cb684f65..c80e3f37b2 100644 --- a/xmlunit2-tutorial/pom.xml +++ b/xmlunit2/pom.xml @@ -2,7 +2,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 com.baeldung - xmlunit2-tutorial + xmlunit2 1.0 XMLUnit-2 diff --git a/xmlunit2-tutorial/src/main/java/com/baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java b/xmlunit2/src/main/java/com/baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java similarity index 100% rename from xmlunit2-tutorial/src/main/java/com/baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java rename to xmlunit2/src/main/java/com/baeldung/xmlunit/IgnoreAttributeDifferenceEvaluator.java diff --git a/xmlunit2-tutorial/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java b/xmlunit2/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java similarity index 100% rename from xmlunit2-tutorial/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java rename to xmlunit2/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java diff --git a/xmlunit2-tutorial/src/test/resources/control.xml b/xmlunit2/src/test/resources/control.xml similarity index 100% rename from xmlunit2-tutorial/src/test/resources/control.xml rename to xmlunit2/src/test/resources/control.xml diff --git a/xmlunit2-tutorial/src/test/resources/students.xml b/xmlunit2/src/test/resources/students.xml similarity index 100% rename from xmlunit2-tutorial/src/test/resources/students.xml rename to xmlunit2/src/test/resources/students.xml diff --git a/xmlunit2-tutorial/src/test/resources/students.xsd b/xmlunit2/src/test/resources/students.xsd similarity index 100% rename from xmlunit2-tutorial/src/test/resources/students.xsd rename to xmlunit2/src/test/resources/students.xsd diff --git a/xmlunit2-tutorial/src/test/resources/students_with_error.xml b/xmlunit2/src/test/resources/students_with_error.xml similarity index 100% rename from xmlunit2-tutorial/src/test/resources/students_with_error.xml rename to xmlunit2/src/test/resources/students_with_error.xml diff --git a/xmlunit2-tutorial/src/test/resources/teachers.xml b/xmlunit2/src/test/resources/teachers.xml similarity index 100% rename from xmlunit2-tutorial/src/test/resources/teachers.xml rename to xmlunit2/src/test/resources/teachers.xml diff --git a/xmlunit2-tutorial/src/test/resources/test.xml b/xmlunit2/src/test/resources/test.xml similarity index 100% rename from xmlunit2-tutorial/src/test/resources/test.xml rename to xmlunit2/src/test/resources/test.xml From 90ca6097627098d2203675524f56e3e51b1ce380 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 19:13:21 +0200 Subject: [PATCH 253/309] Rename jee7schedule -> jee7 --- {jee7schedule => jee7}/README.md | 0 {jee7schedule => jee7}/pom.xml | 0 .../baeldung/timer/AutomaticTimerBean.java | 0 .../baeldung/timer/FixedDelayTimerBean.java | 0 .../ProgrammaticAtFixedRateTimerBean.java | 0 .../baeldung/timer/ProgrammaticTimerBean.java | 0 ...ammaticWithInitialFixedDelayTimerBean.java | 0 .../com/baeldung/timer/ScheduleTimerBean.java | 0 .../java/com/baeldung/timer/TimerEvent.java | 0 .../baeldung/timer/TimerEventListener.java | 0 .../java/com/baeldung/timer/WorkerBean.java | 0 .../src/main/webapp/WEB-INF/beans.xml | 0 .../timer/AutomaticTimerBeanTest.java | 0 .../ProgrammaticAtFixedRateTimerBeanTest.java | 0 .../timer/ProgrammaticTimerBeanTest.java | 0 ...ogrammaticWithFixedDelayTimerBeanTest.java | 0 .../baeldung/timer/ScheduleTimerBeanTest.java | 0 .../baeldung/timer/WithinWindowMatcher.java | 0 pom.xml | 2 +- .../com/baeldung/xmlunit/XMLUnitTest.java | 33 ++++++++----------- 20 files changed, 14 insertions(+), 21 deletions(-) rename {jee7schedule => jee7}/README.md (100%) rename {jee7schedule => jee7}/pom.xml (100%) rename {jee7schedule => jee7}/src/main/java/com/baeldung/timer/AutomaticTimerBean.java (100%) rename {jee7schedule => jee7}/src/main/java/com/baeldung/timer/FixedDelayTimerBean.java (100%) rename {jee7schedule => jee7}/src/main/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBean.java (100%) rename {jee7schedule => jee7}/src/main/java/com/baeldung/timer/ProgrammaticTimerBean.java (100%) rename {jee7schedule => jee7}/src/main/java/com/baeldung/timer/ProgrammaticWithInitialFixedDelayTimerBean.java (100%) rename {jee7schedule => jee7}/src/main/java/com/baeldung/timer/ScheduleTimerBean.java (100%) rename {jee7schedule => jee7}/src/main/java/com/baeldung/timer/TimerEvent.java (100%) rename {jee7schedule => jee7}/src/main/java/com/baeldung/timer/TimerEventListener.java (100%) rename {jee7schedule => jee7}/src/main/java/com/baeldung/timer/WorkerBean.java (100%) rename {jee7schedule => jee7}/src/main/webapp/WEB-INF/beans.xml (100%) rename {jee7schedule => jee7}/src/test/java/com/baeldung/timer/AutomaticTimerBeanTest.java (100%) rename {jee7schedule => jee7}/src/test/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBeanTest.java (100%) rename {jee7schedule => jee7}/src/test/java/com/baeldung/timer/ProgrammaticTimerBeanTest.java (100%) rename {jee7schedule => jee7}/src/test/java/com/baeldung/timer/ProgrammaticWithFixedDelayTimerBeanTest.java (100%) rename {jee7schedule => jee7}/src/test/java/com/baeldung/timer/ScheduleTimerBeanTest.java (100%) rename {jee7schedule => jee7}/src/test/java/com/baeldung/timer/WithinWindowMatcher.java (100%) diff --git a/jee7schedule/README.md b/jee7/README.md similarity index 100% rename from jee7schedule/README.md rename to jee7/README.md diff --git a/jee7schedule/pom.xml b/jee7/pom.xml similarity index 100% rename from jee7schedule/pom.xml rename to jee7/pom.xml diff --git a/jee7schedule/src/main/java/com/baeldung/timer/AutomaticTimerBean.java b/jee7/src/main/java/com/baeldung/timer/AutomaticTimerBean.java similarity index 100% rename from jee7schedule/src/main/java/com/baeldung/timer/AutomaticTimerBean.java rename to jee7/src/main/java/com/baeldung/timer/AutomaticTimerBean.java diff --git a/jee7schedule/src/main/java/com/baeldung/timer/FixedDelayTimerBean.java b/jee7/src/main/java/com/baeldung/timer/FixedDelayTimerBean.java similarity index 100% rename from jee7schedule/src/main/java/com/baeldung/timer/FixedDelayTimerBean.java rename to jee7/src/main/java/com/baeldung/timer/FixedDelayTimerBean.java diff --git a/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBean.java b/jee7/src/main/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBean.java similarity index 100% rename from jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBean.java rename to jee7/src/main/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBean.java diff --git a/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticTimerBean.java b/jee7/src/main/java/com/baeldung/timer/ProgrammaticTimerBean.java similarity index 100% rename from jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticTimerBean.java rename to jee7/src/main/java/com/baeldung/timer/ProgrammaticTimerBean.java diff --git a/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticWithInitialFixedDelayTimerBean.java b/jee7/src/main/java/com/baeldung/timer/ProgrammaticWithInitialFixedDelayTimerBean.java similarity index 100% rename from jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticWithInitialFixedDelayTimerBean.java rename to jee7/src/main/java/com/baeldung/timer/ProgrammaticWithInitialFixedDelayTimerBean.java diff --git a/jee7schedule/src/main/java/com/baeldung/timer/ScheduleTimerBean.java b/jee7/src/main/java/com/baeldung/timer/ScheduleTimerBean.java similarity index 100% rename from jee7schedule/src/main/java/com/baeldung/timer/ScheduleTimerBean.java rename to jee7/src/main/java/com/baeldung/timer/ScheduleTimerBean.java diff --git a/jee7schedule/src/main/java/com/baeldung/timer/TimerEvent.java b/jee7/src/main/java/com/baeldung/timer/TimerEvent.java similarity index 100% rename from jee7schedule/src/main/java/com/baeldung/timer/TimerEvent.java rename to jee7/src/main/java/com/baeldung/timer/TimerEvent.java diff --git a/jee7schedule/src/main/java/com/baeldung/timer/TimerEventListener.java b/jee7/src/main/java/com/baeldung/timer/TimerEventListener.java similarity index 100% rename from jee7schedule/src/main/java/com/baeldung/timer/TimerEventListener.java rename to jee7/src/main/java/com/baeldung/timer/TimerEventListener.java diff --git a/jee7schedule/src/main/java/com/baeldung/timer/WorkerBean.java b/jee7/src/main/java/com/baeldung/timer/WorkerBean.java similarity index 100% rename from jee7schedule/src/main/java/com/baeldung/timer/WorkerBean.java rename to jee7/src/main/java/com/baeldung/timer/WorkerBean.java diff --git a/jee7schedule/src/main/webapp/WEB-INF/beans.xml b/jee7/src/main/webapp/WEB-INF/beans.xml similarity index 100% rename from jee7schedule/src/main/webapp/WEB-INF/beans.xml rename to jee7/src/main/webapp/WEB-INF/beans.xml diff --git a/jee7schedule/src/test/java/com/baeldung/timer/AutomaticTimerBeanTest.java b/jee7/src/test/java/com/baeldung/timer/AutomaticTimerBeanTest.java similarity index 100% rename from jee7schedule/src/test/java/com/baeldung/timer/AutomaticTimerBeanTest.java rename to jee7/src/test/java/com/baeldung/timer/AutomaticTimerBeanTest.java diff --git a/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBeanTest.java b/jee7/src/test/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBeanTest.java similarity index 100% rename from jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBeanTest.java rename to jee7/src/test/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBeanTest.java diff --git a/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticTimerBeanTest.java b/jee7/src/test/java/com/baeldung/timer/ProgrammaticTimerBeanTest.java similarity index 100% rename from jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticTimerBeanTest.java rename to jee7/src/test/java/com/baeldung/timer/ProgrammaticTimerBeanTest.java diff --git a/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticWithFixedDelayTimerBeanTest.java b/jee7/src/test/java/com/baeldung/timer/ProgrammaticWithFixedDelayTimerBeanTest.java similarity index 100% rename from jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticWithFixedDelayTimerBeanTest.java rename to jee7/src/test/java/com/baeldung/timer/ProgrammaticWithFixedDelayTimerBeanTest.java diff --git a/jee7schedule/src/test/java/com/baeldung/timer/ScheduleTimerBeanTest.java b/jee7/src/test/java/com/baeldung/timer/ScheduleTimerBeanTest.java similarity index 100% rename from jee7schedule/src/test/java/com/baeldung/timer/ScheduleTimerBeanTest.java rename to jee7/src/test/java/com/baeldung/timer/ScheduleTimerBeanTest.java diff --git a/jee7schedule/src/test/java/com/baeldung/timer/WithinWindowMatcher.java b/jee7/src/test/java/com/baeldung/timer/WithinWindowMatcher.java similarity index 100% rename from jee7schedule/src/test/java/com/baeldung/timer/WithinWindowMatcher.java rename to jee7/src/test/java/com/baeldung/timer/WithinWindowMatcher.java diff --git a/pom.xml b/pom.xml index f1c23bfb55..4e8b54446d 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ json json-path junit5 - jee7schedule + jee7 log4j diff --git a/xmlunit2/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java b/xmlunit2/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java index 175250f47b..5af3d48433 100644 --- a/xmlunit2/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java +++ b/xmlunit2/src/test/java/com/baeldung/xmlunit/XMLUnitTest.java @@ -1,37 +1,30 @@ package com.baeldung.xmlunit; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.equalTo; -import static org.hamcrest.Matchers.greaterThan; -import static org.hamcrest.core.IsNot.not; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.xmlunit.matchers.CompareMatcher.isIdenticalTo; -import static org.xmlunit.matchers.CompareMatcher.isSimilarTo; -import static org.xmlunit.matchers.HasXPathMatcher.hasXPath; - -import java.io.File; -import java.util.Iterator; - import org.junit.Ignore; import org.junit.Test; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.xmlunit.builder.DiffBuilder; import org.xmlunit.builder.Input; -import org.xmlunit.diff.ComparisonControllers; -import org.xmlunit.diff.DefaultNodeMatcher; -import org.xmlunit.diff.Diff; -import org.xmlunit.diff.Difference; -import org.xmlunit.diff.ElementSelectors; +import org.xmlunit.diff.*; import org.xmlunit.validation.Languages; import org.xmlunit.validation.ValidationProblem; import org.xmlunit.validation.ValidationResult; import org.xmlunit.validation.Validator; import org.xmlunit.xpath.JAXPXPathEngine; +import java.io.File; +import java.util.Iterator; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.greaterThan; +import static org.hamcrest.core.IsNot.not; +import static org.junit.Assert.*; +import static org.xmlunit.matchers.CompareMatcher.isIdenticalTo; +import static org.xmlunit.matchers.CompareMatcher.isSimilarTo; +import static org.xmlunit.matchers.HasXPathMatcher.hasXPath; + public class XMLUnitTest { @Test public void givenWrongXml_whenValidateFailsAgainstXsd_thenCorrect() { From 7df435bb6fa0e59aa3835d6fb845a7667b191607 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 19:15:31 +0200 Subject: [PATCH 254/309] Rename feign-client -> feign --- {feign-client => feign}/README.md | 0 {feign-client => feign}/pom.xml | 0 .../com/baeldung/feign/BookControllerFeignClientBuilder.java | 0 .../src/main/java/com/baeldung/feign/clients/BookClient.java | 0 .../src/main/java/com/baeldung/feign/models/Book.java | 0 .../src/main/java/com/baeldung/feign/models/BookResource.java | 0 {feign-client => feign}/src/main/resources/log4j2.xml | 0 .../test/java/com/baeldung/feign/clients/BookClientTest.java | 0 pom.xml | 2 +- 9 files changed, 1 insertion(+), 1 deletion(-) rename {feign-client => feign}/README.md (100%) rename {feign-client => feign}/pom.xml (100%) rename {feign-client => feign}/src/main/java/com/baeldung/feign/BookControllerFeignClientBuilder.java (100%) rename {feign-client => feign}/src/main/java/com/baeldung/feign/clients/BookClient.java (100%) rename {feign-client => feign}/src/main/java/com/baeldung/feign/models/Book.java (100%) rename {feign-client => feign}/src/main/java/com/baeldung/feign/models/BookResource.java (100%) rename {feign-client => feign}/src/main/resources/log4j2.xml (100%) rename {feign-client => feign}/src/test/java/com/baeldung/feign/clients/BookClientTest.java (100%) diff --git a/feign-client/README.md b/feign/README.md similarity index 100% rename from feign-client/README.md rename to feign/README.md diff --git a/feign-client/pom.xml b/feign/pom.xml similarity index 100% rename from feign-client/pom.xml rename to feign/pom.xml diff --git a/feign-client/src/main/java/com/baeldung/feign/BookControllerFeignClientBuilder.java b/feign/src/main/java/com/baeldung/feign/BookControllerFeignClientBuilder.java similarity index 100% rename from feign-client/src/main/java/com/baeldung/feign/BookControllerFeignClientBuilder.java rename to feign/src/main/java/com/baeldung/feign/BookControllerFeignClientBuilder.java diff --git a/feign-client/src/main/java/com/baeldung/feign/clients/BookClient.java b/feign/src/main/java/com/baeldung/feign/clients/BookClient.java similarity index 100% rename from feign-client/src/main/java/com/baeldung/feign/clients/BookClient.java rename to feign/src/main/java/com/baeldung/feign/clients/BookClient.java diff --git a/feign-client/src/main/java/com/baeldung/feign/models/Book.java b/feign/src/main/java/com/baeldung/feign/models/Book.java similarity index 100% rename from feign-client/src/main/java/com/baeldung/feign/models/Book.java rename to feign/src/main/java/com/baeldung/feign/models/Book.java diff --git a/feign-client/src/main/java/com/baeldung/feign/models/BookResource.java b/feign/src/main/java/com/baeldung/feign/models/BookResource.java similarity index 100% rename from feign-client/src/main/java/com/baeldung/feign/models/BookResource.java rename to feign/src/main/java/com/baeldung/feign/models/BookResource.java diff --git a/feign-client/src/main/resources/log4j2.xml b/feign/src/main/resources/log4j2.xml similarity index 100% rename from feign-client/src/main/resources/log4j2.xml rename to feign/src/main/resources/log4j2.xml diff --git a/feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java b/feign/src/test/java/com/baeldung/feign/clients/BookClientTest.java similarity index 100% rename from feign-client/src/test/java/com/baeldung/feign/clients/BookClientTest.java rename to feign/src/test/java/com/baeldung/feign/clients/BookClientTest.java diff --git a/pom.xml b/pom.xml index 4e8b54446d..0de16500d6 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ deltaspike patterns - feign-client + feign flyway From 62c6abfb4aa5c43020e60397d7652f0dbbfb66d0 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 19:49:03 +0200 Subject: [PATCH 255/309] Move Java8 Collectors example --- core-java-8/README.md | 1 - core-java/README.md | 1 + .../test/java/com/baeldung/collectors/Java8CollectorsTest.java | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename {core-java-8 => core-java}/src/test/java/com/baeldung/collectors/Java8CollectorsTest.java (100%) diff --git a/core-java-8/README.md b/core-java-8/README.md index c130e6bd41..300d6ce33b 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -11,7 +11,6 @@ - [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips) - [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator) - [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams) -- [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) - [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) - [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) - [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) diff --git a/core-java/README.md b/core-java/README.md index fbbfa65589..a9310c1c16 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -19,3 +19,4 @@ - [Guide to the Java ArrayList](http://www.baeldung.com/java-arraylist) - [Guide to Java Reflection](http://www.baeldung.com/java-reflection) - [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets) +- [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) diff --git a/core-java-8/src/test/java/com/baeldung/collectors/Java8CollectorsTest.java b/core-java/src/test/java/com/baeldung/collectors/Java8CollectorsTest.java similarity index 100% rename from core-java-8/src/test/java/com/baeldung/collectors/Java8CollectorsTest.java rename to core-java/src/test/java/com/baeldung/collectors/Java8CollectorsTest.java From 93256245ffdff3a698587a0153f54862b80fee2c Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 19:53:01 +0200 Subject: [PATCH 256/309] Move CompletableFuture examples --- core-java-8/README.md | 1 - core-java/README.md | 1 + .../com/baeldung/completablefuture/CompletableFutureTest.java | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename {core-java-8 => core-java}/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java (100%) diff --git a/core-java-8/README.md b/core-java-8/README.md index 300d6ce33b..3d1d89896f 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -14,7 +14,6 @@ - [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) - [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) - [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) -- [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture) - [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava) - [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors) - [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams) diff --git a/core-java/README.md b/core-java/README.md index a9310c1c16..6671d7c2f4 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -20,3 +20,4 @@ - [Guide to Java Reflection](http://www.baeldung.com/java-reflection) - [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets) - [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) +- [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture) diff --git a/core-java-8/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java similarity index 100% rename from core-java-8/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java rename to core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java From 6dc9bcf33104b02564d74397cf4e49ef0c57c044 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 19:55:41 +0200 Subject: [PATCH 257/309] Move FunctionalInterfaces examples --- core-java-8/README.md | 1 - core-java/README.md | 1 + .../functionalinterface/FunctionalInterfaceTest.java | 6 +++--- .../baeldung/functionalinterface/ShortToByteFunction.java | 0 4 files changed, 4 insertions(+), 4 deletions(-) rename {core-java-8 => core-java}/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java (100%) rename {core-java-8 => core-java}/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java (100%) diff --git a/core-java-8/README.md b/core-java-8/README.md index 3d1d89896f..a835914b4d 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -13,7 +13,6 @@ - [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams) - [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) - [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) -- [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) - [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava) - [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors) - [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams) diff --git a/core-java/README.md b/core-java/README.md index 6671d7c2f4..c18e6670ca 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -21,3 +21,4 @@ - [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets) - [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) - [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture) +- [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) diff --git a/core-java-8/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java b/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java similarity index 100% rename from core-java-8/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java rename to core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java index ce878026d4..e07bcc9a8d 100644 --- a/core-java-8/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java +++ b/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java @@ -1,5 +1,8 @@ package com.baeldung.functionalinterface; +import com.google.common.util.concurrent.Uninterruptibles; +import org.junit.Test; + import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -10,9 +13,6 @@ import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; -import com.google.common.util.concurrent.Uninterruptibles; -import org.junit.Test; - import static org.junit.Assert.*; public class FunctionalInterfaceTest { diff --git a/core-java-8/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java b/core-java/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java similarity index 100% rename from core-java-8/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java rename to core-java/src/test/java/com/baeldung/functionalinterface/ShortToByteFunction.java From 6c3019540589d574f6dd3d7456ad6fd462e1c8b1 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sun, 23 Oct 2016 20:26:51 +0200 Subject: [PATCH 258/309] minor fix --- apache-cxf/cxf-introduction/pom.xml | 63 +------------------ .../cxf/introduction/StudentLiveTest.java | 2 +- apache-cxf/cxf-jaxrs-implementation/pom.xml | 62 ------------------ .../jaxrs/implementation/ServiceLiveTest.java | 2 +- 4 files changed, 3 insertions(+), 126 deletions(-) diff --git a/apache-cxf/cxf-introduction/pom.xml b/apache-cxf/cxf-introduction/pom.xml index 9629dfda1b..0902bd690e 100644 --- a/apache-cxf/cxf-introduction/pom.xml +++ b/apache-cxf/cxf-introduction/pom.xml @@ -45,66 +45,5 @@ ${cxf.version} - - - - live - - - - org.codehaus.cargo - cargo-maven2-plugin - 1.4.19 - - - tomcat8x - embedded - - - - localhost - 8082 - - - - - - start-server - pre-integration-test - - start - - - - stop-server - post-integration-test - - stop - - - - - - - maven-surefire-plugin - ${surefire.version} - - - integration-test - - test - - - - none - - - - - - - - - - + diff --git a/apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentLiveTest.java b/apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentLiveTest.java index 1c50fcb9b6..60fc0a10e7 100644 --- a/apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentLiveTest.java +++ b/apache-cxf/cxf-introduction/src/test/java/com/baeldung/cxf/introduction/StudentLiveTest.java @@ -21,7 +21,7 @@ public class StudentLiveTest { { service = Service.create(SERVICE_NAME); - final String endpointAddress = "http://localhost:8082/cxf-introduction/baeldung"; + final String endpointAddress = "http://localhost:8080/baeldung"; service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress); } diff --git a/apache-cxf/cxf-jaxrs-implementation/pom.xml b/apache-cxf/cxf-jaxrs-implementation/pom.xml index 24dad05a0f..b3a81aef82 100644 --- a/apache-cxf/cxf-jaxrs-implementation/pom.xml +++ b/apache-cxf/cxf-jaxrs-implementation/pom.xml @@ -52,66 +52,4 @@ ${httpclient.version} - - - - live - - - - org.codehaus.cargo - cargo-maven2-plugin - 1.4.19 - - - tomcat8x - embedded - - - - localhost - 8082 - - - - - - start-server - pre-integration-test - - start - - - - stop-server - post-integration-test - - stop - - - - - - - maven-surefire-plugin - ${surefire.version} - - - integration-test - - test - - - - none - - - - - - - - - - diff --git a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceLiveTest.java b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceLiveTest.java index 692def81f5..29c34ae16b 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceLiveTest.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/test/java/com/baeldung/cxf/jaxrs/implementation/ServiceLiveTest.java @@ -21,7 +21,7 @@ import org.junit.BeforeClass; import org.junit.Test; public class ServiceLiveTest { - private static final String BASE_URL = "http://localhost:8082/baeldung/courses/"; + private static final String BASE_URL = "http://localhost:8080/baeldung/courses/"; private static CloseableHttpClient client; @BeforeClass From 709b24257f36d16321c69c3d8ff21c31fcec8b21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ambrus=20Adri=C3=A1n-Zolt=C3=A1n?= Date: Sun, 23 Oct 2016 21:41:28 +0300 Subject: [PATCH 259/309] Further simplified the vote method. --- .../org/baeldung/security/MinuteBasedVoter.java | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java index 8d22c52b0d..e0f42aa16e 100644 --- a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java +++ b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java @@ -23,16 +23,13 @@ public class MinuteBasedVoter implements AccessDecisionVoter { @Override public int vote(Authentication authentication, Object object, Collection collection) { - List roles = authentication + return authentication .getAuthorities() - .stream().map(GrantedAuthority::getAuthority) - .collect(Collectors.toList()); - - for (String role: roles) { - if ("ROLE_USER".equals(role) && LocalDateTime.now().getMinute() % 2 != 0) { - return ACCESS_DENIED; - } - } - return ACCESS_ABSTAIN; + .stream() + .map(GrantedAuthority::getAuthority) + .filter(r -> "ROLE_USER".equals(r) && LocalDateTime.now().getMinute() % 2 != 0) + .findAny() + .map(s -> ACCESS_DENIED) + .orElseGet(() -> ACCESS_ABSTAIN); } } From fe620ec01ac20a562a79a259ab25fd4f930c0889 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sun, 23 Oct 2016 21:11:03 +0200 Subject: [PATCH 260/309] rename test --- spring-exceptions/pom.xml | 2 +- .../BeanCreationExceptionTestSuite.java | 18 +++++++++--------- ...Cause1BeanCreationExceptionManualTest.java} | 2 +- ...Cause2BeanCreationExceptionManualTest.java} | 2 +- ...Cause3BeanCreationExceptionManualTest.java} | 2 +- ...Cause4BeanCreationExceptionManualTest.java} | 2 +- ...Cause5BeanCreationExceptionManualTest.java} | 2 +- ...Cause6BeanCreationExceptionManualTest.java} | 2 +- ...Cause7BeanCreationExceptionManualTest.java} | 2 +- ...Cause8BeanCreationExceptionManualTest.java} | 2 +- ...Cause9BeanCreationExceptionManualTest.java} | 2 +- ...eanDefinitionStoreExceptionManualTest.java} | 2 +- ...eanDefinitionStoreExceptionManualTest.java} | 2 +- ...eanDefinitionStoreExceptionManualTest.java} | 2 +- ...IntegrityViolationExceptionManualTest.java} | 2 +- ...IntegrityViolationExceptionManualTest.java} | 2 +- ...IntegrityViolationExceptionManualTest.java} | 2 +- ...a => Cause1MappingExceptionManualTest.java} | 2 +- ...a => Cause2MappingExceptionManualTest.java} | 2 +- ...a => Cause3MappingExceptionManualTest.java} | 2 +- ...a => Cause4MappingExceptionManualTest.java} | 2 +- ...tGetJdbcConnectionExceptionManualTest.java} | 2 +- ...a => DataIntegrityExceptionManualTest.java} | 2 +- ...a => DataRetrievalExceptionManualTest.java} | 2 +- ...> DataSourceLookupExceptionManualTest.java} | 2 +- ...validResourceUsageExceptionManualTest.java} | 2 +- ...SuchBeanDefinitionExceptionManualTest.java} | 2 +- ...SuchBeanDefinitionExceptionManualTest.java} | 2 +- ...SuchBeanDefinitionExceptionManualTest.java} | 2 +- ....java => PropertiesWithJavaManualTest.java} | 2 +- ... PropertiesWithMultipleXmlsManualTest.java} | 2 +- ...t.java => PropertiesWithXmlManualTest.java} | 2 +- 32 files changed, 40 insertions(+), 40 deletions(-) rename spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/{Cause1BeanCreationExceptionIntegrationTest.java => Cause1BeanCreationExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/{Cause2BeanCreationExceptionIntegrationTest.java => Cause2BeanCreationExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/{Cause3BeanCreationExceptionIntegrationTest.java => Cause3BeanCreationExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/{Cause4BeanCreationExceptionIntegrationTest.java => Cause4BeanCreationExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/{Cause5BeanCreationExceptionIntegrationTest.java => Cause5BeanCreationExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/{Cause6BeanCreationExceptionIntegrationTest.java => Cause6BeanCreationExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/{Cause7BeanCreationExceptionIntegrationTest.java => Cause7BeanCreationExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/{Cause8BeanCreationExceptionIntegrationTest.java => Cause8BeanCreationExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/{Cause9BeanCreationExceptionIntegrationTest.java => Cause9BeanCreationExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/{Cause1BeanDefinitionStoreExceptionIntegrationTest.java => Cause1BeanDefinitionStoreExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/{Cause2BeanDefinitionStoreExceptionIntegrationTest.java => Cause2BeanDefinitionStoreExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/{Cause3BeanDefinitionStoreExceptionIntegrationTest.java => Cause3BeanDefinitionStoreExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/{Cause1DataIntegrityViolationExceptionIntegrationTest.java => Cause1DataIntegrityViolationExceptionManualTest.java} (96%) rename spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/{Cause2DataIntegrityViolationExceptionIntegrationTest.java => Cause2DataIntegrityViolationExceptionManualTest.java} (93%) rename spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/{Cause3DataIntegrityViolationExceptionIntegrationTest.java => Cause3DataIntegrityViolationExceptionManualTest.java} (94%) rename spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/{Cause1MappingExceptionIntegrationTest.java => Cause1MappingExceptionManualTest.java} (95%) rename spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/{Cause2MappingExceptionIntegrationTest.java => Cause2MappingExceptionManualTest.java} (95%) rename spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/{Cause3MappingExceptionIntegrationTest.java => Cause3MappingExceptionManualTest.java} (95%) rename spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/{Cause4MappingExceptionIntegrationTest.java => Cause4MappingExceptionManualTest.java} (96%) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{CannotGetJdbcConnectionExceptionIntegrationTest.java => CannotGetJdbcConnectionExceptionManualTest.java} (95%) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{DataIntegrityExceptionIntegrationTest.java => DataIntegrityExceptionManualTest.java} (96%) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{DataRetrievalExceptionIntegrationTest.java => DataRetrievalExceptionManualTest.java} (97%) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{DataSourceLookupExceptionIntegrationTest.java => DataSourceLookupExceptionManualTest.java} (95%) rename spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/{InvalidResourceUsageExceptionIntegrationTest.java => InvalidResourceUsageExceptionManualTest.java} (96%) rename spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/{Cause1NoSuchBeanDefinitionExceptionIntegrationTest.java => Cause1NoSuchBeanDefinitionExceptionManualTest.java} (93%) rename spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/{Cause2NoSuchBeanDefinitionExceptionIntegrationTest.java => Cause2NoSuchBeanDefinitionExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/{Cause3NoSuchBeanDefinitionExceptionIntegrationTest.java => Cause3NoSuchBeanDefinitionExceptionManualTest.java} (91%) rename spring-exceptions/src/test/java/org/baeldung/properties/core/{PropertiesWithJavaIntegrationTest.java => PropertiesWithJavaManualTest.java} (95%) rename spring-exceptions/src/test/java/org/baeldung/properties/core/{PropertiesWithMultipleXmlsIntegrationTest.java => PropertiesWithMultipleXmlsManualTest.java} (95%) rename spring-exceptions/src/test/java/org/baeldung/properties/core/{PropertiesWithXmlIntegrationTest.java => PropertiesWithXmlManualTest.java} (95%) diff --git a/spring-exceptions/pom.xml b/spring-exceptions/pom.xml index 12b7e5de79..6994a518fe 100644 --- a/spring-exceptions/pom.xml +++ b/spring-exceptions/pom.xml @@ -194,7 +194,7 @@ ${maven-surefire-plugin.version} - **/*IntegrationTest.java + **/*ManualTest.java diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/BeanCreationExceptionTestSuite.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/BeanCreationExceptionTestSuite.java index f88138fec2..9597c09568 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/BeanCreationExceptionTestSuite.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/BeanCreationExceptionTestSuite.java @@ -5,15 +5,15 @@ import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ // @formatter:off - Cause1BeanCreationExceptionIntegrationTest.class - ,Cause2BeanCreationExceptionIntegrationTest.class - ,Cause3BeanCreationExceptionIntegrationTest.class - ,Cause4BeanCreationExceptionIntegrationTest.class - ,Cause5BeanCreationExceptionIntegrationTest.class - ,Cause6BeanCreationExceptionIntegrationTest.class - ,Cause7BeanCreationExceptionIntegrationTest.class - ,Cause8BeanCreationExceptionIntegrationTest.class - ,Cause9BeanCreationExceptionIntegrationTest.class + Cause1BeanCreationExceptionManualTest.class + ,Cause2BeanCreationExceptionManualTest.class + ,Cause3BeanCreationExceptionManualTest.class + ,Cause4BeanCreationExceptionManualTest.class + ,Cause5BeanCreationExceptionManualTest.class + ,Cause6BeanCreationExceptionManualTest.class + ,Cause7BeanCreationExceptionManualTest.class + ,Cause8BeanCreationExceptionManualTest.class + ,Cause9BeanCreationExceptionManualTest.class }) // @formatter:on public class BeanCreationExceptionTestSuite { // diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause1BeanCreationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause1BeanCreationExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause1BeanCreationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause1BeanCreationExceptionManualTest.java index 56d916e25d..350347bb19 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause1BeanCreationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause1BeanCreationExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause1BeanCreationExceptionIntegrationTest { +public class Cause1BeanCreationExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause2BeanCreationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause2BeanCreationExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause2BeanCreationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause2BeanCreationExceptionManualTest.java index 968e7312de..c2b9561848 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause2BeanCreationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause2BeanCreationExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause2ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause2BeanCreationExceptionIntegrationTest { +public class Cause2BeanCreationExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause3BeanCreationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause3BeanCreationExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause3BeanCreationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause3BeanCreationExceptionManualTest.java index 4730d59334..7b9b49bf58 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause3BeanCreationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause3BeanCreationExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause3ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause3BeanCreationExceptionIntegrationTest { +public class Cause3BeanCreationExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause4BeanCreationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause4BeanCreationExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause4BeanCreationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause4BeanCreationExceptionManualTest.java index b5108c1ab4..3a6e30476c 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause4BeanCreationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause4BeanCreationExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause4ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause4BeanCreationExceptionIntegrationTest { +public class Cause4BeanCreationExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause5BeanCreationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause5BeanCreationExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause5BeanCreationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause5BeanCreationExceptionManualTest.java index 9a08ec45a1..e69a323f8d 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause5BeanCreationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause5BeanCreationExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause5ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause5BeanCreationExceptionIntegrationTest { +public class Cause5BeanCreationExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause6BeanCreationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause6BeanCreationExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause6BeanCreationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause6BeanCreationExceptionManualTest.java index 423a0a98a9..30fbd47635 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause6BeanCreationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause6BeanCreationExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause6ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause6BeanCreationExceptionIntegrationTest { +public class Cause6BeanCreationExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause7BeanCreationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause7BeanCreationExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause7BeanCreationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause7BeanCreationExceptionManualTest.java index a61e598b41..d832bddf72 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause7BeanCreationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause7BeanCreationExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause7ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause7BeanCreationExceptionIntegrationTest { +public class Cause7BeanCreationExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause8BeanCreationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause8BeanCreationExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause8BeanCreationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause8BeanCreationExceptionManualTest.java index 8550f307d5..a9f32b6d1a 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause8BeanCreationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause8BeanCreationExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause8ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause8BeanCreationExceptionIntegrationTest { +public class Cause8BeanCreationExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause9BeanCreationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause9BeanCreationExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause9BeanCreationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause9BeanCreationExceptionManualTest.java index ad1ba5f2f1..6af5fb3712 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause9BeanCreationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beancreationexception/Cause9BeanCreationExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause9ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause9BeanCreationExceptionIntegrationTest { +public class Cause9BeanCreationExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause1BeanDefinitionStoreExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause1BeanDefinitionStoreExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause1BeanDefinitionStoreExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause1BeanDefinitionStoreExceptionManualTest.java index 8de51a4bf0..1580546fa7 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause1BeanDefinitionStoreExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause1BeanDefinitionStoreExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause1BeanDefinitionStoreExceptionIntegrationTest { +public class Cause1BeanDefinitionStoreExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause2BeanDefinitionStoreExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause2BeanDefinitionStoreExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause2BeanDefinitionStoreExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause2BeanDefinitionStoreExceptionManualTest.java index 8dbc50cda5..ce0db694dc 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause2BeanDefinitionStoreExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause2BeanDefinitionStoreExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause2ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause2BeanDefinitionStoreExceptionIntegrationTest { +public class Cause2BeanDefinitionStoreExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause3BeanDefinitionStoreExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause3BeanDefinitionStoreExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause3BeanDefinitionStoreExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause3BeanDefinitionStoreExceptionManualTest.java index 370b67e2fa..c090ac7b5f 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause3BeanDefinitionStoreExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/beandefinitionstoreexception/Cause3BeanDefinitionStoreExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause3ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause3BeanDefinitionStoreExceptionIntegrationTest { +public class Cause3BeanDefinitionStoreExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause1DataIntegrityViolationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause1DataIntegrityViolationExceptionManualTest.java similarity index 96% rename from spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause1DataIntegrityViolationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause1DataIntegrityViolationExceptionManualTest.java index 0f46481116..056e052359 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause1DataIntegrityViolationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause1DataIntegrityViolationExceptionManualTest.java @@ -15,7 +15,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1DataContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause1DataIntegrityViolationExceptionIntegrationTest { +public class Cause1DataIntegrityViolationExceptionManualTest { @Autowired private IParentService service; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause2DataIntegrityViolationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause2DataIntegrityViolationExceptionManualTest.java similarity index 93% rename from spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause2DataIntegrityViolationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause2DataIntegrityViolationExceptionManualTest.java index 0ea0dd2f28..e36a027105 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause2DataIntegrityViolationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause2DataIntegrityViolationExceptionManualTest.java @@ -13,7 +13,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause2DataContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause2DataIntegrityViolationExceptionIntegrationTest { +public class Cause2DataIntegrityViolationExceptionManualTest { @Autowired private IFooService fooService; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause3DataIntegrityViolationExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause3DataIntegrityViolationExceptionManualTest.java similarity index 94% rename from spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause3DataIntegrityViolationExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause3DataIntegrityViolationExceptionManualTest.java index 75d5793910..4194e1c9fe 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause3DataIntegrityViolationExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/dataintegrityviolationexception/Cause3DataIntegrityViolationExceptionManualTest.java @@ -15,7 +15,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause3DataContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause3DataIntegrityViolationExceptionIntegrationTest { +public class Cause3DataIntegrityViolationExceptionManualTest { @Autowired private IFooService fooService; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause1MappingExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause1MappingExceptionManualTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause1MappingExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause1MappingExceptionManualTest.java index 671b0a473e..7ba9618a77 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause1MappingExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause1MappingExceptionManualTest.java @@ -14,7 +14,7 @@ import org.springframework.transaction.annotation.Transactional; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause1MappingExceptionIntegrationTest { +public class Cause1MappingExceptionManualTest { @Autowired private SessionFactory sessionFactory; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause2MappingExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause2MappingExceptionManualTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause2MappingExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause2MappingExceptionManualTest.java index eae5ebd9a2..66923fc6a9 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause2MappingExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause2MappingExceptionManualTest.java @@ -13,7 +13,7 @@ import org.springframework.transaction.annotation.Transactional; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause2PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause2MappingExceptionIntegrationTest { +public class Cause2MappingExceptionManualTest { @Autowired private SessionFactory sessionFactory; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionManualTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionManualTest.java index d6abe7db4f..e6888d1685 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause3MappingExceptionManualTest.java @@ -14,7 +14,7 @@ import org.springframework.transaction.annotation.Transactional; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause3PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause3MappingExceptionIntegrationTest { +public class Cause3MappingExceptionManualTest { @Autowired private SessionFactory sessionFactory; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause4MappingExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause4MappingExceptionManualTest.java similarity index 96% rename from spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause4MappingExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause4MappingExceptionManualTest.java index 864da76e4b..760d082f54 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause4MappingExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/mappingexception/Cause4MappingExceptionManualTest.java @@ -12,7 +12,7 @@ import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import org.junit.Test; -public class Cause4MappingExceptionIntegrationTest { +public class Cause4MappingExceptionManualTest { // tests diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionManualTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionManualTest.java index 84038e4dcf..b7ed103394 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/CannotGetJdbcConnectionExceptionManualTest.java @@ -18,7 +18,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause5NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class CannotGetJdbcConnectionExceptionIntegrationTest { +public class CannotGetJdbcConnectionExceptionManualTest { @Autowired private DataSource restDataSource; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionManualTest.java similarity index 96% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionManualTest.java index e62a455dd4..b98a210125 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataIntegrityExceptionManualTest.java @@ -17,7 +17,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class DataIntegrityExceptionIntegrationTest { +public class DataIntegrityExceptionManualTest { @Autowired private IFooService fooService; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionManualTest.java similarity index 97% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionManualTest.java index 8a7c237708..122278580f 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataRetrievalExceptionManualTest.java @@ -17,7 +17,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class DataRetrievalExceptionIntegrationTest { +public class DataRetrievalExceptionManualTest { @Autowired private DataSource restDataSource; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionManualTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionManualTest.java index 161bf3252b..4da5f94098 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/DataSourceLookupExceptionManualTest.java @@ -13,7 +13,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause4NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class DataSourceLookupExceptionIntegrationTest { +public class DataSourceLookupExceptionManualTest { @Test(expected = DataSourceLookupFailureException.class) public void whenLookupNonExistentDataSource_thenDataSourceLookupFailureException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionManualTest.java similarity index 96% rename from spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionManualTest.java index 316efba0b9..fc420acfe9 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nontransientdataaccessexception/InvalidResourceUsageExceptionManualTest.java @@ -16,7 +16,7 @@ import javax.sql.DataSource; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1NonTransientConfig.class }, loader = AnnotationConfigContextLoader.class) -public class InvalidResourceUsageExceptionIntegrationTest { +public class InvalidResourceUsageExceptionManualTest { @Autowired private IFooService fooService; diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause1NoSuchBeanDefinitionExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause1NoSuchBeanDefinitionExceptionManualTest.java similarity index 93% rename from spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause1NoSuchBeanDefinitionExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause1NoSuchBeanDefinitionExceptionManualTest.java index 1a9711b2d6..45ffdf9096 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause1NoSuchBeanDefinitionExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause1NoSuchBeanDefinitionExceptionManualTest.java @@ -15,7 +15,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause1ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause1NoSuchBeanDefinitionExceptionIntegrationTest { +public class Cause1NoSuchBeanDefinitionExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause2NoSuchBeanDefinitionExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause2NoSuchBeanDefinitionExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause2NoSuchBeanDefinitionExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause2NoSuchBeanDefinitionExceptionManualTest.java index 90d7317f44..09ed2b4435 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause2NoSuchBeanDefinitionExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause2NoSuchBeanDefinitionExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause2ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause2NoSuchBeanDefinitionExceptionIntegrationTest { +public class Cause2NoSuchBeanDefinitionExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause3NoSuchBeanDefinitionExceptionIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause3NoSuchBeanDefinitionExceptionManualTest.java similarity index 91% rename from spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause3NoSuchBeanDefinitionExceptionIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause3NoSuchBeanDefinitionExceptionManualTest.java index 0e2123b7ff..7dc016a568 100644 --- a/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause3NoSuchBeanDefinitionExceptionIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/ex/nosuchbeandefinitionexception/Cause3NoSuchBeanDefinitionExceptionManualTest.java @@ -9,7 +9,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Cause3ContextWithJavaConfig.class }, loader = AnnotationConfigContextLoader.class) -public class Cause3NoSuchBeanDefinitionExceptionIntegrationTest { +public class Cause3NoSuchBeanDefinitionExceptionManualTest { @Test public final void givenContextIsInitialized_thenNoException() { diff --git a/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithJavaIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithJavaManualTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithJavaIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithJavaManualTest.java index d6c99502d7..91db8210b3 100644 --- a/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithJavaIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithJavaManualTest.java @@ -13,7 +13,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { PropertiesWithJavaConfig.class, PropertiesWithJavaConfigOther.class }, loader = AnnotationConfigContextLoader.class) -public class PropertiesWithJavaIntegrationTest { +public class PropertiesWithJavaManualTest { @Autowired private Environment env; diff --git a/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithMultipleXmlsIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithMultipleXmlsManualTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithMultipleXmlsIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithMultipleXmlsManualTest.java index 9fc793fc1b..201e554381 100644 --- a/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithMultipleXmlsIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithMultipleXmlsManualTest.java @@ -13,7 +13,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { PropertiesWithXmlConfigOne.class, PropertiesWithXmlConfigTwo.class }, loader = AnnotationConfigContextLoader.class) -public class PropertiesWithMultipleXmlsIntegrationTest { +public class PropertiesWithMultipleXmlsManualTest { @Autowired private Environment env; diff --git a/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithXmlIntegrationTest.java b/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithXmlManualTest.java similarity index 95% rename from spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithXmlIntegrationTest.java rename to spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithXmlManualTest.java index ff5eaab910..a54dd8a3fb 100644 --- a/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithXmlIntegrationTest.java +++ b/spring-exceptions/src/test/java/org/baeldung/properties/core/PropertiesWithXmlManualTest.java @@ -12,7 +12,7 @@ import org.springframework.test.context.support.AnnotationConfigContextLoader; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { PropertiesWithXmlConfig.class }, loader = AnnotationConfigContextLoader.class) -public class PropertiesWithXmlIntegrationTest { +public class PropertiesWithXmlManualTest { @Autowired private Environment env; From 496c8896a78c17b1be478847d89aee97ad15a7d2 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sun, 23 Oct 2016 21:19:24 +0200 Subject: [PATCH 261/309] rename test --- spring-rest-docs/pom.xml | 2 +- ...iDocumentation.java => ApiDocumentationIntegrationTest.java} | 2 +- ...ion.java => GettingStartedDocumentationIntegrationTest.java} | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) rename spring-rest-docs/src/test/java/com/example/{ApiDocumentation.java => ApiDocumentationIntegrationTest.java} (99%) rename spring-rest-docs/src/test/java/com/example/{GettingStartedDocumentation.java => GettingStartedDocumentationIntegrationTest.java} (99%) diff --git a/spring-rest-docs/pom.xml b/spring-rest-docs/pom.xml index 04ee11d0de..8e758eeb4a 100644 --- a/spring-rest-docs/pom.xml +++ b/spring-rest-docs/pom.xml @@ -63,7 +63,7 @@ maven-surefire-plugin - **/*Documentation.java + **/*IntegrationTest.java diff --git a/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java b/spring-rest-docs/src/test/java/com/example/ApiDocumentationIntegrationTest.java similarity index 99% rename from spring-rest-docs/src/test/java/com/example/ApiDocumentation.java rename to spring-rest-docs/src/test/java/com/example/ApiDocumentationIntegrationTest.java index 5b753aff0c..0912023fb7 100644 --- a/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java +++ b/spring-rest-docs/src/test/java/com/example/ApiDocumentationIntegrationTest.java @@ -38,7 +38,7 @@ import static org.springframework.util.StringUtils.collectionToDelimitedString; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SpringRestDocsApplication.class) @WebAppConfiguration -public class ApiDocumentation { +public class ApiDocumentationIntegrationTest { @Rule public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); diff --git a/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java b/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentationIntegrationTest.java similarity index 99% rename from spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java rename to spring-rest-docs/src/test/java/com/example/GettingStartedDocumentationIntegrationTest.java index 7aea9d303c..1af626d03b 100644 --- a/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java +++ b/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentationIntegrationTest.java @@ -33,7 +33,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SpringRestDocsApplication.class) @WebAppConfiguration -public class GettingStartedDocumentation { +public class GettingStartedDocumentationIntegrationTest { @Rule public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); From d9c3a9d9cd94a6e6a7e3ec2b7e2545251cb70913 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 21:19:54 +0200 Subject: [PATCH 262/309] Move CharToString examples --- core-java-8/README.md | 1 - core-java/README.md | 1 + .../src/test/java/com/baeldung/CharToStringTest.java | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename {core-java-8 => core-java}/src/test/java/com/baeldung/CharToStringTest.java (100%) diff --git a/core-java-8/README.md b/core-java-8/README.md index a835914b4d..a4c7833dd4 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -12,7 +12,6 @@ - [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator) - [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams) - [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) -- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) - [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava) - [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors) - [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams) diff --git a/core-java/README.md b/core-java/README.md index c18e6670ca..0bfce8b463 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -22,3 +22,4 @@ - [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) - [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture) - [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) +- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/CharToStringTest.java b/core-java/src/test/java/com/baeldung/CharToStringTest.java similarity index 100% rename from core-java-8/src/test/java/com/baeldung/CharToStringTest.java rename to core-java/src/test/java/com/baeldung/CharToStringTest.java From ce0cb0c375bbf6fac196d4bb8a3ae7562ecb0c14 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 21:22:07 +0200 Subject: [PATCH 263/309] Move Random List Element examples --- core-java/README.md | 3 ++- .../src/test/java/com/baeldung/RandomListElementTest.java | 0 2 files changed, 2 insertions(+), 1 deletion(-) rename {core-java-8 => core-java}/src/test/java/com/baeldung/RandomListElementTest.java (100%) diff --git a/core-java/README.md b/core-java/README.md index 0bfce8b463..8e28069ac3 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -22,4 +22,5 @@ - [Java 8 Collectors](http://www.baeldung.com/java-8-collectors) - [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture) - [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) -- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) \ No newline at end of file +- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) +- [Random List Element](http://www.baeldung.com/java-random-list-element) \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/RandomListElementTest.java b/core-java/src/test/java/com/baeldung/RandomListElementTest.java similarity index 100% rename from core-java-8/src/test/java/com/baeldung/RandomListElementTest.java rename to core-java/src/test/java/com/baeldung/RandomListElementTest.java From d97ba21fb3acd25ce5b1a5e3d78d046710d681ed Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 21:24:20 +0200 Subject: [PATCH 264/309] Move StringToInt examples --- core-java-8/README.md | 1 - core-java/README.md | 3 ++- .../src/test/java/com/baeldung/StringToIntOrIntegerTest.java | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename {core-java-8 => core-java}/src/test/java/com/baeldung/StringToIntOrIntegerTest.java (100%) diff --git a/core-java-8/README.md b/core-java-8/README.md index a4c7833dd4..7a25040823 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -11,7 +11,6 @@ - [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips) - [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator) - [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams) -- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) - [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava) - [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors) - [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams) diff --git a/core-java/README.md b/core-java/README.md index 8e28069ac3..45071d54ea 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -23,4 +23,5 @@ - [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture) - [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) - [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) -- [Random List Element](http://www.baeldung.com/java-random-list-element) \ No newline at end of file +- [Random List Element](http://www.baeldung.com/java-random-list-element) +- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/StringToIntOrIntegerTest.java b/core-java/src/test/java/com/baeldung/StringToIntOrIntegerTest.java similarity index 100% rename from core-java-8/src/test/java/com/baeldung/StringToIntOrIntegerTest.java rename to core-java/src/test/java/com/baeldung/StringToIntOrIntegerTest.java From 8860b29131f5019550a6d9af909c34eea228ce15 Mon Sep 17 00:00:00 2001 From: ambrusadrianz Date: Sun, 23 Oct 2016 22:33:17 +0300 Subject: [PATCH 265/309] Further simplified the vote method. (#768) --- .../org/baeldung/security/MinuteBasedVoter.java | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java index 3e3a26594f..a08079fcff 100644 --- a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java +++ b/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java @@ -21,17 +21,13 @@ public class MinuteBasedVoter implements AccessDecisionVoter { @Override public int vote(Authentication authentication, Object object, Collection collection) { - String role = authentication + return authentication .getAuthorities() - .stream().map(GrantedAuthority::getAuthority) - .filter("ROLE_USER"::equals) + .stream() + .map(GrantedAuthority::getAuthority) + .filter(r -> "ROLE_USER".equals(r) && LocalDateTime.now().getMinute() % 2 != 0) .findAny() - .orElseGet(() -> "ROLE_ADMIN"); - - if ("ROLE_USER".equals(role) && LocalDateTime.now().getMinute() % 2 != 0) { - return ACCESS_DENIED; - } - - return ACCESS_ABSTAIN; + .map(s -> ACCESS_DENIED) + .orElseGet(() -> ACCESS_ABSTAIN); } } From 0902c3d9e0bd6cf9f40f7e5326d2cfc2d7585adc Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 22:36:44 +0200 Subject: [PATCH 266/309] Collapse core-java-8 into core-java --- core-java-8/README.md | 15 +- .../main/java/com/baeldung/enums/Pizza.java | 91 ------ .../baeldung/enums/PizzaDeliveryStrategy.java | 18 -- .../PizzaDeliverySystemConfiguration.java | 22 -- .../baeldung/datetime/UseLocalDateTest.java | 55 ---- .../datetime/UseLocalDateTimeTest.java | 19 -- .../baeldung/datetime/UseLocalTimeTest.java | 36 --- .../com/baeldung/datetime/UsePeriodTest.java | 29 -- .../datetime/UseZonedDateTimeTest.java | 20 -- .../doublecolon/TestComputerUtils.java | 91 ------ .../encoderdecoder/EncoderDecoder.java | 84 ------ .../java/com/baeldung/enums/PizzaTest.java | 80 ------ .../com/baeldung/file/FileOperationsTest.java | 121 -------- .../java8/Java8CollectionCleanupUnitTest.java | 48 ---- ...Java8DefaultStaticIntefaceMethodsTest.java | 27 -- .../java8/Java8ExecutorServiceTest.java | 156 ----------- .../com/baeldung/java8/Java8ForkJoinTest.java | 100 ------- .../Java8FunctionalInteracesLambdasTest.java | 94 ------- .../java8/Java8MethodReferenceTest.java | 67 ----- .../com/baeldung/java8/Java8OptionalTest.java | 118 -------- .../com/baeldung/java8/Java8SortUnitTest.java | 115 -------- .../baeldung/java8/Java8StreamApiTest.java | 263 ------------------ .../com/baeldung/java8/Java8StreamsTest.java | 113 -------- .../baeldung/java8/JavaFolderSizeTest.java | 115 -------- .../java8/JavaTryWithResourcesTest.java | 86 ------ .../base64/ApacheCommonsEncodeDecodeTest.java | 56 ---- .../java8/base64/Java8EncodeDecodeTest.java | 109 -------- .../java/com/baeldung/java8/entity/Human.java | 89 ------ .../threadpool/CoreThreadPoolTest.java | 146 ---------- .../threadpool/GuavaThreadPoolTest.java | 56 ---- .../baeldung/util/CurrentDateTimeTest.java | 41 --- core-java-8/src/test/resources/test.txt | 1 - core-java/README.md | 17 +- .../src/main/java/com/baeldung}/.gitignore | 0 .../src/main/java/com/baeldung/Adder.java | 0 .../src/main/java/com/baeldung/AdderImpl.java | 0 .../src/main/java/com/baeldung/Bar.java | 0 .../src/main/java/com/baeldung/Baz.java | 0 .../src/main/java/com/baeldung/Foo.java | 0 .../main/java/com/baeldung/FooExtended.java | 0 .../src/main/java/com/baeldung/UseFoo.java | 0 .../main/java/com/baeldung/datetime/README.md | 0 .../com/baeldung/datetime/UseDuration.java | 0 .../com/baeldung/datetime/UseLocalDate.java | 0 .../baeldung/datetime/UseLocalDateTime.java | 0 .../com/baeldung/datetime/UseLocalTime.java | 0 .../java/com/baeldung/datetime/UsePeriod.java | 0 .../com/baeldung/datetime/UseToInstant.java | 0 .../baeldung/datetime/UseZonedDateTime.java | 0 .../com/baeldung/doublecolon/Computer.java | 0 .../baeldung/doublecolon/ComputerUtils.java | 0 .../com/baeldung/doublecolon/MacbookPro.java | 0 .../function/ComputerPredicate.java | 0 .../doublecolon/function/TriFunction.java | 0 .../main/java/com/baeldung/enums/Pizza.java | 41 +-- .../PizzaDeliverySystemConfiguration.java | 1 + .../main/java/com/baeldung/enums/README.md | 0 .../forkjoin/CustomRecursiveAction.java | 0 .../forkjoin/CustomRecursiveTask.java | 0 .../com/baeldung/forkjoin/util/PoolUtil.java | 0 .../com/baeldung/java_8_features/Address.java | 0 .../java_8_features/CustomException.java | 0 .../com/baeldung/java_8_features/Detail.java | 0 .../java_8_features/OptionalAddress.java | 0 .../java_8_features/OptionalUser.java | 0 .../com/baeldung/java_8_features/User.java | 0 .../com/baeldung/java_8_features/Vehicle.java | 0 .../baeldung/java_8_features/VehicleImpl.java | 0 .../java/com/baeldung/streamApi/Product.java | 0 .../com/baeldung/threadpool/CountingTask.java | 0 .../ExitingExecutorServiceExample.java | 0 .../com/baeldung/threadpool/TreeNode.java | 0 .../java/com/baeldung/unzip/UnzipFile.java | 0 .../java/com/baeldung/zip/ZipDirectory.java | 0 .../main/java/com/baeldung/zip/ZipFile.java | 0 .../com/baeldung/zip/ZipMultipleFiles.java | 0 .../src/main/resources/dirCompressed.zip | Bin .../src/main/resources/multiCompressed.zip | Bin .../baeldung/dateapi/ConversionExample.java | 0 .../baeldung/dateapi/JavaUtilTimeTest.java | 0 80 files changed, 29 insertions(+), 2511 deletions(-) delete mode 100644 core-java-8/src/main/java/com/baeldung/enums/Pizza.java delete mode 100644 core-java-8/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java delete mode 100644 core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java delete mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UsePeriodTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/doublecolon/TestComputerUtils.java delete mode 100644 core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java delete mode 100644 core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8CollectionCleanupUnitTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8ExecutorServiceTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8ForkJoinTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8FunctionalInteracesLambdasTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8OptionalTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8SortUnitTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8StreamsTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/JavaTryWithResourcesTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/entity/Human.java delete mode 100644 core-java-8/src/test/java/com/baeldung/threadpool/CoreThreadPoolTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/threadpool/GuavaThreadPoolTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java delete mode 100644 core-java-8/src/test/resources/test.txt rename {core-java-8/src/main/java => core-java/src/main/java/com/baeldung}/.gitignore (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/Adder.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/AdderImpl.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/Bar.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/Baz.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/Foo.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/FooExtended.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/UseFoo.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/datetime/README.md (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/datetime/UseDuration.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/datetime/UseLocalDate.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/datetime/UseLocalDateTime.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/datetime/UseLocalTime.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/datetime/UsePeriod.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/datetime/UseToInstant.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/datetime/UseZonedDateTime.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/doublecolon/Computer.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/doublecolon/ComputerUtils.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/doublecolon/MacbookPro.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/doublecolon/function/ComputerPredicate.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/doublecolon/function/TriFunction.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/enums/README.md (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/java_8_features/Address.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/java_8_features/CustomException.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/java_8_features/Detail.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/java_8_features/OptionalAddress.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/java_8_features/OptionalUser.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/java_8_features/User.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/java_8_features/Vehicle.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/java_8_features/VehicleImpl.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/streamApi/Product.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/threadpool/CountingTask.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/threadpool/ExitingExecutorServiceExample.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/threadpool/TreeNode.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/unzip/UnzipFile.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/zip/ZipDirectory.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/zip/ZipFile.java (100%) rename {core-java-8 => core-java}/src/main/java/com/baeldung/zip/ZipMultipleFiles.java (100%) rename {core-java-8 => core-java}/src/main/resources/dirCompressed.zip (100%) rename {core-java-8 => core-java}/src/main/resources/multiCompressed.zip (100%) rename {core-java-8 => core-java}/src/test/java/com/baeldung/dateapi/ConversionExample.java (100%) rename {core-java-8 => core-java}/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java (100%) diff --git a/core-java-8/README.md b/core-java-8/README.md index 7a25040823..86429222ea 100644 --- a/core-java-8/README.md +++ b/core-java-8/README.md @@ -3,17 +3,4 @@ ## Core Java 8 Cookbooks and Examples ### Relevant Articles: -- [Java 8 – Powerful Comparison with Lambdas](http://www.baeldung.com/java-8-sort-lambda) -- [Java – Directory Size](http://www.baeldung.com/java-folder-size) -- [Java – Try with Resources](http://www.baeldung.com/java-try-with-resources) -- [A Guide to the Java ExecutorService](http://www.baeldung.com/java-executor-service-tutorial) -- [Java 8 New Features](http://www.baeldung.com/java-8-new-features) -- [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips) -- [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator) -- [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams) -- [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava) -- [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors) -- [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams) -- [New Features in Java 8](http://www.baeldung.com/java-8-new-features) -- [Introduction to Java 8 Streams](http://www.baeldung.com/java-8-streams-introduction) -- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join) + diff --git a/core-java-8/src/main/java/com/baeldung/enums/Pizza.java b/core-java-8/src/main/java/com/baeldung/enums/Pizza.java deleted file mode 100644 index 5bc2d9a9eb..0000000000 --- a/core-java-8/src/main/java/com/baeldung/enums/Pizza.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.baeldung.enums; - -import java.util.EnumMap; -import java.util.EnumSet; -import java.util.List; -import java.util.stream.Collectors; - -public class Pizza { - - private static EnumSet deliveredPizzaStatuses = - EnumSet.of(PizzaStatusEnum.DELIVERED); - - private PizzaStatusEnum status; - - public enum PizzaStatusEnum { - ORDERED(5) { - @Override - public boolean isOrdered() { - return true; - } - }, - READY(2) { - @Override - public boolean isReady() { - return true; - } - }, - DELIVERED(0) { - @Override - public boolean isDelivered() { - return true; - } - }; - - private int timeToDelivery; - - public boolean isOrdered() { - return false; - } - - public boolean isReady() { - return false; - } - - public boolean isDelivered() { - return false; - } - - public int getTimeToDelivery() { - return timeToDelivery; - } - - PizzaStatusEnum(int timeToDelivery) { - this.timeToDelivery = timeToDelivery; - } - } - - public PizzaStatusEnum getStatus() { - return status; - } - - public void setStatus(PizzaStatusEnum status) { - this.status = status; - } - - public boolean isDeliverable() { - return this.status.isReady(); - } - - public void printTimeToDeliver() { - System.out.println("Time to delivery is " + this.getStatus().getTimeToDelivery() + " days"); - } - - public static List getAllUndeliveredPizzas(List input) { - return input.stream().filter((s) -> !deliveredPizzaStatuses.contains(s.getStatus())).collect(Collectors.toList()); - } - - public static EnumMap> groupPizzaByStatus(List pzList) { - return pzList.stream().collect( - Collectors.groupingBy(Pizza::getStatus, - () -> new EnumMap<>(PizzaStatusEnum.class), Collectors.toList())); - } - - public void deliver() { - if (isDeliverable()) { - PizzaDeliverySystemConfiguration.getInstance().getDeliveryStrategy().deliver(this); - this.setStatus(PizzaStatusEnum.DELIVERED); - } - } - -} \ No newline at end of file diff --git a/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java b/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java deleted file mode 100644 index ed65919387..0000000000 --- a/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.enums; - -public enum PizzaDeliveryStrategy { - EXPRESS { - @Override - public void deliver(Pizza pz) { - System.out.println("Pizza will be delivered in express mode"); - } - }, - NORMAL { - @Override - public void deliver(Pizza pz) { - System.out.println("Pizza will be delivered in normal mode"); - } - }; - - public abstract void deliver(Pizza pz); -} diff --git a/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java b/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java deleted file mode 100644 index 5ccff5e959..0000000000 --- a/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.baeldung.enums; - - -public enum PizzaDeliverySystemConfiguration { - INSTANCE; - - PizzaDeliverySystemConfiguration() { - // Do the configuration initialization which - // involves overriding defaults like delivery strategy - } - - private PizzaDeliveryStrategy deliveryStrategy = PizzaDeliveryStrategy.NORMAL; - - public static PizzaDeliverySystemConfiguration getInstance() { - return INSTANCE; - } - - public PizzaDeliveryStrategy getDeliveryStrategy() { - return deliveryStrategy; - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTest.java deleted file mode 100644 index 8af33393be..0000000000 --- a/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTest.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.baeldung.datetime; - -import java.time.DayOfWeek; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.Month; - -import org.junit.Assert; -import org.junit.Test; - -public class UseLocalDateTest { - - UseLocalDate useLocalDate = new UseLocalDate(); - - @Test - public void givenValues_whenUsingFactoryOf_thenLocalDate(){ - Assert.assertEquals("2016-05-10",useLocalDate.getLocalDateUsingFactoryOfMethod(2016,5,10).toString()); - } - - @Test - public void givenString_whenUsingParse_thenLocalDate(){ - Assert.assertEquals("2016-05-10",useLocalDate.getLocalDateUsingParseMethod("2016-05-10").toString()); - } - - @Test - public void whenUsingClock_thenLocalDate(){ - Assert.assertEquals(LocalDate.now(),useLocalDate.getLocalDateFromClock()); - } - - @Test - public void givenDate_whenUsingPlus_thenNextDay(){ - Assert.assertEquals(LocalDate.now().plusDays(1),useLocalDate.getNextDay(LocalDate.now())); - } - - @Test - public void givenDate_whenUsingMinus_thenPreviousDay(){ - Assert.assertEquals(LocalDate.now().minusDays(1),useLocalDate.getPreviousDay(LocalDate.now())); - } - - @Test - public void givenToday_whenUsingGetDayOfWeek_thenDayOfWeek(){ - Assert.assertEquals(DayOfWeek.SUNDAY,useLocalDate.getDayOfWeek(LocalDate.parse("2016-05-22"))); - } - - @Test - public void givenToday_whenUsingWithTemporalAdjuster_thenFirstDayOfMonth(){ - Assert.assertEquals(1,useLocalDate.getFirstDayOfMonth().getDayOfMonth()); - } - - @Test - public void givenLocalDate_whenUsingAtStartOfDay_thenReturnMidnight(){ - Assert.assertEquals(LocalDateTime.parse("2016-05-22T00:00:00"),useLocalDate.getStartOfDay(LocalDate.parse("2016-05-22"))); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java deleted file mode 100644 index 69a289fd02..0000000000 --- a/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.datetime; - -import java.time.LocalDate; -import java.time.LocalTime; -import java.time.Month; - -import org.junit.Assert; -import org.junit.Test; - -public class UseLocalDateTimeTest { - - UseLocalDateTime useLocalDateTime = new UseLocalDateTime(); - - @Test - public void givenString_whenUsingParse_thenLocalDateTime(){ - Assert.assertEquals(LocalDate.of(2016, Month.MAY, 10),useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalDate()); - Assert.assertEquals(LocalTime.of(6,30),useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalTime()); - } -} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java deleted file mode 100644 index 7776fad363..0000000000 --- a/core-java-8/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.baeldung.datetime; - -import java.time.LocalTime; - -import org.junit.Assert; -import org.junit.Test; - -public class UseLocalTimeTest { - - UseLocalTime useLocalTime = new UseLocalTime(); - - @Test - public void givenValues_whenUsingFactoryOf_thenLocalTime(){ - Assert.assertEquals("07:07:07",useLocalTime.getLocalTimeUsingFactoryOfMethod(7,7,7).toString()); - } - - @Test - public void givenString_whenUsingParse_thenLocalTime(){ - Assert.assertEquals("06:30",useLocalTime.getLocalTimeUsingParseMethod("06:30").toString()); - } - - @Test - public void givenTime_whenAddHour_thenLocalTime(){ - Assert.assertEquals("07:30",useLocalTime.addAnHour(LocalTime.of(6,30)).toString()); - } - - @Test - public void getHourFromLocalTime(){ - Assert.assertEquals(1, useLocalTime.getHourFromLocalTime(LocalTime.of(1,1))); - } - - @Test - public void getLocalTimeWithMinuteSetToValue(){ - Assert.assertEquals(LocalTime.of(10, 20), useLocalTime.getLocalTimeWithMinuteSetToValue(LocalTime.of(10,10), 20)); - } -} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UsePeriodTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UsePeriodTest.java deleted file mode 100644 index 8a3228aaa5..0000000000 --- a/core-java-8/src/test/java/com/baeldung/datetime/UsePeriodTest.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.baeldung.datetime; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.Period; -import java.time.ZoneId; -import java.time.ZonedDateTime; - -import org.junit.Assert; -import org.junit.Test; - -public class UsePeriodTest { - UsePeriod usingPeriod=new UsePeriod(); - - @Test - public void givenPeriodAndLocalDate_thenCalculateModifiedDate(){ - Period period = Period.ofDays(1); - LocalDate localDate = LocalDate.parse("2007-05-10"); - Assert.assertEquals(localDate.plusDays(1),usingPeriod.modifyDates(localDate, period)); - } - - @Test - public void givenDates_thenGetPeriod(){ - LocalDate localDate1 = LocalDate.parse("2007-05-10"); - LocalDate localDate2 = LocalDate.parse("2007-05-15"); - - Assert.assertEquals(Period.ofDays(5), usingPeriod.getDifferenceBetweenDates(localDate1, localDate2)); - } -} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java deleted file mode 100644 index 5af01ad678..0000000000 --- a/core-java-8/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.datetime; - -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.time.ZonedDateTime; - -import org.junit.Assert; -import org.junit.Test; - -public class UseZonedDateTimeTest { - - UseZonedDateTime zonedDateTime=new UseZonedDateTime(); - - @Test - public void givenZoneId_thenZonedDateTime(){ - ZoneId zoneId=ZoneId.of("Europe/Paris"); - ZonedDateTime zonedDatetime=zonedDateTime.getZonedDateTime(LocalDateTime.parse("2016-05-20T06:30"), zoneId); - Assert.assertEquals(zoneId,ZoneId.from(zonedDatetime)); - } -} diff --git a/core-java-8/src/test/java/com/baeldung/doublecolon/TestComputerUtils.java b/core-java-8/src/test/java/com/baeldung/doublecolon/TestComputerUtils.java deleted file mode 100644 index 85194f5aa6..0000000000 --- a/core-java-8/src/test/java/com/baeldung/doublecolon/TestComputerUtils.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.baeldung.doublecolon; - -import com.baeldung.doublecolon.function.TriFunction; -import org.junit.After; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; - -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import java.util.function.BiFunction; - -import static com.baeldung.doublecolon.ComputerUtils.*; - -public class TestComputerUtils { - - @Before - public void setup() { - } - - @After - public void tearDown() { - } - - @Test - public void testConstructorReference() { - - Computer c1 = new Computer(2015, "white"); - Computer c2 = new Computer(2009, "black"); - Computer c3 = new Computer(2014, "black"); - - BiFunction c4Function = Computer::new; - Computer c4 = c4Function.apply(2013, "white"); - BiFunction c5Function = Computer::new; - Computer c5 = c5Function.apply(2010, "black"); - BiFunction c6Function = Computer::new; - Computer c6 = c6Function.apply(2008, "black"); - - List inventory = Arrays.asList(c1, c2, c3, c4, c5, c6); - - List blackComputer = filter(inventory, blackPredicate); - Assert.assertEquals("The black Computers are: ", blackComputer.size(), 4); - - List after2010Computer = filter(inventory, after2010Predicate); - Assert.assertEquals("The Computer bought after 2010 are: ", after2010Computer.size(), 3); - - List before2011Computer = filter(inventory, c -> c.getAge() < 2011); - Assert.assertEquals("The Computer bought before 2011 are: ", before2011Computer.size(), 3); - - inventory.sort(Comparator.comparing(Computer::getAge)); - - Assert.assertEquals("Oldest Computer in inventory", c6, inventory.get(0)); - - } - - @Test - public void testStaticMethodReference() { - - Computer c1 = new Computer(2015, "white", 35); - Computer c2 = new Computer(2009, "black", 65); - TriFunction c6Function = Computer::new; - Computer c3 = c6Function.apply(2008, "black", 90); - - List inventory = Arrays.asList(c1, c2, c3); - inventory.forEach(ComputerUtils::repair); - - Assert.assertEquals("Computer repaired", new Integer(100), c1.getHealty()); - } - - @Test - public void testInstanceMethodArbitraryObjectParticularType() { - - Computer c1 = new Computer(2015, "white", 35); - Computer c2 = new MacbookPro(2009, "black", 65); - List inventory = Arrays.asList(c1, c2); - inventory.forEach(Computer::turnOnPc); - - } - - @Test - public void testSuperMethodReference() { - - final TriFunction integerStringIntegerObjectTriFunction = MacbookPro::new; - final MacbookPro macbookPro = integerStringIntegerObjectTriFunction.apply(2010, "black", 100); - Double initialValue = new Double(999.99); - final Double actualValue = macbookPro.calculateValue(initialValue); - Assert.assertEquals(766.659, actualValue, 0.0); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java b/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java deleted file mode 100644 index 208a23eb91..0000000000 --- a/core-java-8/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.baeldung.encoderdecoder; - -import org.hamcrest.CoreMatchers; -import org.junit.Assert; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.function.Function; -import java.util.stream.Collectors; - -public class EncoderDecoder { - - private static final String URL = "http://www.baeldung.com?key1=value+1&key2=value%40%21%242&key3=value%253"; - private static final Logger LOGGER = LoggerFactory.getLogger(EncoderDecoder.class); - - private String encodeValue(String value) { - String encoded = null; - try { - encoded = URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); - } catch (UnsupportedEncodingException e) { - LOGGER.error("Error encoding parameter {}", e.getMessage(), e); - } - return encoded; - } - - - private String decode(String value) { - String decoded = null; - try { - decoded = URLDecoder.decode(value, StandardCharsets.UTF_8.toString()); - } catch (UnsupportedEncodingException e) { - LOGGER.error("Error encoding parameter {}", e.getMessage(), e); - } - return decoded; - } - - @Test - public void givenURL_whenAnalyze_thenCorrect() throws Exception { - URL url = new URL(URL); - - Assert.assertThat(url.getProtocol(), CoreMatchers.is("http")); - Assert.assertThat(url.getHost(), CoreMatchers.is("www.baeldung.com")); - Assert.assertThat(url.getQuery(), CoreMatchers.is("key1=value+1&key2=value%40%21%242&key3=value%253")); - } - - @Test - public void givenRequestParam_whenUTF8Scheme_thenEncode() throws Exception { - Map requestParams = new HashMap<>(); - requestParams.put("key1", "value 1"); - requestParams.put("key2", "value@!$2"); - requestParams.put("key3", "value%3"); - - String encodedQuery = requestParams.keySet().stream() - .map(key -> key + "=" + encodeValue(requestParams.get(key))) - .collect(Collectors.joining("&")); - String encodedURL = "http://www.baeldung.com?" + encodedQuery; - - Assert.assertThat(URL, CoreMatchers.is(encodedURL)); - } - - @Test - public void givenRequestParam_whenUTF8Scheme_thenDecodeRequestParams() throws Exception { - URL url = new URL(URL); - String query = url.getQuery(); - - String decodedQuery = Arrays.stream(query.split("&")) - .map(param -> param.split("=")[0] + "=" + decode(param.split("=")[1])) - .collect(Collectors.joining("&")); - - Assert.assertEquals( - "http://www.baeldung.com?key1=value 1&key2=value@!$2&key3=value%3", url.getProtocol() + "://" + url.getHost() + "?" + decodedQuery); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java b/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java deleted file mode 100644 index deeebaa240..0000000000 --- a/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.baeldung.enums; - - -import org.junit.Test; - -import java.util.ArrayList; -import java.util.EnumMap; -import java.util.List; - -import static junit.framework.TestCase.assertTrue; - -public class PizzaTest { - - @Test - public void givenPizaOrder_whenReady_thenDeliverable() { - Pizza testPz = new Pizza(); - testPz.setStatus(Pizza.PizzaStatusEnum.READY); - assertTrue(testPz.isDeliverable()); - } - - @Test - public void givenPizaOrders_whenRetrievingUnDeliveredPzs_thenCorrectlyRetrieved() { - List pzList = new ArrayList<>(); - Pizza pz1 = new Pizza(); - pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); - - Pizza pz2 = new Pizza(); - pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); - - Pizza pz3 = new Pizza(); - pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); - - Pizza pz4 = new Pizza(); - pz4.setStatus(Pizza.PizzaStatusEnum.READY); - - pzList.add(pz1); - pzList.add(pz2); - pzList.add(pz3); - pzList.add(pz4); - - List undeliveredPzs = Pizza.getAllUndeliveredPizzas(pzList); - assertTrue(undeliveredPzs.size() == 3); - } - - @Test - public void givenPizaOrders_whenGroupByStatusCalled_thenCorrectlyGrouped() { - - List pzList = new ArrayList<>(); - Pizza pz1 = new Pizza(); - pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); - - Pizza pz2 = new Pizza(); - pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); - - Pizza pz3 = new Pizza(); - pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); - - Pizza pz4 = new Pizza(); - pz4.setStatus(Pizza.PizzaStatusEnum.READY); - - pzList.add(pz1); - pzList.add(pz2); - pzList.add(pz3); - pzList.add(pz4); - - EnumMap> map = Pizza.groupPizzaByStatus(pzList); - assertTrue(map.get(Pizza.PizzaStatusEnum.DELIVERED).size() == 1); - assertTrue(map.get(Pizza.PizzaStatusEnum.ORDERED).size() == 2); - assertTrue(map.get(Pizza.PizzaStatusEnum.READY).size() == 1); - } - - @Test - public void givenPizaOrder_whenDelivered_thenPizzaGetsDeliveredAndStatusChanges() { - Pizza pz = new Pizza(); - pz.setStatus(Pizza.PizzaStatusEnum.READY); - pz.deliver(); - assertTrue(pz.getStatus() == Pizza.PizzaStatusEnum.DELIVERED); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java deleted file mode 100644 index e21af9552a..0000000000 --- a/core-java-8/src/test/java/com/baeldung/file/FileOperationsTest.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.baeldung.file; - -import org.apache.commons.io.FileUtils; -import org.hamcrest.CoreMatchers; -import org.hamcrest.Matchers; -import org.junit.Assert; -import org.junit.Test; - -import java.io.BufferedReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.net.URISyntaxException; -import java.net.URL; -import java.net.URLConnection; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.stream.Stream; - -public class FileOperationsTest { - - @Test - public void givenFileName_whenUsingClassloader_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; - - ClassLoader classLoader = getClass().getClassLoader(); - File file = new File(classLoader.getResource("fileTest.txt").getFile()); - InputStream inputStream = new FileInputStream(file); - String data = readFromInputStream(inputStream); - - Assert.assertEquals(expectedData, data.trim()); - } - - @Test - public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; - - Class clazz = FileOperationsTest.class; - InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); - String data = readFromInputStream(inputStream); - - Assert.assertEquals(expectedData, data.trim()); - } - - @Test - public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { - String expectedData = "BSD License"; - - Class clazz = Matchers.class; - InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt"); - String data = readFromInputStream(inputStream); - - Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); - } - - @Test - public void givenURLName_whenUsingURL_thenFileData() throws IOException { - String expectedData = "Baeldung"; - - URL urlObject = new URL("http://www.baeldung.com/"); - - URLConnection urlConnection = urlObject.openConnection(); - - InputStream inputStream = urlConnection.getInputStream(); - String data = readFromInputStream(inputStream); - - Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); - } - - @Test - public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException { - String expectedData = "Hello World from fileTest.txt!!!"; - - ClassLoader classLoader = getClass().getClassLoader(); - File file = new File(classLoader.getResource("fileTest.txt").getFile()); - String data = FileUtils.readFileToString(file); - - Assert.assertEquals(expectedData, data.trim()); - } - - @Test - public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException, URISyntaxException { - String expectedData = "Hello World from fileTest.txt!!!"; - - Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); - - byte[] fileBytes = Files.readAllBytes(path); - String data = new String(fileBytes); - - Assert.assertEquals(expectedData, data.trim()); - } - - @Test - public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, URISyntaxException { - String expectedData = "Hello World from fileTest.txt!!!"; - - Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); - - StringBuilder data = new StringBuilder(); - Stream lines = Files.lines(path); - lines.forEach(line -> data.append(line).append("\n")); - lines.close(); - - Assert.assertEquals(expectedData, data.toString().trim()); - } - - private String readFromInputStream(InputStream inputStream) throws IOException { - StringBuilder resultStringBuilder = new StringBuilder(); - try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { - String line; - while ((line = bufferedReader.readLine()) != null) { - resultStringBuilder.append(line).append("\n"); - } - } - - return resultStringBuilder.toString(); - } -} \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8CollectionCleanupUnitTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8CollectionCleanupUnitTest.java deleted file mode 100644 index ef4b80c6e8..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8CollectionCleanupUnitTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.baeldung.java8; - -import com.google.common.collect.Lists; -import org.junit.Test; - -import java.util.List; -import java.util.stream.Collectors; - -import static org.hamcrest.Matchers.hasSize; -import static org.junit.Assert.assertThat; - -public class Java8CollectionCleanupUnitTest { - - // tests - - - @Test - public void givenListContainsNulls_whenFilteringParallel_thenCorrect() { - final List list = Lists.newArrayList(null, 1, 2, null, 3, null); - final List listWithoutNulls = list.parallelStream().filter(i -> i != null).collect(Collectors.toList()); - - assertThat(listWithoutNulls, hasSize(3)); - } - - @Test - public void givenListContainsNulls_whenFilteringSerial_thenCorrect() { - final List list = Lists.newArrayList(null, 1, 2, null, 3, null); - final List listWithoutNulls = list.stream().filter(i -> i != null).collect(Collectors.toList()); - - assertThat(listWithoutNulls, hasSize(3)); - } - - @Test - public void givenListContainsNulls_whenRemovingNullsWithRemoveIf_thenCorrect() { - final List listWithoutNulls = Lists.newArrayList(null, 1, 2, null, 3, null); - listWithoutNulls.removeIf(p -> p == null); - - assertThat(listWithoutNulls, hasSize(3)); - } - - @Test - public void givenListContainsDuplicates_whenRemovingDuplicatesWithJava8_thenCorrect() { - final List listWithDuplicates = Lists.newArrayList(1, 1, 2, 2, 3, 3); - final List listWithoutDuplicates = listWithDuplicates.parallelStream().distinct().collect(Collectors.toList()); - - assertThat(listWithoutDuplicates, hasSize(3)); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java deleted file mode 100644 index 21a5e34b9b..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.java8; - -import com.baeldung.java_8_features.Vehicle; -import com.baeldung.java_8_features.VehicleImpl; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class Java8DefaultStaticIntefaceMethodsTest { - - @Test - public void callStaticInterfaceMethdosMethods_whenExpectedResults_thenCorrect() { - Vehicle vehicle = new VehicleImpl(); - String overview = vehicle.getOverview(); - long[] startPosition = vehicle.startPosition(); - - assertEquals(overview, "ATV made by N&F Vehicles"); - assertEquals(startPosition[0], 23); - assertEquals(startPosition[1], 15); - } - - @Test - public void callDefaultInterfaceMethods_whenExpectedResults_thenCorrect() { - String producer = Vehicle.producer(); - assertEquals(producer, "N&F Vehicles"); - } -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8ExecutorServiceTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8ExecutorServiceTest.java deleted file mode 100644 index 581ccec182..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8ExecutorServiceTest.java +++ /dev/null @@ -1,156 +0,0 @@ -package com.baeldung.java8; - - -import org.junit.Before; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.*; - -import static org.junit.Assert.*; - - -public class Java8ExecutorServiceTest { - - private Runnable runnableTask; - private Callable callableTask; - private List> callableTasks; - - @Before - public void init() { - - runnableTask = () -> { - try { - TimeUnit.MILLISECONDS.sleep(300); - } catch (InterruptedException e) { - e.printStackTrace(); - } - }; - - callableTask = () -> { - TimeUnit.MILLISECONDS.sleep(300); - return "Task's execution"; - }; - - callableTasks = new ArrayList<>(); - callableTasks.add(callableTask); - callableTasks.add(callableTask); - callableTasks.add(callableTask); - } - - @Test - public void creationSubmittingTaskShuttingDown_whenShutDown_thenCorrect() { - - ExecutorService executorService = Executors.newFixedThreadPool(10); - executorService.submit(runnableTask); - executorService.submit(callableTask); - executorService.shutdown(); - - assertTrue(executorService.isShutdown()); - } - - @Test - public void creationSubmittingTasksShuttingDownNow_whenShutDownAfterAwating_thenCorrect() { - - ExecutorService threadPoolExecutor = - new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, - new LinkedBlockingQueue<>()); - - for (int i = 0; i < 100; i++) { - threadPoolExecutor.submit(callableTask); - } - - List notExecutedTasks = smartShutdown(threadPoolExecutor); - - assertTrue(threadPoolExecutor.isShutdown()); - assertFalse(notExecutedTasks.isEmpty()); - assertTrue(notExecutedTasks.size() > 0 && notExecutedTasks.size() < 98); - } - - private List smartShutdown(ExecutorService executorService) { - - List notExecutedTasks = new ArrayList<>(); - executorService.shutdown(); - try { - if (!executorService.awaitTermination(800, TimeUnit.MILLISECONDS)) { - notExecutedTasks = executorService.shutdownNow(); - } - } catch (InterruptedException e) { - notExecutedTasks = executorService.shutdownNow(); - } - return notExecutedTasks; - } - - @Test - public void submittingTasks_whenExecutedOneAndAll_thenCorrect() { - - ExecutorService executorService = Executors.newFixedThreadPool(10); - - String result = null; - List> futures = new ArrayList<>(); - try { - result = executorService.invokeAny(callableTasks); - futures = executorService.invokeAll(callableTasks); - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - - assertEquals("Task's execution", result); - assertTrue(futures.size() == 3); - } - - @Test - public void submittingTaskShuttingDown_whenGetExpectedResult_thenCorrect() { - - ExecutorService executorService = Executors.newFixedThreadPool(10); - - Future future = executorService.submit(callableTask); - String result = null; - try { - result = future.get(); - result = future.get(200, TimeUnit.MILLISECONDS); - } catch (InterruptedException | ExecutionException | TimeoutException e) { - e.printStackTrace(); - } - - executorService.shutdown(); - - assertEquals("Task's execution", result); - } - - @Test - public void submittingTask_whenCanceled_thenCorrect() { - - ExecutorService executorService = Executors.newFixedThreadPool(10); - - Future future = executorService.submit(callableTask); - - boolean canceled = future.cancel(true); - boolean isCancelled = future.isCancelled(); - - executorService.shutdown(); - - assertTrue(canceled); - assertTrue(isCancelled); - } - - @Test - public void submittingTaskScheduling_whenExecuted_thenCorrect() { - - ScheduledExecutorService executorService = Executors - .newSingleThreadScheduledExecutor(); - - Future resultFuture = executorService.schedule(callableTask, 1, TimeUnit.SECONDS); - String result = null; - try { - result = resultFuture.get(); - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - - executorService.shutdown(); - - assertEquals("Task's execution", result); - } -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8ForkJoinTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8ForkJoinTest.java deleted file mode 100644 index 273b2d78db..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8ForkJoinTest.java +++ /dev/null @@ -1,100 +0,0 @@ -package com.baeldung.java8; - - -import com.baeldung.forkjoin.CustomRecursiveAction; -import com.baeldung.forkjoin.CustomRecursiveTask; -import com.baeldung.forkjoin.util.PoolUtil; -import org.junit.Before; -import org.junit.Test; - -import java.util.Random; -import java.util.concurrent.ForkJoinPool; - -import static org.junit.Assert.*; - -public class Java8ForkJoinTest { - - private int[] arr; - private CustomRecursiveTask customRecursiveTask; - - @Before - public void init() { - Random random = new Random(); - arr = new int[50]; - for (int i = 0; i < arr.length; i++) { - arr[i] = random.nextInt(35); - } - customRecursiveTask = new CustomRecursiveTask(arr); - } - - - @Test - public void callPoolUtil_whenExistsAndExpectedType_thenCorrect() { - - ForkJoinPool forkJoinPool = PoolUtil.forkJoinPool; - ForkJoinPool forkJoinPoolTwo = PoolUtil.forkJoinPool; - - assertNotNull(forkJoinPool); - assertEquals(2, forkJoinPool.getParallelism()); - assertEquals(forkJoinPool, forkJoinPoolTwo); - - } - - @Test - public void callCommonPool_whenExistsAndExpectedType_thenCorrect() { - - ForkJoinPool commonPool = ForkJoinPool.commonPool(); - ForkJoinPool commonPoolTwo = ForkJoinPool.commonPool(); - - assertNotNull(commonPool); - assertEquals(commonPool, commonPoolTwo); - - } - - @Test - public void executeRecursiveAction_whenExecuted_thenCorrect() { - - CustomRecursiveAction myRecursiveAction = new CustomRecursiveAction("ddddffffgggghhhh"); - ForkJoinPool.commonPool().invoke(myRecursiveAction); - - assertTrue(myRecursiveAction.isDone()); - - } - - @Test - public void executeRecursiveTask_whenExecuted_thenCorrect() { - - ForkJoinPool forkJoinPool = ForkJoinPool.commonPool(); - - forkJoinPool.execute(customRecursiveTask); - int result = customRecursiveTask.join(); - assertTrue(customRecursiveTask.isDone()); - - forkJoinPool.submit(customRecursiveTask); - int resultTwo = customRecursiveTask.join(); - assertTrue(customRecursiveTask.isDone()); - - } - - @Test - public void executeRecursiveTaskWithFJ_whenExecuted_thenCorrect() { - - CustomRecursiveTask customRecursiveTaskFirst = new CustomRecursiveTask(arr); - CustomRecursiveTask customRecursiveTaskSecond = new CustomRecursiveTask(arr); - CustomRecursiveTask customRecursiveTaskLast = new CustomRecursiveTask(arr); - - customRecursiveTaskFirst.fork(); - customRecursiveTaskSecond.fork(); - customRecursiveTaskLast.fork(); - int result = 0; - result += customRecursiveTaskLast.join(); - result += customRecursiveTaskSecond.join(); - result += customRecursiveTaskFirst.join(); - - assertTrue(customRecursiveTaskFirst.isDone()); - assertTrue(customRecursiveTaskSecond.isDone()); - assertTrue(customRecursiveTaskLast.isDone()); - assertTrue(result != 0); - - } -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8FunctionalInteracesLambdasTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8FunctionalInteracesLambdasTest.java deleted file mode 100644 index faaf3ae407..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8FunctionalInteracesLambdasTest.java +++ /dev/null @@ -1,94 +0,0 @@ -package com.baeldung.java8; - -import com.baeldung.Foo; -import com.baeldung.FooExtended; -import com.baeldung.UseFoo; -import org.junit.Before; -import org.junit.Test; - -import java.util.function.Function; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; - -public class Java8FunctionalInteracesLambdasTest { - - private UseFoo useFoo; - - @Before - public void init() { - useFoo = new UseFoo(); - } - - @Test - public void functionalInterfaceInstantiation_whenReturnDefiniteString_thenCorrect() { - final Foo foo = parameter -> parameter + "from lambda"; - final String result = useFoo.add("Message ", foo); - - assertEquals("Message from lambda", result); - } - - @Test - public void standardFIParameter_whenReturnDefiniteString_thenCorrect() { - final Function fn = parameter -> parameter + "from lambda"; - final String result = useFoo.addWithStandardFI("Message ", fn); - - assertEquals("Message from lambda", result); - } - - @Test - public void defaultMethodFromExtendedInterface_whenReturnDefiniteString_thenCorrect() { - final FooExtended fooExtended = string -> string; - final String result = fooExtended.defaultMethod(); - - assertEquals("String from Bar", result); - } - - @Test - public void lambdaAndInnerClassInstantiation_whenReturnSameString_thenCorrect() { - final Foo foo = parameter -> parameter + "from Foo"; - - final Foo fooByIC = new Foo() { - @Override - public String method(final String string) { - return string + "from Foo"; - } - }; - - assertEquals(foo.method("Something "), fooByIC.method("Something ")); - } - - @Test - public void accessVariablesFromDifferentScopes_whenReturnPredefinedString_thenCorrect() { - assertEquals("Results: resultIC = Inner class value, resultLambda = Enclosing scope value", useFoo.scopeExperiment()); - } - - @Test - public void shorteningLambdas_whenReturnEqualsResults_thenCorrect() { - final Foo foo = parameter -> buildString(parameter); - - final Foo fooHuge = parameter -> { - final String result = "Something " + parameter; - // many lines of code - return result; - }; - - assertEquals(foo.method("Something"), fooHuge.method("Something")); - } - - private String buildString(final String parameter) { - final String result = "Something " + parameter; - // many lines of code - return result; - } - - @Test - public void mutatingOfEffectivelyFinalVariable_whenNotEquals_thenCorrect() { - final int[] total = new int[1]; - final Runnable r = () -> total[0]++; - r.run(); - - assertNotEquals(0, total[0]); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java deleted file mode 100644 index d9d88c5052..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.baeldung.java8; - -import com.baeldung.java_8_features.User; -import org.junit.Before; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class Java8MethodReferenceTest { - - private List list; - - @Before - public void init() { - list = new ArrayList<>(); - list.add("One"); - list.add("OneAndOnly"); - list.add("Derek"); - list.add("Change"); - list.add("factory"); - list.add("justBefore"); - list.add("Italy"); - list.add("Italy"); - list.add("Thursday"); - list.add(""); - list.add(""); - } - - @Test - public void checkStaticMethodReferences_whenWork_thenCorrect() { - - List users = new ArrayList<>(); - users.add(new User()); - users.add(new User()); - boolean isReal = users.stream().anyMatch(u -> User.isRealUser(u)); - boolean isRealRef = users.stream().anyMatch(User::isRealUser); - assertTrue(isReal); - assertTrue(isRealRef); - } - - @Test - public void checkInstanceMethodReferences_whenWork_thenCorrect() { - User user = new User(); - boolean isLegalName = list.stream().anyMatch(user::isLegalName); - assertTrue(isLegalName); - } - - @Test - public void checkParticularTypeReferences_whenWork_thenCorrect() { - long count = list.stream().filter(String::isEmpty).count(); - assertEquals(count, 2); - } - - @Test - public void checkConstructorReferences_whenWork_thenCorrect() { - Stream stream = list.stream().map(User::new); - List userList = stream.collect(Collectors.toList()); - assertEquals(userList.size(), list.size()); - assertTrue(userList.get(0) instanceof User); - } -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8OptionalTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8OptionalTest.java deleted file mode 100644 index 26de39bc0e..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8OptionalTest.java +++ /dev/null @@ -1,118 +0,0 @@ -package com.baeldung.java8; - -import com.baeldung.java_8_features.*; -import org.junit.Before; -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; - -import static org.junit.Assert.*; - -public class Java8OptionalTest { - - private List list; - - @Before - public void init() { - list = new ArrayList<>(); - list.add("One"); - list.add("OneAndOnly"); - list.add("Derek"); - list.add("Change"); - list.add("factory"); - list.add("justBefore"); - list.add("Italy"); - list.add("Italy"); - list.add("Thursday"); - list.add(""); - list.add(""); - } - - @Test - public void checkOptional_whenAsExpected_thenCorrect() { - - Optional optionalEmpty = Optional.empty(); - assertFalse(optionalEmpty.isPresent()); - - String str = "value"; - Optional optional = Optional.of(str); - assertEquals(optional.get(), "value"); - - Optional optionalNullable = Optional.ofNullable(str); - Optional optionalNull = Optional.ofNullable(null); - assertEquals(optionalNullable.get(), "value"); - assertFalse(optionalNull.isPresent()); - - List listOpt = Optional.of(list).orElse(new ArrayList<>()); - List listNull = null; - List listOptNull = Optional.ofNullable(listNull).orElse(new ArrayList<>()); - assertTrue(listOpt == list); - assertTrue(listOptNull.isEmpty()); - - Optional user = Optional.ofNullable(getUser()); - String result = user.map(User::getAddress) - .map(Address::getStreet) - .orElse("not specified"); - assertEquals(result, "1st Avenue"); - - Optional optionalUser = Optional.ofNullable(getOptionalUser()); - String resultOpt = optionalUser.flatMap(OptionalUser::getAddress) - .flatMap(OptionalAddress::getStreet) - .orElse("not specified"); - assertEquals(resultOpt, "1st Avenue"); - - Optional userNull = Optional.ofNullable(getUserNull()); - String resultNull = userNull.map(User::getAddress) - .map(Address::getStreet) - .orElse("not specified"); - assertEquals(resultNull, "not specified"); - - Optional optionalUserNull = Optional.ofNullable(getOptionalUserNull()); - String resultOptNull = optionalUserNull.flatMap(OptionalUser::getAddress) - .flatMap(OptionalAddress::getStreet) - .orElse("not specified"); - assertEquals(resultOptNull, "not specified"); - - } - - @Test(expected = CustomException.class) - public void callMethod_whenCustomException_thenCorrect() { - User user = new User(); - String result = user.getOrThrow(); - } - - private User getUser() { - User user = new User(); - Address address = new Address(); - address.setStreet("1st Avenue"); - user.setAddress(address); - return user; - } - - private OptionalUser getOptionalUser() { - OptionalUser user = new OptionalUser(); - OptionalAddress address = new OptionalAddress(); - address.setStreet("1st Avenue"); - user.setAddress(address); - return user; - } - - private OptionalUser getOptionalUserNull() { - OptionalUser user = new OptionalUser(); - OptionalAddress address = new OptionalAddress(); - address.setStreet(null); - user.setAddress(address); - return user; - } - - private User getUserNull() { - User user = new User(); - Address address = new Address(); - address.setStreet(null); - user.setAddress(address); - return user; - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8SortUnitTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8SortUnitTest.java deleted file mode 100644 index f371c0d7da..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8SortUnitTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.baeldung.java8; - -import com.baeldung.java8.entity.Human; -import com.google.common.collect.Lists; -import com.google.common.primitives.Ints; -import org.junit.Assert; -import org.junit.Test; - -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -import static org.hamcrest.Matchers.equalTo; - -public class Java8SortUnitTest { - - // tests - - - @Test - public final void givenPreLambda_whenSortingEntitiesByName_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); - - Collections.sort(humans, new Comparator() { - @Override - public final int compare(final Human h1, final Human h2) { - return h1.getName().compareTo(h2.getName()); - } - }); - - Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); - } - - @Test - public final void whenSortingEntitiesByName_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); - - humans.sort((final Human h1, final Human h2) -> h1.getName().compareTo(h2.getName())); - - Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); - } - - @Test - public final void givenLambdaShortForm_whenSortingEntitiesByName_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); - - humans.sort((h1, h2) -> h1.getName().compareTo(h2.getName())); - - Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); - } - - @Test - public final void whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 12), new Human("Sarah", 10), new Human("Zack", 12)); - humans.sort((lhs, rhs) -> { - if (lhs.getName().equals(rhs.getName())) { - return lhs.getAge() - rhs.getAge(); - } else { - return lhs.getName().compareTo(rhs.getName()); - } - }); - Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); - } - - @Test - public final void givenCompositionVerbose_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 12), new Human("Sarah", 10), new Human("Zack", 12)); - final Comparator byName = (h1, h2) -> h1.getName().compareTo(h2.getName()); - final Comparator byAge = (h1, h2) -> Ints.compare(h1.getAge(), h2.getAge()); - - humans.sort(byName.thenComparing(byAge)); - Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); - } - - @Test - public final void givenComposition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 12), new Human("Sarah", 10), new Human("Zack", 12)); - - humans.sort(Comparator.comparing(Human::getName).thenComparing(Human::getAge)); - Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); - } - - @Test - public final void whenSortingEntitiesByAge_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); - - humans.sort((h1, h2) -> Ints.compare(h1.getAge(), h2.getAge())); - Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); - } - - @Test - public final void whenSortingEntitiesByNameReversed_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); - final Comparator comparator = (h1, h2) -> h1.getName().compareTo(h2.getName()); - - humans.sort(comparator.reversed()); - Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); - } - - @Test - public final void givenMethodDefinition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); - - humans.sort(Human::compareByNameThenAge); - Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); - } - - @Test - public final void givenInstanceMethod_whenSortingEntitiesByName_thenCorrectlySorted() { - final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); - - humans.sort(Comparator.comparing(Human::getName)); - Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java deleted file mode 100644 index 37326c6d26..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java +++ /dev/null @@ -1,263 +0,0 @@ -package com.baeldung.java8; - -import com.baeldung.streamApi.Product; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedWriter; -import java.io.IOException; -import java.nio.charset.Charset; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.*; -import java.util.regex.Pattern; -import java.util.stream.*; - -import static org.junit.Assert.*; - -public class Java8StreamApiTest { - - private long counter; - - private static Logger log = LoggerFactory.getLogger(Java8StreamApiTest.class); - - private List productList; - - @Before - public void init() { - productList = Arrays.asList( - new Product(23, "potatoes"), new Product(14, "orange"), - new Product(13, "lemon"), new Product(23, "bread"), - new Product(13, "sugar")); - } - - @Test - public void checkPipeline_whenStreamOneElementShorter_thenCorrect() { - - List list = Arrays.asList("abc1", "abc2", "abc3"); - long size = list.stream().skip(1) - .map(element -> element.substring(0, 3)).count(); - assertEquals(list.size() - 1, size); - } - - @Test - public void checkOrder_whenChangeQuantityOfMethodCalls_thenCorrect() { - - List list = Arrays.asList("abc1", "abc2", "abc3"); - - counter = 0; - long sizeFirst = list.stream() - .skip(2).map(element -> { - wasCalled(); - return element.substring(0, 3); - }).count(); - assertEquals(1, counter); - - counter = 0; - long sizeSecond = list.stream().map(element -> { - wasCalled(); - return element.substring(0, 3); - }).skip(2).count(); - assertEquals(3, counter); - } - - @Test - public void createEmptyStream_whenEmpty_thenCorrect() { - - Stream streamEmpty = Stream.empty(); - assertEquals(0, streamEmpty.count()); - - List names = Collections.emptyList(); - Stream streamOf = Product.streamOf(names); - assertTrue(streamOf.count() == 0); - } - - @Test - public void createStream_whenCreated_thenCorrect() { - - Collection collection = Arrays.asList("a", "b", "c"); - Stream streamOfCollection = collection.stream(); - assertEquals(3, streamOfCollection.count()); - - Stream streamOfArray = Stream.of("a", "b", "c"); - assertEquals(3, streamOfArray.count()); - - String[] arr = new String[]{"a", "b", "c"}; - Stream streamOfArrayPart = Arrays.stream(arr, 1, 3); - assertEquals(2, streamOfArrayPart.count()); - - IntStream intStream = IntStream.range(1, 3); - LongStream longStream = LongStream.rangeClosed(1, 3); - Random random = new Random(); - DoubleStream doubleStream = random.doubles(3); - assertEquals(2, intStream.count()); - assertEquals(3, longStream.count()); - assertEquals(3, doubleStream.count()); - - IntStream streamOfChars = "abc".chars(); - IntStream str = "".chars(); - assertEquals(3, streamOfChars.count()); - - Stream streamOfString = Pattern.compile(", ").splitAsStream("a, b, c"); - assertEquals("a", streamOfString.findFirst().get()); - - Path path = getPath(); - Stream streamOfStrings = null; - try { - streamOfStrings = Files.lines(path, Charset.forName("UTF-8")); - } catch (IOException e) { - log.error("Error creating streams from paths {}", path, e.getMessage(), e); - } - assertEquals("a", streamOfStrings.findFirst().get()); - - Stream streamBuilder = Stream.builder().add("a").add("b").add("c").build(); - assertEquals(3, streamBuilder.count()); - - Stream streamGenerated = Stream.generate(() -> "element").limit(10); - assertEquals(10, streamGenerated.count()); - - Stream streamIterated = Stream.iterate(40, n -> n + 2).limit(20); - assertTrue(40 <= streamIterated.findAny().get()); - } - - @Test - public void runStreamPipeline_whenOrderIsRight_thenCorrect() { - - List list = Arrays.asList("abc1", "abc2", "abc3"); - Optional stream = list.stream() - .filter(element -> { - log.info("filter() was called"); - return element.contains("2"); - }).map(element -> { - log.info("map() was called"); - return element.toUpperCase(); - }).findFirst(); - } - - @Test - public void reduce_whenExpected_thenCorrect() { - - OptionalInt reduced = IntStream.range(1, 4).reduce((a, b) -> a + b); - assertEquals(6, reduced.getAsInt()); - - int reducedTwoParams = IntStream.range(1, 4).reduce(10, (a, b) -> a + b); - assertEquals(16, reducedTwoParams); - - int reducedThreeParams = Stream.of(1, 2, 3) - .reduce(10, (a, b) -> a + b, (a, b) -> { - log.info("combiner was called"); - return a + b; - }); - assertEquals(16, reducedThreeParams); - - int reducedThreeParamsParallel = Arrays.asList(1, 2, 3).parallelStream() - .reduce(10, (a, b) -> a + b, (a, b) -> { - log.info("combiner was called"); - return a + b; - }); - assertEquals(36, reducedThreeParamsParallel); - } - - @Test - public void collecting_whenAsExpected_thenCorrect() { - - List collectorCollection = productList.stream() - .map(Product::getName).collect(Collectors.toList()); - - assertTrue(collectorCollection instanceof List); - assertEquals(5, collectorCollection.size()); - - String listToString = productList.stream().map(Product::getName) - .collect(Collectors.joining(", ", "[", "]")); - - assertTrue(listToString.contains(",") && listToString.contains("[") && listToString.contains("]")); - - double averagePrice = productList.stream().collect(Collectors.averagingInt(Product::getPrice)); - assertTrue(17.2 == averagePrice); - - int summingPrice = productList.stream().collect(Collectors.summingInt(Product::getPrice)); - assertEquals(86, summingPrice); - - IntSummaryStatistics statistics = productList.stream() - .collect(Collectors.summarizingInt(Product::getPrice)); - assertEquals(23, statistics.getMax()); - - Map> collectorMapOfLists = productList.stream() - .collect(Collectors.groupingBy(Product::getPrice)); - assertEquals(3, collectorMapOfLists.keySet().size()); - - Map> mapPartioned = productList.stream() - .collect(Collectors.partitioningBy(element -> element.getPrice() > 15)); - assertEquals(2, mapPartioned.keySet().size()); - - } - - @Test(expected = UnsupportedOperationException.class) - public void collect_whenThrows_thenCorrect() { - Set unmodifiableSet = productList.stream() - .collect(Collectors.collectingAndThen(Collectors.toSet(), - Collections::unmodifiableSet)); - unmodifiableSet.add(new Product(4, "tea")); - } - - @Test - public void customCollector_whenResultContainsAllElementsFrSource_thenCorrect() { - Collector> toLinkedList = - Collector.of(LinkedList::new, LinkedList::add, - (first, second) -> { - first.addAll(second); - return first; - }); - - LinkedList linkedListOfPersons = productList.stream().collect(toLinkedList); - assertTrue(linkedListOfPersons.containsAll(productList)); - } - - @Test - public void parallelStream_whenWorks_thenCorrect() { - Stream streamOfCollection = productList.parallelStream(); - boolean isParallel = streamOfCollection.isParallel(); - boolean haveBigPrice = streamOfCollection.map(product -> product.getPrice() * 12) - .anyMatch(price -> price > 200); - assertTrue(isParallel && haveBigPrice); - } - - @Test - public void parallel_whenIsParallel_thenCorrect() { - IntStream intStreamParallel = - IntStream.range(1, 150).parallel().map(element -> element * 34); - boolean isParallel = intStreamParallel.isParallel(); - assertTrue(isParallel); - } - - @Test - public void parallel_whenIsSequential_thenCorrect() { - IntStream intStreamParallel = - IntStream.range(1, 150).parallel().map(element -> element * 34); - IntStream intStreamSequential = intStreamParallel.sequential(); - boolean isParallel = intStreamParallel.isParallel(); - assertFalse(isParallel); - } - - private Path getPath() { - Path path = null; - try { - path = Files.createTempFile(null, ".txt"); - } catch (IOException e) { - log.error(e.getMessage()); - } - - try (BufferedWriter writer = Files.newBufferedWriter(path)) { - writer.write("a\nb\nc"); - } catch (IOException e) { - log.error(e.getMessage()); - } - return path; - } - - private void wasCalled() { - counter++; - } -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamsTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamsTest.java deleted file mode 100644 index 1f1dda49ce..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamsTest.java +++ /dev/null @@ -1,113 +0,0 @@ -package com.baeldung.java8; - -import com.baeldung.java_8_features.Detail; -import org.junit.Before; -import org.junit.Test; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.Assert.*; - -public class Java8StreamsTest { - - private List list; - - @Before - public void init() { - list = new ArrayList<>(); - list.add("One"); - list.add("OneAndOnly"); - list.add("Derek"); - list.add("Change"); - list.add("factory"); - list.add("justBefore"); - list.add("Italy"); - list.add("Italy"); - list.add("Thursday"); - list.add(""); - list.add(""); - } - - @Test - public void checkStreamCount_whenCreating_givenDifferentSources() { - String[] arr = new String[]{"a", "b", "c"}; - Stream streamArr = Arrays.stream(arr); - assertEquals(streamArr.count(), 3); - - Stream streamOf = Stream.of("a", "b", "c"); - assertEquals(streamOf.count(), 3); - - long count = list.stream().distinct().count(); - assertEquals(count, 9); - } - - - @Test - public void checkStreamCount_whenOperationFilter_thanCorrect() { - Stream streamFilter = list.stream().filter(element -> element.isEmpty()); - assertEquals(streamFilter.count(), 2); - } - - - @Test - public void checkStreamCount_whenOperationMap_thanCorrect() { - List uris = new ArrayList<>(); - uris.add("C:\\My.txt"); - Stream streamMap = uris.stream().map(uri -> Paths.get(uri)); - assertEquals(streamMap.count(), 1); - - List details = new ArrayList<>(); - details.add(new Detail()); - details.add(new Detail()); - Stream streamFlatMap = details.stream() - .flatMap(detail -> detail.getParts().stream()); - assertEquals(streamFlatMap.count(), 4); - } - - - @Test - public void checkStreamCount_whenOperationMatch_thenCorrect() { - boolean isValid = list.stream().anyMatch(element -> element.contains("h")); - boolean isValidOne = list.stream().allMatch(element -> element.contains("h")); - boolean isValidTwo = list.stream().noneMatch(element -> element.contains("h")); - assertTrue(isValid); - assertFalse(isValidOne); - assertFalse(isValidTwo); - } - - - @Test - public void checkStreamReducedValue_whenOperationReduce_thenCorrect() { - List integers = new ArrayList<>(); - integers.add(1); - integers.add(1); - integers.add(1); - Integer reduced = integers.stream().reduce(23, (a, b) -> a + b); - assertTrue(reduced == 26); - } - - @Test - public void checkStreamContains_whenOperationCollect_thenCorrect() { - List resultList = list.stream() - .map(element -> element.toUpperCase()) - .collect(Collectors.toList()); - assertEquals(resultList.size(), list.size()); - assertTrue(resultList.contains("")); - } - - - @Test - public void checkParallelStream_whenDoWork() { - list.parallelStream().forEach(element -> doWork(element)); - } - - private void doWork(String string) { - assertTrue(true); //just imitate an amount of work - } -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java b/core-java-8/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java deleted file mode 100644 index f2e7452137..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.baeldung.java8; - -import org.apache.commons.io.FileUtils; -import org.junit.Before; -import org.junit.Test; - -import java.io.File; -import java.io.IOException; -import java.nio.file.*; -import java.nio.file.attribute.BasicFileAttributes; -import java.text.DecimalFormat; -import java.util.concurrent.atomic.AtomicLong; -import java.util.stream.StreamSupport; - -import static org.junit.Assert.assertEquals; - -public class JavaFolderSizeTest { - - private String path; - - @Before - public void init() { - final String separator = File.separator; - path = String.format("src%stest%sresources", separator, separator); - } - - @Test - public void whenGetFolderSizeRecursive_thenCorrect() { - final long expectedSize = 136; - - final File folder = new File(path); - final long size = getFolderSize(folder); - - assertEquals(expectedSize, size); - } - - @Test - public void whenGetFolderSizeUsingJava7_thenCorrect() throws IOException { - final long expectedSize = 136; - - final AtomicLong size = new AtomicLong(0); - final Path folder = Paths.get(path); - - Files.walkFileTree(folder, new SimpleFileVisitor() { - @Override - public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { - size.addAndGet(attrs.size()); - return FileVisitResult.CONTINUE; - } - }); - - assertEquals(expectedSize, size.longValue()); - } - - @Test - public void whenGetFolderSizeUsingJava8_thenCorrect() throws IOException { - final long expectedSize = 136; - - final Path folder = Paths.get(path); - final long size = Files.walk(folder).filter(p -> p.toFile().isFile()).mapToLong(p -> p.toFile().length()).sum(); - - assertEquals(expectedSize, size); - } - - @Test - public void whenGetFolderSizeUsingApacheCommonsIO_thenCorrect() { - final long expectedSize = 136; - - final File folder = new File(path); - final long size = FileUtils.sizeOfDirectory(folder); - - assertEquals(expectedSize, size); - } - - @Test - public void whenGetFolderSizeUsingGuava_thenCorrect() { - final long expectedSize = 136; - - final File folder = new File(path); - - final Iterable files = com.google.common.io.Files.fileTreeTraverser().breadthFirstTraversal(folder); - final long size = StreamSupport.stream(files.spliterator(), false) - .filter(File::isFile) - .mapToLong(File::length).sum(); - - assertEquals(expectedSize, size); - } - - @Test - public void whenGetReadableSize_thenCorrect() { - final File folder = new File(path); - final long size = getFolderSize(folder); - - final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"}; - final int unitIndex = (int) (Math.log10(size) / 3); - final double unitValue = 1 << (unitIndex * 10); - - final String readableSize = new DecimalFormat("#,##0.#").format(size / unitValue) + " " + units[unitIndex]; - assertEquals("136 B", readableSize); - } - - private long getFolderSize(final File folder) { - long length = 0; - final File[] files = folder.listFiles(); - - for (File file : files) { - if (file.isFile()) { - length += file.length(); - } else { - length += getFolderSize(file); - } - } - return length; - } -} \ No newline at end of file diff --git a/core-java-8/src/test/java/com/baeldung/java8/JavaTryWithResourcesTest.java b/core-java-8/src/test/java/com/baeldung/java8/JavaTryWithResourcesTest.java deleted file mode 100644 index 224c4e9d6a..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/JavaTryWithResourcesTest.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.baeldung.java8; - -import org.junit.Assert; -import org.junit.Test; - -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.Date; -import java.util.Scanner; - -public class JavaTryWithResourcesTest { - - private static final String TEST_STRING_HELLO_WORLD = "Hello World"; - private Date resource1Date, resource2Date; - - // tests - - /* Example for using Try_with_resources */ - @Test - public void whenWritingToStringWriter_thenCorrectlyWritten() { - final StringWriter sw = new StringWriter(); - try (PrintWriter pw = new PrintWriter(sw, true)) { - pw.print(TEST_STRING_HELLO_WORLD); - } - - Assert.assertEquals(sw.getBuffer().toString(), TEST_STRING_HELLO_WORLD); - } - - /* Example for using multiple resources */ - @Test - public void givenStringToScanner_whenWritingToStringWriter_thenCorrectlyWritten() { - - final StringWriter sw = new StringWriter(); - try (Scanner sc = new Scanner(TEST_STRING_HELLO_WORLD); PrintWriter pw = new PrintWriter(sw, true)) { - while (sc.hasNext()) { - pw.print(sc.nextLine()); - } - } - - Assert.assertEquals(sw.getBuffer().toString(), TEST_STRING_HELLO_WORLD); - } - - /* Example to show order in which the resources are closed */ - @Test - public void whenFirstAutoClosableResourceIsinitializedFirst_thenFirstAutoClosableResourceIsReleasedFirst() throws Exception { - try (AutoCloseableResourcesFirst af = new AutoCloseableResourcesFirst(); AutoCloseableResourcesSecond as = new AutoCloseableResourcesSecond()) { - af.doSomething(); - as.doSomething(); - } - Assert.assertTrue(resource1Date.after(resource2Date)); - } - - class AutoCloseableResourcesFirst implements AutoCloseable { - public AutoCloseableResourcesFirst() { - System.out.println("Constructor -> AutoCloseableResources_First"); - } - - public void doSomething() { - System.out.println("Something -> AutoCloseableResources_First"); - } - - @Override - public void close() throws Exception { - System.out.println("Closed AutoCloseableResources_First"); - resource1Date = new Date(); - } - } - - class AutoCloseableResourcesSecond implements AutoCloseable { - public AutoCloseableResourcesSecond() { - System.out.println("Constructor -> AutoCloseableResources_Second"); - } - - public void doSomething() { - System.out.println("Something -> AutoCloseableResources_Second"); - } - - @Override - public void close() throws Exception { - System.out.println("Closed AutoCloseableResources_Second"); - resource2Date = new Date(); - Thread.sleep(10000); - } - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeTest.java b/core-java-8/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeTest.java deleted file mode 100644 index 164a571817..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.baeldung.java8.base64; - -import org.apache.commons.codec.binary.Base64; -import org.junit.Test; - -import java.io.UnsupportedEncodingException; - -import static org.junit.Assert.*; - -public class ApacheCommonsEncodeDecodeTest { - - // tests - - @Test - public void whenStringIsEncoded() throws UnsupportedEncodingException { - final String originalInput = "test input"; - final Base64 base64 = new Base64(); - final String encodedString = new String(base64.encode(originalInput.getBytes())); - - assertNotNull(encodedString); - assertNotEquals(originalInput, encodedString); - } - - @Test - public void whenStringIsEncoded_thenStringCanBeDecoded() throws UnsupportedEncodingException { - final String originalInput = "test input"; - final Base64 base64 = new Base64(); - final String encodedString = new String(base64.encode(originalInput.getBytes())); - - final String decodedString = new String(base64.decode(encodedString.getBytes())); - - assertNotNull(decodedString); - assertEquals(originalInput, decodedString); - } - - @Test - public void whenStringIsEncodedUsingStaticMethod() throws UnsupportedEncodingException { - final String originalInput = "test input"; - final String encodedString = new String(Base64.encodeBase64(originalInput.getBytes())); - - assertNotNull(encodedString); - assertNotEquals(originalInput, encodedString); - } - - @Test - public void whenStringIsEncodedUsingStaticMethod_thenStringCanBeDecodedUsingStaticMethod() throws UnsupportedEncodingException { - final String originalInput = "test input"; - final String encodedString = new String(Base64.encodeBase64(originalInput.getBytes())); - - final String decodedString = new String(Base64.decodeBase64(encodedString.getBytes())); - - assertNotNull(decodedString); - assertEquals(originalInput, decodedString); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeTest.java b/core-java-8/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeTest.java deleted file mode 100644 index 18dccf71ba..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeTest.java +++ /dev/null @@ -1,109 +0,0 @@ -package com.baeldung.java8.base64; - -import org.junit.Test; - -import java.io.UnsupportedEncodingException; -import java.util.Base64; -import java.util.UUID; - -import static org.junit.Assert.*; - -public class Java8EncodeDecodeTest { - - // tests - - @Test - public void whenStringIsEncoded_thenOk() throws UnsupportedEncodingException { - final String originalInput = "test input"; - final String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes()); - - assertNotNull(encodedString); - assertNotEquals(originalInput, encodedString); - } - - @Test - public void whenStringIsEncoded_thenStringCanBeDecoded() throws UnsupportedEncodingException { - final String originalInput = "test input"; - final String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes()); - - final byte[] decodedBytes = Base64.getDecoder().decode(encodedString); - final String decodedString = new String(decodedBytes); - - assertNotNull(decodedString); - assertEquals(originalInput, decodedString); - } - - @Test - public void whenStringIsEncodedWithoutPadding_thenOk() throws UnsupportedEncodingException { - final String originalInput = "test input"; - final String encodedString = Base64.getEncoder().withoutPadding().encodeToString(originalInput.getBytes()); - - assertNotNull(encodedString); - assertNotEquals(originalInput, encodedString); - } - - @Test - public void whenStringIsEncodedWithoutPadding_thenStringCanBeDecoded() throws UnsupportedEncodingException { - final String originalInput = "test input"; - final String encodedString = Base64.getEncoder().withoutPadding().encodeToString(originalInput.getBytes()); - - final byte[] decodedBytes = Base64.getDecoder().decode(encodedString); - final String decodedString = new String(decodedBytes); - - assertNotNull(decodedString); - assertEquals(originalInput, decodedString); - } - - @Test - public void whenUrlIsEncoded_thenOk() throws UnsupportedEncodingException { - final String originalUrl = "https://www.google.co.nz/?gfe_rd=cr&ei=dzbFVf&gws_rd=ssl#q=java"; - final String encodedUrl = Base64.getUrlEncoder().encodeToString(originalUrl.getBytes()); - assertNotNull(encodedUrl); - assertNotEquals(originalUrl, encodedUrl); - } - - @Test - public void whenUrlIsEncoded_thenURLCanBeDecoded() throws UnsupportedEncodingException { - final String originalUrl = "https://www.google.co.nz/?gfe_rd=cr&ei=dzbFVf&gws_rd=ssl#q=java"; - final String encodedUrl = Base64.getUrlEncoder().encodeToString(originalUrl.getBytes()); - - final byte[] decodedBytes = Base64.getUrlDecoder().decode(encodedUrl.getBytes()); - final String decodedUrl = new String(decodedBytes); - - assertNotNull(decodedUrl); - assertEquals(originalUrl, decodedUrl); - } - - @Test - public void whenMimeIsEncoded_thenOk() throws UnsupportedEncodingException { - final StringBuilder buffer = getMimeBuffer(); - - final byte[] forEncode = buffer.toString().getBytes(); - final String encodedMime = Base64.getMimeEncoder().encodeToString(forEncode); - - assertNotNull(encodedMime); - } - - @Test - public void whenMimeIsEncoded_thenItCanBeDecoded() throws UnsupportedEncodingException { - final StringBuilder buffer = getMimeBuffer(); - - final byte[] forEncode = buffer.toString().getBytes(); - final String encodedMime = Base64.getMimeEncoder().encodeToString(forEncode); - - final byte[] decodedBytes = Base64.getMimeDecoder().decode(encodedMime); - final String decodedMime = new String(decodedBytes); - assertNotNull(decodedMime); - } - - // - - private static StringBuilder getMimeBuffer() { - final StringBuilder buffer = new StringBuilder(); - for (int count = 0; count < 10; ++count) { - buffer.append(UUID.randomUUID().toString()); - } - return buffer; - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/entity/Human.java b/core-java-8/src/test/java/com/baeldung/java8/entity/Human.java deleted file mode 100644 index cab8546129..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/entity/Human.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.baeldung.java8.entity; - -public class Human { - private String name; - private int age; - - public Human() { - super(); - } - - public Human(final String name, final int age) { - super(); - - this.name = name; - this.age = age; - } - - // API - - public String getName() { - return name; - } - - public void setName(final String name) { - this.name = name; - } - - public int getAge() { - return age; - } - - public void setAge(final int age) { - this.age = age; - } - - // compare - - public static int compareByNameThenAge(final Human lhs, final Human rhs) { - if (lhs.name.equals(rhs.name)) { - return lhs.age - rhs.age; - } else { - return lhs.name.compareTo(rhs.name); - } - } - - // - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + age; - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } - - @Override - public boolean equals(final Object obj) { - if (this == obj) { - return true; - } - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final Human other = (Human) obj; - if (age != other.age) { - return false; - } - if (name == null) { - if (other.name != null) { - return false; - } - } else if (!name.equals(other.name)) { - return false; - } - return true; - } - - @Override - public String toString() { - final StringBuilder builder = new StringBuilder(); - builder.append("Human [name=").append(name).append(", age=").append(age).append("]"); - return builder.toString(); - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/threadpool/CoreThreadPoolTest.java b/core-java-8/src/test/java/com/baeldung/threadpool/CoreThreadPoolTest.java deleted file mode 100644 index df336f4a93..0000000000 --- a/core-java-8/src/test/java/com/baeldung/threadpool/CoreThreadPoolTest.java +++ /dev/null @@ -1,146 +0,0 @@ -package com.baeldung.threadpool; - -import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicInteger; - -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public class CoreThreadPoolTest { - - @Test(timeout = 1000) - public void whenCallingExecuteWithRunnable_thenRunnableIsExecuted() throws InterruptedException { - - CountDownLatch lock = new CountDownLatch(1); - - Executor executor = Executors.newSingleThreadExecutor(); - executor.execute(() -> { - System.out.println("Hello World"); - lock.countDown(); - }); - - lock.await(1000, TimeUnit.MILLISECONDS); - } - - @Test - public void whenUsingExecutorServiceAndFuture_thenCanWaitOnFutureResult() throws InterruptedException, ExecutionException { - - ExecutorService executorService = Executors.newFixedThreadPool(10); - Future future = executorService.submit(() -> "Hello World"); - String result = future.get(); - - assertEquals("Hello World", result); - - } - - @Test - public void whenUsingFixedThreadPool_thenCoreAndMaximumThreadSizeAreTheSame() { - - ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(2); - executor.submit(() -> { - Thread.sleep(1000); - return null; - }); - executor.submit(() -> { - Thread.sleep(1000); - return null; - }); - executor.submit(() -> { - Thread.sleep(1000); - return null; - }); - - assertEquals(2, executor.getPoolSize()); - assertEquals(1, executor.getQueue().size()); - - } - - @Test - public void whenUsingCachedThreadPool_thenPoolSizeGrowsUnbounded() { - ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool(); - executor.submit(() -> { - Thread.sleep(1000); - return null; - }); - executor.submit(() -> { - Thread.sleep(1000); - return null; - }); - executor.submit(() -> { - Thread.sleep(1000); - return null; - }); - - assertEquals(3, executor.getPoolSize()); - assertEquals(0, executor.getQueue().size()); - - } - - @Test(timeout = 1000) - public void whenUsingSingleThreadPool_thenTasksExecuteSequentially() throws InterruptedException { - - CountDownLatch lock = new CountDownLatch(2); - AtomicInteger counter = new AtomicInteger(); - - ExecutorService executor = Executors.newSingleThreadExecutor(); - executor.submit(() -> { - counter.set(1); - lock.countDown(); - }); - executor.submit(() -> { - counter.compareAndSet(1, 2); - lock.countDown(); - }); - - lock.await(1000, TimeUnit.MILLISECONDS); - assertEquals(2, counter.get()); - - } - - @Test(timeout = 1000) - public void whenSchedulingTask_thenTaskExecutesWithinGivenPeriod() throws InterruptedException { - - CountDownLatch lock = new CountDownLatch(1); - - ScheduledExecutorService executor = Executors.newScheduledThreadPool(5); - executor.schedule(() -> { - System.out.println("Hello World"); - lock.countDown(); - }, 500, TimeUnit.MILLISECONDS); - - lock.await(1000, TimeUnit.MILLISECONDS); - - } - - @Test(timeout = 1000) - public void whenSchedulingTaskWithFixedPeriod_thenTaskExecutesMultipleTimes() throws InterruptedException { - - CountDownLatch lock = new CountDownLatch(3); - - ScheduledExecutorService executor = Executors.newScheduledThreadPool(5); - ScheduledFuture future = executor.scheduleAtFixedRate(() -> { - System.out.println("Hello World"); - lock.countDown(); - }, 500, 100, TimeUnit.MILLISECONDS); - - lock.await(); - future.cancel(true); - - } - - @Test - public void whenUsingForkJoinPool_thenSumOfTreeElementsIsCalculatedCorrectly() { - - TreeNode tree = new TreeNode(5, - new TreeNode(3), new TreeNode(2, - new TreeNode(2), new TreeNode(8))); - - ForkJoinPool forkJoinPool = ForkJoinPool.commonPool(); - int sum = forkJoinPool.invoke(new CountingTask(tree)); - - assertEquals(20, sum); - } - - -} diff --git a/core-java-8/src/test/java/com/baeldung/threadpool/GuavaThreadPoolTest.java b/core-java-8/src/test/java/com/baeldung/threadpool/GuavaThreadPoolTest.java deleted file mode 100644 index 92e0f9a8cb..0000000000 --- a/core-java-8/src/test/java/com/baeldung/threadpool/GuavaThreadPoolTest.java +++ /dev/null @@ -1,56 +0,0 @@ -package com.baeldung.threadpool; - -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executor; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.stream.Collectors; - -import com.google.common.util.concurrent.Futures; -import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class GuavaThreadPoolTest { - - @Test - public void whenExecutingTaskWithDirectExecutor_thenTheTaskIsExecutedInTheCurrentThread() { - - Executor executor = MoreExecutors.directExecutor(); - - AtomicBoolean executed = new AtomicBoolean(); - - executor.execute(() -> { - try { - Thread.sleep(500); - } catch (InterruptedException e) { - e.printStackTrace(); - } - executed.set(true); - }); - - assertTrue(executed.get()); - } - - @Test - public void whenJoiningFuturesWithAllAsList_thenCombinedFutureCompletesAfterAllFuturesComplete() throws ExecutionException, InterruptedException { - - ExecutorService executorService = Executors.newCachedThreadPool(); - ListeningExecutorService listeningExecutorService = MoreExecutors.listeningDecorator(executorService); - - ListenableFuture future1 = listeningExecutorService.submit(() -> "Hello"); - ListenableFuture future2 = listeningExecutorService.submit(() -> "World"); - - String greeting = Futures.allAsList(future1, future2).get() - .stream() - .collect(Collectors.joining(" ")); - assertEquals("Hello World", greeting); - - } - -} diff --git a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java deleted file mode 100644 index da9027060e..0000000000 --- a/core-java-8/src/test/java/com/baeldung/util/CurrentDateTimeTest.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.baeldung.util; - -import org.junit.Test; - -import java.time.*; -import java.time.temporal.ChronoField; - -import static org.junit.Assert.assertEquals; - -public class CurrentDateTimeTest { - - private static final Clock clock = Clock.fixed(Instant.parse("2016-10-09T15:10:30.00Z"), ZoneId.of("UTC")); - - @Test - public void shouldReturnCurrentDate() { - - final LocalDate now = LocalDate.now(clock); - - assertEquals(9, now.get(ChronoField.DAY_OF_MONTH)); - assertEquals(10, now.get(ChronoField.MONTH_OF_YEAR)); - assertEquals(2016, now.get(ChronoField.YEAR)); - } - - @Test - public void shouldReturnCurrentTime() { - - final LocalTime now = LocalTime.now(clock); - - assertEquals(15, now.get(ChronoField.HOUR_OF_DAY)); - assertEquals(10, now.get(ChronoField.MINUTE_OF_HOUR)); - assertEquals(30, now.get(ChronoField.SECOND_OF_MINUTE)); - } - - @Test - public void shouldReturnCurrentTimestamp() { - - final Instant now = Instant.now(clock); - - assertEquals(clock.instant().getEpochSecond(), now.getEpochSecond()); - } -} diff --git a/core-java-8/src/test/resources/test.txt b/core-java-8/src/test/resources/test.txt deleted file mode 100644 index 652d70630f..0000000000 --- a/core-java-8/src/test/resources/test.txt +++ /dev/null @@ -1 +0,0 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse facilisis neque sed turpis venenatis, non dignissim risus volutpat. \ No newline at end of file diff --git a/core-java/README.md b/core-java/README.md index 45071d54ea..628a48a06e 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -24,4 +24,19 @@ - [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces) - [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) - [Random List Element](http://www.baeldung.com/java-random-list-element) -- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) \ No newline at end of file +- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) + +- [Java 8 – Powerful Comparison with Lambdas](http://www.baeldung.com/java-8-sort-lambda) +- [Java – Directory Size](http://www.baeldung.com/java-folder-size) +- [Java – Try with Resources](http://www.baeldung.com/java-try-with-resources) +- [A Guide to the Java ExecutorService](http://www.baeldung.com/java-executor-service-tutorial) +- [Java 8 New Features](http://www.baeldung.com/java-8-new-features) +- [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips) +- [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator) +- [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams) +- [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava) +- [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors) +- [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams) +- [New Features in Java 8](http://www.baeldung.com/java-8-new-features) +- [Introduction to Java 8 Streams](http://www.baeldung.com/java-8-streams-introduction) +- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join) \ No newline at end of file diff --git a/core-java-8/src/main/java/.gitignore b/core-java/src/main/java/com/baeldung/.gitignore similarity index 100% rename from core-java-8/src/main/java/.gitignore rename to core-java/src/main/java/com/baeldung/.gitignore diff --git a/core-java-8/src/main/java/com/baeldung/Adder.java b/core-java/src/main/java/com/baeldung/Adder.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/Adder.java rename to core-java/src/main/java/com/baeldung/Adder.java diff --git a/core-java-8/src/main/java/com/baeldung/AdderImpl.java b/core-java/src/main/java/com/baeldung/AdderImpl.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/AdderImpl.java rename to core-java/src/main/java/com/baeldung/AdderImpl.java diff --git a/core-java-8/src/main/java/com/baeldung/Bar.java b/core-java/src/main/java/com/baeldung/Bar.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/Bar.java rename to core-java/src/main/java/com/baeldung/Bar.java diff --git a/core-java-8/src/main/java/com/baeldung/Baz.java b/core-java/src/main/java/com/baeldung/Baz.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/Baz.java rename to core-java/src/main/java/com/baeldung/Baz.java diff --git a/core-java-8/src/main/java/com/baeldung/Foo.java b/core-java/src/main/java/com/baeldung/Foo.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/Foo.java rename to core-java/src/main/java/com/baeldung/Foo.java diff --git a/core-java-8/src/main/java/com/baeldung/FooExtended.java b/core-java/src/main/java/com/baeldung/FooExtended.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/FooExtended.java rename to core-java/src/main/java/com/baeldung/FooExtended.java diff --git a/core-java-8/src/main/java/com/baeldung/UseFoo.java b/core-java/src/main/java/com/baeldung/UseFoo.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/UseFoo.java rename to core-java/src/main/java/com/baeldung/UseFoo.java diff --git a/core-java-8/src/main/java/com/baeldung/datetime/README.md b/core-java/src/main/java/com/baeldung/datetime/README.md similarity index 100% rename from core-java-8/src/main/java/com/baeldung/datetime/README.md rename to core-java/src/main/java/com/baeldung/datetime/README.md diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseDuration.java b/core-java/src/main/java/com/baeldung/datetime/UseDuration.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/datetime/UseDuration.java rename to core-java/src/main/java/com/baeldung/datetime/UseDuration.java diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseLocalDate.java b/core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/datetime/UseLocalDate.java rename to core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseLocalDateTime.java b/core-java/src/main/java/com/baeldung/datetime/UseLocalDateTime.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/datetime/UseLocalDateTime.java rename to core-java/src/main/java/com/baeldung/datetime/UseLocalDateTime.java diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseLocalTime.java b/core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/datetime/UseLocalTime.java rename to core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UsePeriod.java b/core-java/src/main/java/com/baeldung/datetime/UsePeriod.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/datetime/UsePeriod.java rename to core-java/src/main/java/com/baeldung/datetime/UsePeriod.java diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseToInstant.java b/core-java/src/main/java/com/baeldung/datetime/UseToInstant.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/datetime/UseToInstant.java rename to core-java/src/main/java/com/baeldung/datetime/UseToInstant.java diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseZonedDateTime.java b/core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/datetime/UseZonedDateTime.java rename to core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java diff --git a/core-java-8/src/main/java/com/baeldung/doublecolon/Computer.java b/core-java/src/main/java/com/baeldung/doublecolon/Computer.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/doublecolon/Computer.java rename to core-java/src/main/java/com/baeldung/doublecolon/Computer.java diff --git a/core-java-8/src/main/java/com/baeldung/doublecolon/ComputerUtils.java b/core-java/src/main/java/com/baeldung/doublecolon/ComputerUtils.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/doublecolon/ComputerUtils.java rename to core-java/src/main/java/com/baeldung/doublecolon/ComputerUtils.java diff --git a/core-java-8/src/main/java/com/baeldung/doublecolon/MacbookPro.java b/core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/doublecolon/MacbookPro.java rename to core-java/src/main/java/com/baeldung/doublecolon/MacbookPro.java diff --git a/core-java-8/src/main/java/com/baeldung/doublecolon/function/ComputerPredicate.java b/core-java/src/main/java/com/baeldung/doublecolon/function/ComputerPredicate.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/doublecolon/function/ComputerPredicate.java rename to core-java/src/main/java/com/baeldung/doublecolon/function/ComputerPredicate.java diff --git a/core-java-8/src/main/java/com/baeldung/doublecolon/function/TriFunction.java b/core-java/src/main/java/com/baeldung/doublecolon/function/TriFunction.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/doublecolon/function/TriFunction.java rename to core-java/src/main/java/com/baeldung/doublecolon/function/TriFunction.java diff --git a/core-java/src/main/java/com/baeldung/enums/Pizza.java b/core-java/src/main/java/com/baeldung/enums/Pizza.java index 7742781081..5bc2d9a9eb 100644 --- a/core-java/src/main/java/com/baeldung/enums/Pizza.java +++ b/core-java/src/main/java/com/baeldung/enums/Pizza.java @@ -1,11 +1,5 @@ package com.baeldung.enums; -import com.fasterxml.jackson.annotation.JsonFormat; -import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.apache.commons.collections15.Predicate; - -import java.io.IOException; import java.util.EnumMap; import java.util.EnumSet; import java.util.List; @@ -13,13 +7,12 @@ import java.util.stream.Collectors; public class Pizza { - private static EnumSet undeliveredPizzaStatuses = - EnumSet.of(PizzaStatus.ORDERED, PizzaStatus.READY); + private static EnumSet deliveredPizzaStatuses = + EnumSet.of(PizzaStatusEnum.DELIVERED); - private PizzaStatus status; + private PizzaStatusEnum status; - @JsonFormat(shape = JsonFormat.Shape.OBJECT) - public enum PizzaStatus { + public enum PizzaStatusEnum { ORDERED(5) { @Override public boolean isOrdered() { @@ -53,21 +46,20 @@ public class Pizza { return false; } - @JsonProperty("timeToDelivery") public int getTimeToDelivery() { return timeToDelivery; } - PizzaStatus(int timeToDelivery) { + PizzaStatusEnum(int timeToDelivery) { this.timeToDelivery = timeToDelivery; } } - public PizzaStatus getStatus() { + public PizzaStatusEnum getStatus() { return status; } - public void setStatus(PizzaStatus status) { + public void setStatus(PizzaStatusEnum status) { this.status = status; } @@ -80,31 +72,20 @@ public class Pizza { } public static List getAllUndeliveredPizzas(List input) { - return input.stream().filter( - (s) -> undeliveredPizzaStatuses.contains(s.getStatus())) - .collect(Collectors.toList()); + return input.stream().filter((s) -> !deliveredPizzaStatuses.contains(s.getStatus())).collect(Collectors.toList()); } - public static EnumMap> - groupPizzaByStatus(List pzList) { + public static EnumMap> groupPizzaByStatus(List pzList) { return pzList.stream().collect( Collectors.groupingBy(Pizza::getStatus, - () -> new EnumMap<>(PizzaStatus.class), Collectors.toList())); + () -> new EnumMap<>(PizzaStatusEnum.class), Collectors.toList())); } public void deliver() { if (isDeliverable()) { PizzaDeliverySystemConfiguration.getInstance().getDeliveryStrategy().deliver(this); - this.setStatus(PizzaStatus.DELIVERED); + this.setStatus(PizzaStatusEnum.DELIVERED); } } - public static String getJsonString(Pizza pz) throws IOException { - ObjectMapper mapper = new ObjectMapper(); - return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(pz); - } - - private static Predicate thatAreNotDelivered() { - return entry -> undeliveredPizzaStatuses.contains(entry.getStatus()); - } } \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java b/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java index a276b3c000..5ccff5e959 100644 --- a/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java +++ b/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java @@ -1,5 +1,6 @@ package com.baeldung.enums; + public enum PizzaDeliverySystemConfiguration { INSTANCE; diff --git a/core-java-8/src/main/java/com/baeldung/enums/README.md b/core-java/src/main/java/com/baeldung/enums/README.md similarity index 100% rename from core-java-8/src/main/java/com/baeldung/enums/README.md rename to core-java/src/main/java/com/baeldung/enums/README.md diff --git a/core-java-8/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java b/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java rename to core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java diff --git a/core-java-8/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java b/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java rename to core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java diff --git a/core-java-8/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java b/core-java/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java rename to core-java/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/Address.java b/core-java/src/main/java/com/baeldung/java_8_features/Address.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/java_8_features/Address.java rename to core-java/src/main/java/com/baeldung/java_8_features/Address.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java b/core-java/src/main/java/com/baeldung/java_8_features/CustomException.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java rename to core-java/src/main/java/com/baeldung/java_8_features/CustomException.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java b/core-java/src/main/java/com/baeldung/java_8_features/Detail.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java rename to core-java/src/main/java/com/baeldung/java_8_features/Detail.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java b/core-java/src/main/java/com/baeldung/java_8_features/OptionalAddress.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java rename to core-java/src/main/java/com/baeldung/java_8_features/OptionalAddress.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java b/core-java/src/main/java/com/baeldung/java_8_features/OptionalUser.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java rename to core-java/src/main/java/com/baeldung/java_8_features/OptionalUser.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/User.java b/core-java/src/main/java/com/baeldung/java_8_features/User.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/java_8_features/User.java rename to core-java/src/main/java/com/baeldung/java_8_features/User.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java b/core-java/src/main/java/com/baeldung/java_8_features/Vehicle.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java rename to core-java/src/main/java/com/baeldung/java_8_features/Vehicle.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java b/core-java/src/main/java/com/baeldung/java_8_features/VehicleImpl.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java rename to core-java/src/main/java/com/baeldung/java_8_features/VehicleImpl.java diff --git a/core-java-8/src/main/java/com/baeldung/streamApi/Product.java b/core-java/src/main/java/com/baeldung/streamApi/Product.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/streamApi/Product.java rename to core-java/src/main/java/com/baeldung/streamApi/Product.java diff --git a/core-java-8/src/main/java/com/baeldung/threadpool/CountingTask.java b/core-java/src/main/java/com/baeldung/threadpool/CountingTask.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/threadpool/CountingTask.java rename to core-java/src/main/java/com/baeldung/threadpool/CountingTask.java diff --git a/core-java-8/src/main/java/com/baeldung/threadpool/ExitingExecutorServiceExample.java b/core-java/src/main/java/com/baeldung/threadpool/ExitingExecutorServiceExample.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/threadpool/ExitingExecutorServiceExample.java rename to core-java/src/main/java/com/baeldung/threadpool/ExitingExecutorServiceExample.java diff --git a/core-java-8/src/main/java/com/baeldung/threadpool/TreeNode.java b/core-java/src/main/java/com/baeldung/threadpool/TreeNode.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/threadpool/TreeNode.java rename to core-java/src/main/java/com/baeldung/threadpool/TreeNode.java diff --git a/core-java-8/src/main/java/com/baeldung/unzip/UnzipFile.java b/core-java/src/main/java/com/baeldung/unzip/UnzipFile.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/unzip/UnzipFile.java rename to core-java/src/main/java/com/baeldung/unzip/UnzipFile.java diff --git a/core-java-8/src/main/java/com/baeldung/zip/ZipDirectory.java b/core-java/src/main/java/com/baeldung/zip/ZipDirectory.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/zip/ZipDirectory.java rename to core-java/src/main/java/com/baeldung/zip/ZipDirectory.java diff --git a/core-java-8/src/main/java/com/baeldung/zip/ZipFile.java b/core-java/src/main/java/com/baeldung/zip/ZipFile.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/zip/ZipFile.java rename to core-java/src/main/java/com/baeldung/zip/ZipFile.java diff --git a/core-java-8/src/main/java/com/baeldung/zip/ZipMultipleFiles.java b/core-java/src/main/java/com/baeldung/zip/ZipMultipleFiles.java similarity index 100% rename from core-java-8/src/main/java/com/baeldung/zip/ZipMultipleFiles.java rename to core-java/src/main/java/com/baeldung/zip/ZipMultipleFiles.java diff --git a/core-java-8/src/main/resources/dirCompressed.zip b/core-java/src/main/resources/dirCompressed.zip similarity index 100% rename from core-java-8/src/main/resources/dirCompressed.zip rename to core-java/src/main/resources/dirCompressed.zip diff --git a/core-java-8/src/main/resources/multiCompressed.zip b/core-java/src/main/resources/multiCompressed.zip similarity index 100% rename from core-java-8/src/main/resources/multiCompressed.zip rename to core-java/src/main/resources/multiCompressed.zip diff --git a/core-java-8/src/test/java/com/baeldung/dateapi/ConversionExample.java b/core-java/src/test/java/com/baeldung/dateapi/ConversionExample.java similarity index 100% rename from core-java-8/src/test/java/com/baeldung/dateapi/ConversionExample.java rename to core-java/src/test/java/com/baeldung/dateapi/ConversionExample.java diff --git a/core-java-8/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java b/core-java/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java similarity index 100% rename from core-java-8/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java rename to core-java/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java From 302c5291716554089ef6094f2058eec08750f745 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 22:37:46 +0200 Subject: [PATCH 267/309] Remove core-java-8 --- core-java-8/.gitignore | 13 -- core-java-8/README.md | 6 - core-java-8/pom.xml | 142 ------------------ core-java-8/src/main/resources/compressed.zip | Bin 146 -> 0 bytes core-java-8/src/main/resources/fileTest.txt | 1 - core-java-8/src/main/resources/logback.xml | 16 -- .../src/main/resources/unzipTest/test1.txt | 1 - .../src/main/resources/zipTest/test1.txt | 1 - .../src/main/resources/zipTest/test2.txt | 1 - .../resources/zipTest/testFolder/test3.txt | 1 - .../resources/zipTest/testFolder/test4.txt | 1 - pom.xml | 1 - 12 files changed, 184 deletions(-) delete mode 100644 core-java-8/.gitignore delete mode 100644 core-java-8/README.md delete mode 100644 core-java-8/pom.xml delete mode 100644 core-java-8/src/main/resources/compressed.zip delete mode 100644 core-java-8/src/main/resources/fileTest.txt delete mode 100644 core-java-8/src/main/resources/logback.xml delete mode 100644 core-java-8/src/main/resources/unzipTest/test1.txt delete mode 100644 core-java-8/src/main/resources/zipTest/test1.txt delete mode 100644 core-java-8/src/main/resources/zipTest/test2.txt delete mode 100644 core-java-8/src/main/resources/zipTest/testFolder/test3.txt delete mode 100644 core-java-8/src/main/resources/zipTest/testFolder/test4.txt diff --git a/core-java-8/.gitignore b/core-java-8/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/core-java-8/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file diff --git a/core-java-8/README.md b/core-java-8/README.md deleted file mode 100644 index 86429222ea..0000000000 --- a/core-java-8/README.md +++ /dev/null @@ -1,6 +0,0 @@ -========= - -## Core Java 8 Cookbooks and Examples - -### Relevant Articles: - diff --git a/core-java-8/pom.xml b/core-java-8/pom.xml deleted file mode 100644 index 22e3bab595..0000000000 --- a/core-java-8/pom.xml +++ /dev/null @@ -1,142 +0,0 @@ - - 4.0.0 - - com.baeldung - 1.0.0-SNAPSHOT - core-java8 - - core-java8 - - - - - - - commons-io - commons-io - 2.5 - - - - com.google.guava - guava - ${guava.version} - - - - org.apache.commons - commons-collections4 - 4.0 - - - - commons-codec - commons-codec - 1.10 - - - - org.apache.commons - commons-lang3 - 3.3.2 - - - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - - - - junit - junit - ${junit.version} - test - - - - org.assertj - assertj-core - 3.5.1 - test - - - - org.mockito - mockito-core - ${mockito.version} - test - - - - - - core-java-8 - - - src/main/resources - true - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - - - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - - - - - - - - - UTF-8 - - - 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 - - - - \ No newline at end of file diff --git a/core-java-8/src/main/resources/compressed.zip b/core-java-8/src/main/resources/compressed.zip deleted file mode 100644 index 03f840ae2bf13bdf8e9509168e964dea40f782f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmWIWW@Zs#;Nak3Xvk^tU_b(#Kz2!LafzW`Nkz$LkFzIFhI5?PKjj(7!Vuui&aqfV pQ-%+yga?QNycwB97!bxF%YlqR1#m+Hyjj^mQj9=o4y0Yd>Hv0b7M1`2 diff --git a/core-java-8/src/main/resources/fileTest.txt b/core-java-8/src/main/resources/fileTest.txt deleted file mode 100644 index ce4bea208b..0000000000 --- a/core-java-8/src/main/resources/fileTest.txt +++ /dev/null @@ -1 +0,0 @@ -Hello World from fileTest.txt!!! \ No newline at end of file diff --git a/core-java-8/src/main/resources/logback.xml b/core-java-8/src/main/resources/logback.xml deleted file mode 100644 index eefdc7a337..0000000000 --- a/core-java-8/src/main/resources/logback.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - web - %date [%thread] %-5level %logger{36} - %message%n - - - - - - - - - - - \ No newline at end of file diff --git a/core-java-8/src/main/resources/unzipTest/test1.txt b/core-java-8/src/main/resources/unzipTest/test1.txt deleted file mode 100644 index c57eff55eb..0000000000 --- a/core-java-8/src/main/resources/unzipTest/test1.txt +++ /dev/null @@ -1 +0,0 @@ -Hello World! \ No newline at end of file diff --git a/core-java-8/src/main/resources/zipTest/test1.txt b/core-java-8/src/main/resources/zipTest/test1.txt deleted file mode 100644 index c57eff55eb..0000000000 --- a/core-java-8/src/main/resources/zipTest/test1.txt +++ /dev/null @@ -1 +0,0 @@ -Hello World! \ No newline at end of file diff --git a/core-java-8/src/main/resources/zipTest/test2.txt b/core-java-8/src/main/resources/zipTest/test2.txt deleted file mode 100644 index f0fb0f14d1..0000000000 --- a/core-java-8/src/main/resources/zipTest/test2.txt +++ /dev/null @@ -1 +0,0 @@ -My Name is John \ No newline at end of file diff --git a/core-java-8/src/main/resources/zipTest/testFolder/test3.txt b/core-java-8/src/main/resources/zipTest/testFolder/test3.txt deleted file mode 100644 index 882edb168e..0000000000 --- a/core-java-8/src/main/resources/zipTest/testFolder/test3.txt +++ /dev/null @@ -1 +0,0 @@ -My Name is Tom \ No newline at end of file diff --git a/core-java-8/src/main/resources/zipTest/testFolder/test4.txt b/core-java-8/src/main/resources/zipTest/testFolder/test4.txt deleted file mode 100644 index a78c3fadc8..0000000000 --- a/core-java-8/src/main/resources/zipTest/testFolder/test4.txt +++ /dev/null @@ -1 +0,0 @@ -My Name is Jane \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0de16500d6..8523997701 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,6 @@ cdi core-java - core-java-8 couchbase-sdk From 8190a9994b79403c2746a462b6e3c05ea0dd053d Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 23 Oct 2016 22:56:53 +0200 Subject: [PATCH 268/309] Reformat README.md --- core-java/README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core-java/README.md b/core-java/README.md index 628a48a06e..48f0677461 100644 --- a/core-java/README.md +++ b/core-java/README.md @@ -25,7 +25,6 @@ - [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string) - [Random List Element](http://www.baeldung.com/java-random-list-element) - [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer) - - [Java 8 – Powerful Comparison with Lambdas](http://www.baeldung.com/java-8-sort-lambda) - [Java – Directory Size](http://www.baeldung.com/java-folder-size) - [Java – Try with Resources](http://www.baeldung.com/java-try-with-resources) @@ -35,8 +34,5 @@ - [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator) - [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams) - [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava) -- [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors) -- [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams) -- [New Features in Java 8](http://www.baeldung.com/java-8-new-features) - [Introduction to Java 8 Streams](http://www.baeldung.com/java-8-streams-introduction) - [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join) \ No newline at end of file From 61d67b42656d758797de1bdbb8823fb89ed88f95 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Mon, 24 Oct 2016 06:36:25 +0200 Subject: [PATCH 269/309] BAEL-86 - DispatcherServlet code --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index b38fe174c9..d925cbe7fb 100644 --- a/pom.xml +++ b/pom.xml @@ -83,6 +83,7 @@ spring-data-mongodb spring-data-redis spring-data-rest + spring-dispatcher-servlet spring-exceptions spring-freemarker spring-hibernate3 From 45706278411fec43d438b1aa891bc0b534f8545f Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Mon, 24 Oct 2016 08:12:27 +0200 Subject: [PATCH 270/309] BAEL-86 - removed dispatcher source from main pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a882945436..e97093b7f7 100644 --- a/pom.xml +++ b/pom.xml @@ -84,7 +84,7 @@ spring-data-mongodb spring-data-redis spring-data-rest - spring-dispatcher-servlet + spring-exceptions spring-freemarker spring-hibernate3 From 75d86610ff4cf7c56a68966b4cbe2e3accfada96 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 24 Oct 2016 09:44:21 +0200 Subject: [PATCH 271/309] Move routing-in-play -> play-framework --- .../{student-api => introduction}/.gitignore | 0 .../{student-api => introduction}/LICENSE | 0 play-framework/{student-api => introduction}/README | 0 .../{student-api => introduction}/app/Filters.java | 0 .../{student-api => introduction}/app/Module.java | 0 .../app/controllers/AsyncController.java | 0 .../app/controllers/CountController.java | 0 .../app/controllers/HomeController.java | 0 .../app/controllers/StudentController.java | 0 .../app/filters/ExampleFilter.java | 0 .../app/models/Student.java | 0 .../app/models/StudentStore.java | 0 .../app/services/ApplicationTimer.java | 0 .../app/services/AtomicCounter.java | 0 .../app/services/Counter.java | 0 .../app/util/Util.java | 0 .../app/views/index.scala.html | 0 .../app/views/main.scala.html | 0 .../{student-api => introduction}/bin/activator | 0 .../{student-api => introduction}/bin/activator.bat | 0 .../{student-api => introduction}/build.sbt | 0 .../conf/application.conf | 0 .../{student-api => introduction}/conf/logback.xml | 0 .../{student-api => introduction}/conf/routes | 0 .../libexec/activator-launch-1.3.10.jar | Bin .../project/build.properties | 0 .../project/plugins.sbt | 0 .../public/images/favicon.png | Bin .../public/javascripts/hello.js | 0 .../public/stylesheets/main.css | 0 .../test/ApplicationTest.java | 0 .../routing-in-play}/.gitignore | 0 .../routing-in-play}/LICENSE | 0 .../routing-in-play}/README | 0 .../routing-in-play}/app/Filters.java | 0 .../routing-in-play}/app/Module.java | 0 .../app/controllers/HomeController.java | 0 .../routing-in-play}/app/filters/ExampleFilter.java | 0 .../app/services/ApplicationTimer.java | 0 .../app/services/AtomicCounter.java | 0 .../routing-in-play}/app/services/Counter.java | 0 .../routing-in-play}/app/views/index.scala.html | 0 .../routing-in-play}/app/views/main.scala.html | 0 .../routing-in-play}/bin/activator | 0 .../routing-in-play}/bin/activator.bat | 0 .../routing-in-play}/build.sbt | 0 .../routing-in-play}/conf/application.conf | 0 .../routing-in-play}/conf/logback.xml | 0 .../routing-in-play}/conf/routes | 0 .../libexec/activator-launch-1.3.10.jar | Bin .../routing-in-play}/project/build.properties | 0 .../routing-in-play}/project/plugins.sbt | 0 .../routing-in-play}/public/images/favicon.png | Bin .../routing-in-play}/public/javascripts/hello.js | 0 .../routing-in-play}/public/stylesheets/main.css | 0 .../routing-in-play}/test/ApplicationTest.java | 0 .../routing-in-play}/test/IntegrationTest.java | 0 57 files changed, 0 insertions(+), 0 deletions(-) rename play-framework/{student-api => introduction}/.gitignore (100%) rename play-framework/{student-api => introduction}/LICENSE (100%) rename play-framework/{student-api => introduction}/README (100%) rename play-framework/{student-api => introduction}/app/Filters.java (100%) rename play-framework/{student-api => introduction}/app/Module.java (100%) rename play-framework/{student-api => introduction}/app/controllers/AsyncController.java (100%) rename play-framework/{student-api => introduction}/app/controllers/CountController.java (100%) rename play-framework/{student-api => introduction}/app/controllers/HomeController.java (100%) rename play-framework/{student-api => introduction}/app/controllers/StudentController.java (100%) rename play-framework/{student-api => introduction}/app/filters/ExampleFilter.java (100%) rename play-framework/{student-api => introduction}/app/models/Student.java (100%) rename play-framework/{student-api => introduction}/app/models/StudentStore.java (100%) rename play-framework/{student-api => introduction}/app/services/ApplicationTimer.java (100%) rename play-framework/{student-api => introduction}/app/services/AtomicCounter.java (100%) rename play-framework/{student-api => introduction}/app/services/Counter.java (100%) rename play-framework/{student-api => introduction}/app/util/Util.java (100%) rename play-framework/{student-api => introduction}/app/views/index.scala.html (100%) rename play-framework/{student-api => introduction}/app/views/main.scala.html (100%) rename play-framework/{student-api => introduction}/bin/activator (100%) rename play-framework/{student-api => introduction}/bin/activator.bat (100%) rename play-framework/{student-api => introduction}/build.sbt (100%) rename play-framework/{student-api => introduction}/conf/application.conf (100%) rename play-framework/{student-api => introduction}/conf/logback.xml (100%) rename play-framework/{student-api => introduction}/conf/routes (100%) rename play-framework/{student-api => introduction}/libexec/activator-launch-1.3.10.jar (100%) rename play-framework/{student-api => introduction}/project/build.properties (100%) rename play-framework/{student-api => introduction}/project/plugins.sbt (100%) rename play-framework/{student-api => introduction}/public/images/favicon.png (100%) rename play-framework/{student-api => introduction}/public/javascripts/hello.js (100%) rename play-framework/{student-api => introduction}/public/stylesheets/main.css (100%) rename play-framework/{student-api => introduction}/test/ApplicationTest.java (100%) rename {routing-in-play => play-framework/routing-in-play}/.gitignore (100%) rename {routing-in-play => play-framework/routing-in-play}/LICENSE (100%) rename {routing-in-play => play-framework/routing-in-play}/README (100%) rename {routing-in-play => play-framework/routing-in-play}/app/Filters.java (100%) rename {routing-in-play => play-framework/routing-in-play}/app/Module.java (100%) rename {routing-in-play => play-framework/routing-in-play}/app/controllers/HomeController.java (100%) rename {routing-in-play => play-framework/routing-in-play}/app/filters/ExampleFilter.java (100%) rename {routing-in-play => play-framework/routing-in-play}/app/services/ApplicationTimer.java (100%) rename {routing-in-play => play-framework/routing-in-play}/app/services/AtomicCounter.java (100%) rename {routing-in-play => play-framework/routing-in-play}/app/services/Counter.java (100%) rename {routing-in-play => play-framework/routing-in-play}/app/views/index.scala.html (100%) rename {routing-in-play => play-framework/routing-in-play}/app/views/main.scala.html (100%) rename {routing-in-play => play-framework/routing-in-play}/bin/activator (100%) rename {routing-in-play => play-framework/routing-in-play}/bin/activator.bat (100%) rename {routing-in-play => play-framework/routing-in-play}/build.sbt (100%) rename {routing-in-play => play-framework/routing-in-play}/conf/application.conf (100%) rename {routing-in-play => play-framework/routing-in-play}/conf/logback.xml (100%) rename {routing-in-play => play-framework/routing-in-play}/conf/routes (100%) rename {routing-in-play => play-framework/routing-in-play}/libexec/activator-launch-1.3.10.jar (100%) rename {routing-in-play => play-framework/routing-in-play}/project/build.properties (100%) rename {routing-in-play => play-framework/routing-in-play}/project/plugins.sbt (100%) rename {routing-in-play => play-framework/routing-in-play}/public/images/favicon.png (100%) rename {routing-in-play => play-framework/routing-in-play}/public/javascripts/hello.js (100%) rename {routing-in-play => play-framework/routing-in-play}/public/stylesheets/main.css (100%) rename {routing-in-play => play-framework/routing-in-play}/test/ApplicationTest.java (100%) rename {routing-in-play => play-framework/routing-in-play}/test/IntegrationTest.java (100%) diff --git a/play-framework/student-api/.gitignore b/play-framework/introduction/.gitignore similarity index 100% rename from play-framework/student-api/.gitignore rename to play-framework/introduction/.gitignore diff --git a/play-framework/student-api/LICENSE b/play-framework/introduction/LICENSE similarity index 100% rename from play-framework/student-api/LICENSE rename to play-framework/introduction/LICENSE diff --git a/play-framework/student-api/README b/play-framework/introduction/README similarity index 100% rename from play-framework/student-api/README rename to play-framework/introduction/README diff --git a/play-framework/student-api/app/Filters.java b/play-framework/introduction/app/Filters.java similarity index 100% rename from play-framework/student-api/app/Filters.java rename to play-framework/introduction/app/Filters.java diff --git a/play-framework/student-api/app/Module.java b/play-framework/introduction/app/Module.java similarity index 100% rename from play-framework/student-api/app/Module.java rename to play-framework/introduction/app/Module.java diff --git a/play-framework/student-api/app/controllers/AsyncController.java b/play-framework/introduction/app/controllers/AsyncController.java similarity index 100% rename from play-framework/student-api/app/controllers/AsyncController.java rename to play-framework/introduction/app/controllers/AsyncController.java diff --git a/play-framework/student-api/app/controllers/CountController.java b/play-framework/introduction/app/controllers/CountController.java similarity index 100% rename from play-framework/student-api/app/controllers/CountController.java rename to play-framework/introduction/app/controllers/CountController.java diff --git a/play-framework/student-api/app/controllers/HomeController.java b/play-framework/introduction/app/controllers/HomeController.java similarity index 100% rename from play-framework/student-api/app/controllers/HomeController.java rename to play-framework/introduction/app/controllers/HomeController.java diff --git a/play-framework/student-api/app/controllers/StudentController.java b/play-framework/introduction/app/controllers/StudentController.java similarity index 100% rename from play-framework/student-api/app/controllers/StudentController.java rename to play-framework/introduction/app/controllers/StudentController.java diff --git a/play-framework/student-api/app/filters/ExampleFilter.java b/play-framework/introduction/app/filters/ExampleFilter.java similarity index 100% rename from play-framework/student-api/app/filters/ExampleFilter.java rename to play-framework/introduction/app/filters/ExampleFilter.java diff --git a/play-framework/student-api/app/models/Student.java b/play-framework/introduction/app/models/Student.java similarity index 100% rename from play-framework/student-api/app/models/Student.java rename to play-framework/introduction/app/models/Student.java diff --git a/play-framework/student-api/app/models/StudentStore.java b/play-framework/introduction/app/models/StudentStore.java similarity index 100% rename from play-framework/student-api/app/models/StudentStore.java rename to play-framework/introduction/app/models/StudentStore.java diff --git a/play-framework/student-api/app/services/ApplicationTimer.java b/play-framework/introduction/app/services/ApplicationTimer.java similarity index 100% rename from play-framework/student-api/app/services/ApplicationTimer.java rename to play-framework/introduction/app/services/ApplicationTimer.java diff --git a/play-framework/student-api/app/services/AtomicCounter.java b/play-framework/introduction/app/services/AtomicCounter.java similarity index 100% rename from play-framework/student-api/app/services/AtomicCounter.java rename to play-framework/introduction/app/services/AtomicCounter.java diff --git a/play-framework/student-api/app/services/Counter.java b/play-framework/introduction/app/services/Counter.java similarity index 100% rename from play-framework/student-api/app/services/Counter.java rename to play-framework/introduction/app/services/Counter.java diff --git a/play-framework/student-api/app/util/Util.java b/play-framework/introduction/app/util/Util.java similarity index 100% rename from play-framework/student-api/app/util/Util.java rename to play-framework/introduction/app/util/Util.java diff --git a/play-framework/student-api/app/views/index.scala.html b/play-framework/introduction/app/views/index.scala.html similarity index 100% rename from play-framework/student-api/app/views/index.scala.html rename to play-framework/introduction/app/views/index.scala.html diff --git a/play-framework/student-api/app/views/main.scala.html b/play-framework/introduction/app/views/main.scala.html similarity index 100% rename from play-framework/student-api/app/views/main.scala.html rename to play-framework/introduction/app/views/main.scala.html diff --git a/play-framework/student-api/bin/activator b/play-framework/introduction/bin/activator similarity index 100% rename from play-framework/student-api/bin/activator rename to play-framework/introduction/bin/activator diff --git a/play-framework/student-api/bin/activator.bat b/play-framework/introduction/bin/activator.bat similarity index 100% rename from play-framework/student-api/bin/activator.bat rename to play-framework/introduction/bin/activator.bat diff --git a/play-framework/student-api/build.sbt b/play-framework/introduction/build.sbt similarity index 100% rename from play-framework/student-api/build.sbt rename to play-framework/introduction/build.sbt diff --git a/play-framework/student-api/conf/application.conf b/play-framework/introduction/conf/application.conf similarity index 100% rename from play-framework/student-api/conf/application.conf rename to play-framework/introduction/conf/application.conf diff --git a/play-framework/student-api/conf/logback.xml b/play-framework/introduction/conf/logback.xml similarity index 100% rename from play-framework/student-api/conf/logback.xml rename to play-framework/introduction/conf/logback.xml diff --git a/play-framework/student-api/conf/routes b/play-framework/introduction/conf/routes similarity index 100% rename from play-framework/student-api/conf/routes rename to play-framework/introduction/conf/routes diff --git a/play-framework/student-api/libexec/activator-launch-1.3.10.jar b/play-framework/introduction/libexec/activator-launch-1.3.10.jar similarity index 100% rename from play-framework/student-api/libexec/activator-launch-1.3.10.jar rename to play-framework/introduction/libexec/activator-launch-1.3.10.jar diff --git a/play-framework/student-api/project/build.properties b/play-framework/introduction/project/build.properties similarity index 100% rename from play-framework/student-api/project/build.properties rename to play-framework/introduction/project/build.properties diff --git a/play-framework/student-api/project/plugins.sbt b/play-framework/introduction/project/plugins.sbt similarity index 100% rename from play-framework/student-api/project/plugins.sbt rename to play-framework/introduction/project/plugins.sbt diff --git a/play-framework/student-api/public/images/favicon.png b/play-framework/introduction/public/images/favicon.png similarity index 100% rename from play-framework/student-api/public/images/favicon.png rename to play-framework/introduction/public/images/favicon.png diff --git a/play-framework/student-api/public/javascripts/hello.js b/play-framework/introduction/public/javascripts/hello.js similarity index 100% rename from play-framework/student-api/public/javascripts/hello.js rename to play-framework/introduction/public/javascripts/hello.js diff --git a/play-framework/student-api/public/stylesheets/main.css b/play-framework/introduction/public/stylesheets/main.css similarity index 100% rename from play-framework/student-api/public/stylesheets/main.css rename to play-framework/introduction/public/stylesheets/main.css diff --git a/play-framework/student-api/test/ApplicationTest.java b/play-framework/introduction/test/ApplicationTest.java similarity index 100% rename from play-framework/student-api/test/ApplicationTest.java rename to play-framework/introduction/test/ApplicationTest.java diff --git a/routing-in-play/.gitignore b/play-framework/routing-in-play/.gitignore similarity index 100% rename from routing-in-play/.gitignore rename to play-framework/routing-in-play/.gitignore diff --git a/routing-in-play/LICENSE b/play-framework/routing-in-play/LICENSE similarity index 100% rename from routing-in-play/LICENSE rename to play-framework/routing-in-play/LICENSE diff --git a/routing-in-play/README b/play-framework/routing-in-play/README similarity index 100% rename from routing-in-play/README rename to play-framework/routing-in-play/README diff --git a/routing-in-play/app/Filters.java b/play-framework/routing-in-play/app/Filters.java similarity index 100% rename from routing-in-play/app/Filters.java rename to play-framework/routing-in-play/app/Filters.java diff --git a/routing-in-play/app/Module.java b/play-framework/routing-in-play/app/Module.java similarity index 100% rename from routing-in-play/app/Module.java rename to play-framework/routing-in-play/app/Module.java diff --git a/routing-in-play/app/controllers/HomeController.java b/play-framework/routing-in-play/app/controllers/HomeController.java similarity index 100% rename from routing-in-play/app/controllers/HomeController.java rename to play-framework/routing-in-play/app/controllers/HomeController.java diff --git a/routing-in-play/app/filters/ExampleFilter.java b/play-framework/routing-in-play/app/filters/ExampleFilter.java similarity index 100% rename from routing-in-play/app/filters/ExampleFilter.java rename to play-framework/routing-in-play/app/filters/ExampleFilter.java diff --git a/routing-in-play/app/services/ApplicationTimer.java b/play-framework/routing-in-play/app/services/ApplicationTimer.java similarity index 100% rename from routing-in-play/app/services/ApplicationTimer.java rename to play-framework/routing-in-play/app/services/ApplicationTimer.java diff --git a/routing-in-play/app/services/AtomicCounter.java b/play-framework/routing-in-play/app/services/AtomicCounter.java similarity index 100% rename from routing-in-play/app/services/AtomicCounter.java rename to play-framework/routing-in-play/app/services/AtomicCounter.java diff --git a/routing-in-play/app/services/Counter.java b/play-framework/routing-in-play/app/services/Counter.java similarity index 100% rename from routing-in-play/app/services/Counter.java rename to play-framework/routing-in-play/app/services/Counter.java diff --git a/routing-in-play/app/views/index.scala.html b/play-framework/routing-in-play/app/views/index.scala.html similarity index 100% rename from routing-in-play/app/views/index.scala.html rename to play-framework/routing-in-play/app/views/index.scala.html diff --git a/routing-in-play/app/views/main.scala.html b/play-framework/routing-in-play/app/views/main.scala.html similarity index 100% rename from routing-in-play/app/views/main.scala.html rename to play-framework/routing-in-play/app/views/main.scala.html diff --git a/routing-in-play/bin/activator b/play-framework/routing-in-play/bin/activator similarity index 100% rename from routing-in-play/bin/activator rename to play-framework/routing-in-play/bin/activator diff --git a/routing-in-play/bin/activator.bat b/play-framework/routing-in-play/bin/activator.bat similarity index 100% rename from routing-in-play/bin/activator.bat rename to play-framework/routing-in-play/bin/activator.bat diff --git a/routing-in-play/build.sbt b/play-framework/routing-in-play/build.sbt similarity index 100% rename from routing-in-play/build.sbt rename to play-framework/routing-in-play/build.sbt diff --git a/routing-in-play/conf/application.conf b/play-framework/routing-in-play/conf/application.conf similarity index 100% rename from routing-in-play/conf/application.conf rename to play-framework/routing-in-play/conf/application.conf diff --git a/routing-in-play/conf/logback.xml b/play-framework/routing-in-play/conf/logback.xml similarity index 100% rename from routing-in-play/conf/logback.xml rename to play-framework/routing-in-play/conf/logback.xml diff --git a/routing-in-play/conf/routes b/play-framework/routing-in-play/conf/routes similarity index 100% rename from routing-in-play/conf/routes rename to play-framework/routing-in-play/conf/routes diff --git a/routing-in-play/libexec/activator-launch-1.3.10.jar b/play-framework/routing-in-play/libexec/activator-launch-1.3.10.jar similarity index 100% rename from routing-in-play/libexec/activator-launch-1.3.10.jar rename to play-framework/routing-in-play/libexec/activator-launch-1.3.10.jar diff --git a/routing-in-play/project/build.properties b/play-framework/routing-in-play/project/build.properties similarity index 100% rename from routing-in-play/project/build.properties rename to play-framework/routing-in-play/project/build.properties diff --git a/routing-in-play/project/plugins.sbt b/play-framework/routing-in-play/project/plugins.sbt similarity index 100% rename from routing-in-play/project/plugins.sbt rename to play-framework/routing-in-play/project/plugins.sbt diff --git a/routing-in-play/public/images/favicon.png b/play-framework/routing-in-play/public/images/favicon.png similarity index 100% rename from routing-in-play/public/images/favicon.png rename to play-framework/routing-in-play/public/images/favicon.png diff --git a/routing-in-play/public/javascripts/hello.js b/play-framework/routing-in-play/public/javascripts/hello.js similarity index 100% rename from routing-in-play/public/javascripts/hello.js rename to play-framework/routing-in-play/public/javascripts/hello.js diff --git a/routing-in-play/public/stylesheets/main.css b/play-framework/routing-in-play/public/stylesheets/main.css similarity index 100% rename from routing-in-play/public/stylesheets/main.css rename to play-framework/routing-in-play/public/stylesheets/main.css diff --git a/routing-in-play/test/ApplicationTest.java b/play-framework/routing-in-play/test/ApplicationTest.java similarity index 100% rename from routing-in-play/test/ApplicationTest.java rename to play-framework/routing-in-play/test/ApplicationTest.java diff --git a/routing-in-play/test/IntegrationTest.java b/play-framework/routing-in-play/test/IntegrationTest.java similarity index 100% rename from routing-in-play/test/IntegrationTest.java rename to play-framework/routing-in-play/test/IntegrationTest.java From 166ed96881365b7a36ab785628e91417e9b0e500 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 24 Oct 2016 13:48:20 +0200 Subject: [PATCH 272/309] configure integration test --- couchbase-sdk/pom.xml | 12 ++++++++++++ ...st.java => PersonCrudServiceIntegrationTest.java} | 2 +- ...eTest.java => ClusterServiceIntegrationTest.java} | 2 +- ...st.java => PersonCrudServiceIntegrationTest.java} | 2 +- ...eTest.java => ClusterServiceIntegrationTest.java} | 2 +- 5 files changed, 16 insertions(+), 4 deletions(-) rename couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/{PersonCrudServiceTest.java => PersonCrudServiceIntegrationTest.java} (98%) rename couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/{ClusterServiceTest.java => ClusterServiceIntegrationTest.java} (94%) rename couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/{PersonCrudServiceTest.java => PersonCrudServiceIntegrationTest.java} (97%) rename couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/{ClusterServiceTest.java => ClusterServiceIntegrationTest.java} (94%) diff --git a/couchbase-sdk/pom.xml b/couchbase-sdk/pom.xml index 4c277f4c85..b7b3d1788f 100644 --- a/couchbase-sdk/pom.xml +++ b/couchbase-sdk/pom.xml @@ -85,6 +85,17 @@ 1.7 + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + @@ -97,6 +108,7 @@ 1.7.12 4.11 3.4 + 2.19.1
    diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java similarity index 98% rename from couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java index afc5bbd53b..5907a4cc63 100644 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/person/PersonCrudServiceIntegrationTest.java @@ -21,7 +21,7 @@ import com.baeldung.couchbase.async.service.BucketService; import com.couchbase.client.java.Bucket; import com.couchbase.client.java.document.JsonDocument; -public class PersonCrudServiceTest extends AsyncIntegrationTest { +public class PersonCrudServiceIntegrationTest extends AsyncIntegrationTest { @Autowired private PersonCrudService personService; diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java similarity index 94% rename from couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java index 8ecb51a4b9..08e3728c77 100644 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/async/service/ClusterServiceIntegrationTest.java @@ -18,7 +18,7 @@ import com.couchbase.client.java.Bucket; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { AsyncIntegrationTestConfig.class }) @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public class ClusterServiceTest extends AsyncIntegrationTest { +public class ClusterServiceIntegrationTest extends AsyncIntegrationTest { @Autowired private ClusterService couchbaseService; diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java similarity index 97% rename from couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java index 601b261f6e..b3fadae6ca 100644 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/person/PersonCrudServiceIntegrationTest.java @@ -10,7 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import com.baeldung.couchbase.spring.IntegrationTest; -public class PersonCrudServiceTest extends IntegrationTest { +public class PersonCrudServiceIntegrationTest extends IntegrationTest { private static final String CLARK_KENT = "Clark Kent"; private static final String SMALLVILLE = "Smallville"; diff --git a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceTest.java b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java similarity index 94% rename from couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceTest.java rename to couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java index d1968e1c04..f3ee4585a3 100644 --- a/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceTest.java +++ b/couchbase-sdk/src/test/java/com/baeldung/couchbase/spring/service/ClusterServiceIntegrationTest.java @@ -17,7 +17,7 @@ import com.couchbase.client.java.Bucket; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { IntegrationTestConfig.class }) @TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) -public class ClusterServiceTest extends IntegrationTest { +public class ClusterServiceIntegrationTest extends IntegrationTest { @Autowired private ClusterService couchbaseService; From 924b09cb104fb7ba9d7aac1c78a0a70c54b33790 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 24 Oct 2016 17:13:40 +0200 Subject: [PATCH 273/309] add integration test profiles --- spring-cloud-data-flow/batch-job/pom.xml | 15 +- .../BatchJobApplicationIntegrationTest.java} | 2 +- .../data-flow-server/pom.xml | 49 +++++- ...aFlowServerApplicationIntegrationTest.java | 16 ++ .../data-flow-shell/pom.xml | 14 +- .../data-flow-shell/spring-shell.log | 1 + ...aFlowShellApplicationIntegrationTest.java} | 2 +- spring-cloud-data-flow/log-sink/pom.xml | 143 ++++++++++++------ .../LogSinkApplicationIntegrationTest.java} | 2 +- spring-cloud-data-flow/time-processor/pom.xml | 61 ++++++-- ...meProcessorApplicationIntegrationTest.java | 16 ++ .../cloud/TimeProcessorApplicationTests.java | 16 -- spring-cloud-data-flow/time-source/pom.xml | 61 ++++++-- ...TimeSourceApplicationIntegrationTest.java} | 2 +- .../cloud/TimeSourceApplicationTests.java | 16 -- 15 files changed, 305 insertions(+), 111 deletions(-) rename spring-cloud-data-flow/{data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java => batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationIntegrationTest.java} (86%) create mode 100644 spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationIntegrationTest.java rename spring-cloud-data-flow/{log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java => data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationIntegrationTest.java} (85%) rename spring-cloud-data-flow/{batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationTests.java => log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationIntegrationTest.java} (86%) create mode 100644 spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationIntegrationTest.java delete mode 100644 spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java rename spring-cloud-data-flow/{data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java => time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationIntegrationTest.java} (85%) delete mode 100644 spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java diff --git a/spring-cloud-data-flow/batch-job/pom.xml b/spring-cloud-data-flow/batch-job/pom.xml index 2ddb9d85a3..99e57d4c20 100644 --- a/spring-cloud-data-flow/batch-job/pom.xml +++ b/spring-cloud-data-flow/batch-job/pom.xml @@ -67,8 +67,17 @@ org.springframework.boot spring-boot-maven-plugin - - - + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + diff --git a/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java b/spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationIntegrationTest.java similarity index 86% rename from spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java rename to spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationIntegrationTest.java index f853e29244..f8dfdec197 100644 --- a/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationTests.java +++ b/spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationIntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class DataFlowServerApplicationTests { +public class BatchJobApplicationIntegrationTest { @Test public void contextLoads() { diff --git a/spring-cloud-data-flow/data-flow-server/pom.xml b/spring-cloud-data-flow/data-flow-server/pom.xml index 94c4106d6f..451a58e12a 100644 --- a/spring-cloud-data-flow/data-flow-server/pom.xml +++ b/spring-cloud-data-flow/data-flow-server/pom.xml @@ -62,8 +62,53 @@ org.springframework.boot spring-boot-maven-plugin - - + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationIntegrationTest.java b/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationIntegrationTest.java new file mode 100644 index 0000000000..bb8660b816 --- /dev/null +++ b/spring-cloud-data-flow/data-flow-server/src/test/java/org/baeldung/spring/cloud/DataFlowServerApplicationIntegrationTest.java @@ -0,0 +1,16 @@ +package org.baeldung.spring.cloud; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class DataFlowServerApplicationIntegrationTest { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-cloud-data-flow/data-flow-shell/pom.xml b/spring-cloud-data-flow/data-flow-shell/pom.xml index a074fef88f..31d3dce507 100644 --- a/spring-cloud-data-flow/data-flow-shell/pom.xml +++ b/spring-cloud-data-flow/data-flow-shell/pom.xml @@ -62,8 +62,18 @@ org.springframework.boot spring-boot-maven-plugin - - + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + diff --git a/spring-cloud-data-flow/data-flow-shell/spring-shell.log b/spring-cloud-data-flow/data-flow-shell/spring-shell.log index d497215e2a..92a8488c7d 100644 --- a/spring-cloud-data-flow/data-flow-shell/spring-shell.log +++ b/spring-cloud-data-flow/data-flow-shell/spring-shell.log @@ -1 +1,2 @@ // dataflow 1.2.0.RELEASE log opened at 2016-10-20 13:13:20 +// dataflow 1.2.0.RELEASE log opened at 2016-10-24 16:51:17 diff --git a/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java b/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationIntegrationTest.java similarity index 85% rename from spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java rename to spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationIntegrationTest.java index 9f88c7f632..5ab3292388 100644 --- a/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationTests.java +++ b/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationIntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class LogSinkApplicationTests { +public class DataFlowShellApplicationIntegrationTest { @Test public void contextLoads() { diff --git a/spring-cloud-data-flow/log-sink/pom.xml b/spring-cloud-data-flow/log-sink/pom.xml index 8415d95373..db488c05ef 100644 --- a/spring-cloud-data-flow/log-sink/pom.xml +++ b/spring-cloud-data-flow/log-sink/pom.xml @@ -1,62 +1,105 @@ - 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 - org.baeldung.spring.cloud - log-sink - 0.0.1-SNAPSHOT - jar + org.baeldung.spring.cloud + log-sink + 0.0.1-SNAPSHOT + jar - log-sink - Demo project for Spring Boot + log-sink + Demo project for Spring Boot - - org.springframework.boot - spring-boot-starter-parent - 1.4.0.RELEASE - - + + org.springframework.boot + spring-boot-starter-parent + 1.4.0.RELEASE + + - - UTF-8 - UTF-8 - 1.8 - + + UTF-8 + UTF-8 + 1.8 + - - - org.springframework.cloud - spring-cloud-starter-stream-rabbit - + + + org.springframework.cloud + spring-cloud-starter-stream-rabbit + - - org.springframework.boot - spring-boot-starter-test - test - - + + org.springframework.boot + spring-boot-starter-test + test + + - - - - org.springframework.cloud - spring-cloud-dependencies - Brixton.SR5 - pom - import - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.cloud + spring-cloud-dependencies + Brixton.SR5 + pom + import + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationTests.java b/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationIntegrationTest.java similarity index 86% rename from spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationTests.java rename to spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationIntegrationTest.java index 5f18ec75c4..b362d72705 100644 --- a/spring-cloud-data-flow/batch-job/src/test/java/org/baeldung/spring/cloud/BatchJobApplicationTests.java +++ b/spring-cloud-data-flow/log-sink/src/test/java/org/baeldung/spring/cloud/LogSinkApplicationIntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class BatchJobApplicationTests { +public class LogSinkApplicationIntegrationTest { @Test public void contextLoads() { diff --git a/spring-cloud-data-flow/time-processor/pom.xml b/spring-cloud-data-flow/time-processor/pom.xml index bc2efe7754..8277c9c836 100644 --- a/spring-cloud-data-flow/time-processor/pom.xml +++ b/spring-cloud-data-flow/time-processor/pom.xml @@ -49,14 +49,57 @@ - - - - org.springframework.boot - spring-boot-maven-plugin - - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationIntegrationTest.java b/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationIntegrationTest.java new file mode 100644 index 0000000000..9bd0fd8c24 --- /dev/null +++ b/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationIntegrationTest.java @@ -0,0 +1,16 @@ +package org.baeldung.spring.cloud; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class TimeProcessorApplicationIntegrationTest { + + @Test + public void contextLoads() { + } + +} diff --git a/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java b/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java deleted file mode 100644 index 875346f9db..0000000000 --- a/spring-cloud-data-flow/time-processor/src/test/java/org/baeldung/spring/cloud/TimeProcessorApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung.spring.cloud; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class TimeProcessorApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/spring-cloud-data-flow/time-source/pom.xml b/spring-cloud-data-flow/time-source/pom.xml index 587b782227..086d761f78 100644 --- a/spring-cloud-data-flow/time-source/pom.xml +++ b/spring-cloud-data-flow/time-source/pom.xml @@ -49,14 +49,57 @@ - - - - org.springframework.boot - spring-boot-maven-plugin - - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + + + integration + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*LiveTest.java + + + **/*IntegrationTest.java + + + + + + + json + + + + + + + diff --git a/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java b/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationIntegrationTest.java similarity index 85% rename from spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java rename to spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationIntegrationTest.java index 7e2bc1cb37..6d71a785a3 100644 --- a/spring-cloud-data-flow/data-flow-shell/src/test/java/org/baeldung/spring/cloud/DataFlowShellApplicationTests.java +++ b/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationIntegrationTest.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest -public class DataFlowShellApplicationTests { +public class TimeSourceApplicationIntegrationTest { @Test public void contextLoads() { diff --git a/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java b/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java deleted file mode 100644 index 61fd8323d2..0000000000 --- a/spring-cloud-data-flow/time-source/src/test/java/org/baeldung/spring/cloud/TimeSourceApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package org.baeldung.spring.cloud; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class TimeSourceApplicationTests { - - @Test - public void contextLoads() { - } - -} From 92d320cd9a02af33413a1c229c3234587bae5db1 Mon Sep 17 00:00:00 2001 From: eugenp Date: Mon, 24 Oct 2016 20:41:43 +0300 Subject: [PATCH 274/309] minor boot upgrade --- spring-security-custom-permission/pom.xml | 2 +- spring-security-mvc-ldap/pom.xml | 2 +- spring-security-rest-custom/pom.xml | 2 +- spring-security-rest-full/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spring-security-custom-permission/pom.xml b/spring-security-custom-permission/pom.xml index 6098fe5b65..94f6006dc8 100644 --- a/spring-security-custom-permission/pom.xml +++ b/spring-security-custom-permission/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 1.3.3.RELEASE + 1.3.8.RELEASE diff --git a/spring-security-mvc-ldap/pom.xml b/spring-security-mvc-ldap/pom.xml index b001a86955..145321b2f4 100644 --- a/spring-security-mvc-ldap/pom.xml +++ b/spring-security-mvc-ldap/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.3.3.RELEASE + 1.3.8.RELEASE diff --git a/spring-security-rest-custom/pom.xml b/spring-security-rest-custom/pom.xml index 071fa14b71..296703c27e 100644 --- a/spring-security-rest-custom/pom.xml +++ b/spring-security-rest-custom/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.3.3.RELEASE + 1.3.8.RELEASE diff --git a/spring-security-rest-full/pom.xml b/spring-security-rest-full/pom.xml index 5cd0ed51f3..957a349d3c 100644 --- a/spring-security-rest-full/pom.xml +++ b/spring-security-rest-full/pom.xml @@ -10,7 +10,7 @@ org.springframework.boot spring-boot-starter-parent - 1.3.3.RELEASE + 1.3.8.RELEASE From 9b0cfbafbf5abafc8a0933203c15496b9c164941 Mon Sep 17 00:00:00 2001 From: k0l0ssus Date: Wed, 12 Oct 2016 05:43:04 +0200 Subject: [PATCH 275/309] Added Service Activator (cherry picked from commit 94c6cac) --- .../baeldung/samples/endpoints/Activator.java | 7 +++++++ .../samples/endpoints/ActivatorImpl.java | 20 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/Activator.java create mode 100644 Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/ActivatorImpl.java diff --git a/Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/Activator.java b/Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/Activator.java new file mode 100644 index 0000000000..4b6ee5d03a --- /dev/null +++ b/Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/Activator.java @@ -0,0 +1,7 @@ +package com.baeldung.samples.endpoints; + +public interface Activator { + + public void handleMessage(T input); + +} diff --git a/Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/ActivatorImpl.java b/Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/ActivatorImpl.java new file mode 100644 index 0000000000..9b7c2763fc --- /dev/null +++ b/Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/ActivatorImpl.java @@ -0,0 +1,20 @@ +package com.baeldung.samples.endpoints; + +import java.io.File; +import java.util.logging.Logger; + +import org.springframework.integration.IntegrationMessageHeaderAccessor; +import org.springframework.messaging.Message; + +public class ActivatorImpl implements Activator> { + + @Override + public void handleMessage(Message input) { + File filePayload = input.getPayload(); + IntegrationMessageHeaderAccessor accessor = new IntegrationMessageHeaderAccessor(input); + Logger.getAnonymousLogger().info("The file size "+filePayload.length()); + Logger.getAnonymousLogger().info("The time of the message "+accessor.getTimestamp()); + + } + +} From 66b6ce3dbe5119f686e18399b6048aa3dae915f7 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Tue, 18 Oct 2016 07:11:20 +0200 Subject: [PATCH 276/309] BAEL-80 - spring integration (cherry picked from commit ce66553) --- pom.xml | 23 ++++----- .../baeldung/samples/endpoints/Activator.java | 0 .../samples/endpoints/ActivatorImpl.java | 0 .../spring-integration-context.xml | 43 ++++++++++++++++ .../spring-integration-file-copy-context.xml | 43 ++++++++++++++++ .../src/main/resources/source/penguins.jpg | Bin 0 -> 777835 bytes .../com/baeldung/samples/FileCopyTest.java | 48 ++++++++++++++++++ 7 files changed, 144 insertions(+), 13 deletions(-) rename {Baeldung%20Spring%20Intro => spring-integration}/src/main/java/com/baeldung/samples/endpoints/Activator.java (100%) rename {Baeldung%20Spring%20Intro => spring-integration}/src/main/java/com/baeldung/samples/endpoints/ActivatorImpl.java (100%) create mode 100644 spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.xml create mode 100644 spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-file-copy-context.xml create mode 100644 spring-integration/src/main/resources/source/penguins.jpg create mode 100644 spring-integration/src/test/java/com/baeldung/samples/FileCopyTest.java diff --git a/pom.xml b/pom.xml index e97093b7f7..1b9aa81da1 100644 --- a/pom.xml +++ b/pom.xml @@ -17,22 +17,22 @@ assertj apache-cxf - autovalue - + autovalue-tutorial + cdi core-java + core-java-8 couchbase-sdk dozer + dependency-injection deltaspike patterns - feign + feign-client - flyway - gson guava guava18 @@ -46,12 +46,12 @@ jackson javaxval jjwt - + jooq-spring jpa-storedprocedure json json-path junit5 - jee7 + jee7schedule log4j @@ -68,6 +68,7 @@ rest-assured rest-testing resteasy + okhttp spring-all spring-akka @@ -75,7 +76,6 @@ spring-autowire spring-batch spring-boot - spring-core spring-cucumber spring-data-cassandra spring-data-couchbase-2 @@ -84,14 +84,13 @@ spring-data-mongodb spring-data-redis spring-data-rest - spring-exceptions spring-freemarker spring-hibernate3 spring-hibernate4 - spring-jms - spring-jooq + spring-integration spring-jpa + spring-jms spring-katharsis spring-mockito spring-mvc-java @@ -110,7 +109,6 @@ spring-security-basic-auth spring-security-custom-permission - spring-security-custom-voter spring-security-mvc-custom spring-security-mvc-digest-auth spring-security-mvc-ldap @@ -129,7 +127,6 @@ jsf xml - xmlunit2 lombok redis diff --git a/Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/Activator.java b/spring-integration/src/main/java/com/baeldung/samples/endpoints/Activator.java similarity index 100% rename from Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/Activator.java rename to spring-integration/src/main/java/com/baeldung/samples/endpoints/Activator.java diff --git a/Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/ActivatorImpl.java b/spring-integration/src/main/java/com/baeldung/samples/endpoints/ActivatorImpl.java similarity index 100% rename from Baeldung%20Spring%20Intro/src/main/java/com/baeldung/samples/endpoints/ActivatorImpl.java rename to spring-integration/src/main/java/com/baeldung/samples/endpoints/ActivatorImpl.java diff --git a/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.xml b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.xml new file mode 100644 index 0000000000..567a3464e7 --- /dev/null +++ b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + diff --git a/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-file-copy-context.xml b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-file-copy-context.xml new file mode 100644 index 0000000000..567a3464e7 --- /dev/null +++ b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-file-copy-context.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + diff --git a/spring-integration/src/main/resources/source/penguins.jpg b/spring-integration/src/main/resources/source/penguins.jpg new file mode 100644 index 0000000000000000000000000000000000000000..030ab8a685bebb796c24cc710edd9e69859164f6 GIT binary patch literal 777835 zcmeFZbyOTp*Du<*YjD@#4gn^(4+M9DOK^t-*ANIUAq0ZEyC(z;Cao*3i}6)!V9S*Y5qR&fWaoDnP8R0#*S~P*DJD;Ys!xmzQ}Rt|7}0sxwt05|dqHh_g944@)wWXPW_%ELc(EM)zustSOH zJfZ;T0H6x~yDkd=xp~NI06>WR0sC|SvMrX!?|Q8B@0Ne=g(8nT!h(X5AVCq3kT8>w z2uM@{Bq9bVdivNp`vL$)D%w9xdsET>sYBA!{?ySVgaIHu{lDseGiv?K=yyR9mjDS0 zgM=iQ1jRst;vf;B|MnVyfr9q8=$J^^XaEf4!$|Q_xKL>SsS6>^^|$CKlBlTvsuPd= zVFdtce?9Zp@$TQu{F~5kYIlo(B0!9XPl%68Oh`aTN>tJc zORoh09}NZBd1xenEHFj3?}V98Hs{=Lqe|9Q$j6T%G%x3?q50H6;Zwh%3YY`HjTCTy zvSiyGbCKBo9i{JAA+PBd&d&y*q)PM=rnmGV#n@IgjxIaxYLhN4=r5GfhbD4QeL!@C z*jN%f<wZ=SQHr`{F9Y-|9nNzZU9q`fhS>k?me&KF9!+mV8jA*`vq4!1dg=(&@Uz zMacZ&aN2=qrlS4E4|uqGkEax+cQ)Uasg97I!4A5?Kr06ac8{)J8E4u3R%_?Z&)V%d z%5ILfnCdpkwIty7h%GYx7-?&lG@I@6?c7ocQFM+(M={5-_1B^#olkcwq^3OOPjjCo zejIAo$_PniF4y8Hl1H1=%I64GHx8> z{nEmcAMF;L*H=zW1@S;J9D4;PVq4r*1_mwZOThU=E zoA@xsm5seiV{K1fW1~Ik_X%uz_%#9wJfHlf9~=!|xCSSEPf7g@cb!l1kS%i$VAM&+ z``I+Qb8vP$BVEu0_fEM33>|1vaz1uD^W=3Y8v4^y{LqOOCx*k_Q;{BF2iT~v`qEYs z9THzr9#}I;lQv34{#w{yl27w{@+NOiV{`@Pi zaz#N{cO<7%3ZKpoCdrs-mbS0rZ3ZgE z9+2#{2vWNNB{MInZoRdZT!}vBWPSG=#BCz|{L3qtFswC){&SsB+&A~l<*YpPPu|Io zQ)K};I0j4N183gR6!o?^@`pC^nO`JyA);J6UybRwxPm`@8#^#lRi!o}7^BAOgz9mc zZTa^o`~uIc1)IQk>vbp+H;)`vH|PnMh_vmD>fVFhj+&NB+l5mJIV`HRBnN|tLW~U| zBI1iq>Wl zgZ6RHxQzGth=^xc$)PFc#_T0s3Hp&EwC0Rus+AU^84@crf&sVzKOu`b4w0VX^~2Qp?chhV$SY3!kWO=>!g^8?aPHGUG0vY;1-t;>KmqNJ}l z&d7I-cMd=yzj(z1)ztL7J1?kzNsvcVWNhtuO-kA^XIuFAzQbM0J!fm7JIm)%w}=|9 z#oIC)A$F@~GQY(D-*ae!>Zsng17NkcRt7W<8J_@W9NdVV^ic21f`J56{I&)cql+jq zXOy=bLJcd!pbcnpPs<$n7nyhdq6uV=SS0acR(HB4bxpi!m-TgTSFVoAWMAF^DA&fG z#R1%SUhLD^+i!0ww+zEcqO`9*szg0=WcK&<=lc|AxcMqwuAifU1AbALWC@$1a(^D7 zit4t!O{^u9k$(rM@A@ZUX+T;h65grNQ1_vOx0^W9M%cFBBThFyUp1DnV(kj0RA|rU zJiBM~wNCWi3!lZe)acjGs`!4`!Bc-pc<2^N8o?WHk zESsH}7}b~P*l?M1R4agV9i}#J(bEjop#*{NFHRRD*b?jIBoDuMPp*b@=L{fRX(QQ$ z$(hcU7;PWUaCn=IXm3!hJ|OwDdR4t<$NHmEW}bZL#jxC@bWQmjOajKovJAmpv0lpF zq@%k7WM{k5A|%O$ms*3uU+^@PONLE`h_eLaE&99>QfGV` zbVM~Q-5%C9N2`pLz28UM^g%KY0c8T}qqdUWD^!B49VqOKH(6~pcV4|q#rVPb9?7zQW$?Y_X7km8# z>t@iU>KZ=$HZ18`joA=cH1>~otaJrhn{J;4h2Ol%ErNaYMR0d?b_dIQlBN6f9im5Q z2^FaC`J03!yw)F)WLU3J+34N)XmQR_`GIoEW~wNuxxt^6Na$AbreyJI&K$dzfcg2H z3qWf?!3w`w?`VqF(T(1)rBqSqj}L^ta~`1*+oq&OOM5MK>pCUn`>^~ix_qWmy8Vvi zMl#k0yyo+fc}sx@X0V~Eo%jhcA^7KF{JYY}cyD*Vy)YpDggx2^EvN_JF3IwfRP_l1 zjnwt#oD+G~y~*KyhDud#F3=qE-L|F~(MwBHa$F74`i-ce=#Eb2I9AA_SZu>yfqiEn zOI%#bnYA^KBcu^wxnx|YOcgJd=%+*G_|;foUBjDxgN~rN-aA>E=;~K3WZIphUcl46G0}S95(pVKxLtBd-s!6Phj{6PXd?a5lG4FtbFxKSzUQJ6?FFPJ! z1~qJ?0@riZsRRM_iF<_atdIJ2`R#Z|B9jISTrO&7eU?hatkPeVs7A|C^s=`V z`3Sbnx9>w4s}9OuI%wq)Xg0$sv$lVOmU5Il2zPzd2u(Ae&yg!qY}DcC+saP|ea<#xED1NuWQabA)D?^C}$;%oRHq*(%uR({N(H z*@)B(;Y)(6K?iq=$W=|65no%FW#>4!zKHDeaGI;3psMVwys~&yg2#$tnq~L)eTT-I zmDvr>?|l+mRKdoQBFJjAEFN=41YJN!)Y67T16 zChG;|cBE!heb|eIJPRp)HQ-p^5Q_VaHaI{UvUDJaM_q?;x^i;y z)6WYXQ8=absX%|L#k7jS(7uf7~R2$ZPTwonys@pwnj z8r?KDI$7cIraGZ9r<-?Vr!8f%Oov6Fqh4DYk@umkt*mnX37d5y?&S1N2MwCCE6aFX zb;b5odol|AMD>M$?F~tkss1P9hX$)5om4x$k|l5DeM*n~P?b5*6Csg1U<~@>zKbMwuAeA z7EE>cPuv0Ar+!Iu2op!*dPnWtyXPitOoa(f*M~n|A>0#`lY>G7sxR zS6`L|MzJ&>lxJv9iGt3lFh>oWN#|hQ%9@c(z>mv(_(x^dA?q5)5 ztD0Xn@uv^Gb;0cld*CM#h$%nH8f|_D#7T7?=^05zJ!LwSz@A7vKOdD%vI?%D`YJJY zWc&#w3q3Knz-4@v|L`Z1fwJ1LJpL39`A$9xM~54t71Ef~mCZ&f_C1;XYLty%)n@Wk ztZvO1#Y2%Kw_FnXt2#gXK6D}>`>8r*48KU!V@b4Q**tSf9Z%sa?-HT@`8RBiCp!&N zH04LygI(`G5mA%VrI*_At~y3$%(fUgbh@8tcv7rV5?KD-0+r*-v1`Smc)WNgPr z%fM7pY4dkL8bSD?W z{j~+IB({O0)7(+k+eB~3mc+i~uM1IK!(hU}!*hue>%Quc#b>--eXNoM)3+UQOT2knQ*6?~eTY16r*oag!;bD;F3-2Z zc4*PR0>(D(fVuwSc>afeTw`mWHv;myq>ijMgYw(h!st(z4!XR`f*M(wj)R^Khi8)M zKBZ7#v!Y!yFrqm!BtF&RJX_Ldi|;_f~g6?c*0BD!TLYi_g-2okMSQnd#t(OGICv7RO7z zsZF{2es=(nDEZsD1|stpzjGh<$SlSho`;j4pBG3#z{8i{=6BkN-_FxrAi%~;K!{&Z z0FaUm@UpRUb?{@db#Qd{kY@S$u9t<$*L194$NUM5XX4<;1{TP7h%CS)2&oJm+1Bq|6JlwkV1upoKj zNcq@50qH5J{LK=1Ce8AY{BOn=;3D*z~|x1 z`iI6}M3fwS?R=cQ{G5?&e-pK__4N0XW%L;L(`^ZTiPwFhb1__#VC4Q=4#@9^)}jU8H`l-x~fU{=Z4{m!bac!r$U)I@|ep`g%U`({b|j^Za*7-T!sx&q(t6 zefy6uK+5~SKJ+iqABac^{P%bM8)^QS5IISarb7zS``1+d|MK`hO#UP5{*Sr- z$6WuB1^%PP|1-M&$6WuB1^%PP|34UA{}nqsc-TvGJmZj+`GXq%17H2WS5W_}p#4++ zpoV`vi;9ARY=Qj!bMybS@&`3U;(bUo4GEb28)^t(q9UQFe+m{hCI&hV8ZHtq{V&uI z{Woxk^5zwyJr(Zj#7!@q&U{{=M!Fn{BQ|LBF(3JnVt8wCgW3l05^ z8Y00^BpQm2j*f|m;r<6SWG2NB!US0EA#p=t8!~Tfg-F&ka=jv33K5(pw*GI5KF5@6 zQKIbW`c!sGC&kV8#i$J)DBE-3`bKA{`2AMO(81qG{CUhDtdrOmbHDH z*@AJZ8b6VE`r>tY`|#}ch2yi>tcs42xt(8XCQboyZz?-S=XWn9!KTiEFSDz<#=h@e zaf8&&T!P|rs=LP*_OI{$7u2vR4VY~*335!T7udIu3kvAz+1?`HQB)7|pZty{V4sN| zuQTmEVnT9H-j2B|^F_=pFTe`l;pYAE({kV0%r5r2Y04o*G1if-0dCx&N9>gB>s=dB z<%)xwF6J!GG#{!evoFVwLselctYlWd+zLBGggQD8F-HguFA#%yRBi?-DFOHjMt-;C11l zfwNw~6otBOxlCfNzJ-N5z7Cqikg_Qy4eGZk>?nJ4;`0)gYJTE+)A2&*B~TeMo5}F% z%G$r!$axlrCV^^-Cq6M}XS{TW>1#@}pDr10A;tYwR9-}eD_Prc#t3A25XTCPrmdo` z#EJHR2vwW0Wv&X7CCOc!%_`YF{A0vL?Eta$(?A-#1~7WeXE4Futg?kLE8p{KQPdAL zyu}A@{E7lQ*TKKyG2U@8gcac`y;QN~t zcMOtm2KXD}*|1Zz>J}kAjX;JbGF*X8-O5yqkMnpY!lwp|BbPUUb$OWO5bcQy7TYFz zO|3~Qp-2Ax_VzL_rl^EpH}Tl=4)oEUAQl%5^tb_OQ8tdqs+*t#XFY#%uW>&r?HVf# z4_Q3dJD};;DpuiMc0#kRs~P-ytuHaEnr7E@{)M$9nr4@d<{09Axb`#LA~UzA@SdQM z2S9z;O8F2f@uz0)#gnpxbbdApH1(y(Th(?=eE#8_?EX8z7;bD_MFqq0t}5V!Qtj|KIikv9&MC`>sG~j;4p;s?qAvM%-Y;*exs6sp5L6dn^91y=jm_<(B4$xP?JKs-d7cT zpUMF%urSGHjlw6h7N;xMNh`4xM`$uCYmI4?Uqn4`vAozw3Bseh{|e}UTZYeAzQ;I4 zCb;`X267^?Ak|+dJeg1 zg2Qvxy~Dny@`tV$(Fnq{#Q^Kh=fq;+Zzm?|x$T0-$5UXZJc85xDygz;nRh_IFI948 z;7}%fvdo(t{KFIoQ2mnMyM?qEL+7XKNGlo!!&s(ex57{~b71xkuv(tcRVE_LC?rwh zz+&@44}!$fT-|0vGeWx)#;Bfp5)4LQmN9mcEex@ShPH8M0UWqjek~stS9QG%vaR?o za@&Bb9ERc#3CpO}IVn|B{Lk+V5(lzIUiH3H*p9_)tssndD&2Qr3QPfoziq%`DDzil zqAH1Zc>h`^lgB1}Z?avKQBgbf4zMd5V{iUYdKk3cR) zbnnTh1Q)i@&@M62=(9V3c|T5JL{ZNF`VLUNwG7{eQY72QC@k%@C4dw^Pt*uD&YeF% z2z}xlV|S z_h+u0@T`OS0N4hbbIEwo^PCxl%GojvfZA;C+H%Ru^Ju6dQ#Q*|)2`jl^uxl*8oYZQ z+aN+E4Y8JepZygvHdCM&qZ-Gphjh83hrP3fPX#0iXAL@A8skF!620R9+2Q#9FT^4h zSFjY%^-PU+j^$Y2-UeKpH&%gS2vxyq+|%fcE%i>-TZzq4Cj=Us*-TMK z{e^w%OKqu$%I9FN?rdNRo8va6J?#l;2`VtN6FDnAidGlJ1bagV zM;v`zVLqLpcQLqR*dUVf-pJ124y1j32Q1E88l7k#HVHGXQV{bhO~&rj!**Sn+jvV< zagA6kTA!BYCg$y#Ebn~-6=qSwn-`%~^NYDoV8ViaiRpcZ!c(7iTksvxAX8I1>{p)0 zbo;?-2b!w3Fd-c9jdHX*GE@U*!C8FqfW(;y~3kocj9`Z#b$#*Y<9ky4~ z+*L+ylX_+~!j8z%wje*5{n_})QVMpq5cTvv0mbd*Jbdx#l?}87#_P~Z=j&U(+kjtn zfyaB%SMY14t-L5E4%XO0rd<8QD}6C&+1Eajx=fGWE*@e$qPkqXG|!6_n4Igt`yjo8 zC?z8Oav6s3gRrpo0kFhfqsD-orDh_-SV#ieEgT>_dK3I5T{`!gnqzA~~qR8YK zGc4;gvNRTe21V)9XXin+TLcN zGLcUG(sPgu+tXqCS`< zYl^>+Hq8chF&9J4UM=iBSc9gY+|_)KSrsKa=Jk-ty}q6g5#jHHgU>~?Vw@R2g=bX@ z1fa^0ug!_Z@o*;A7i#q|3E#@{zDF6mUYNaraQe@wGiuedI^(>Ib-qzOqxah-PVKf- z@T`(VotwE1dwvI`ysH(e4dcy4L49*}#mL`57Xwa=V3`V=TpX00tTi&e<|Og}qYlmE z36%PTSG;@0KhP?4rC&GqNc3z5UN!d`FnK|P`)XQ!dHO-U!eiZ@u8Xr`XFxB>YD@b& z#2zB;6M)>Sxna7Awoid#T1(It%7midYGMK(z44wCz)a`!uyf6_pp>=X zroB;w%gVs<(VyXVj2gq~1DT$hHF1Y>AsUXu3+ipN3u2nfV%owauFYn9?tsPM<$Lk< zGGFS1n}^As(ZJYk^~Aw>BY;WC|IGPe(^+#hGP{P~MRAIwTV*oi#)RBi9E zbVU=|Rs{7MnW%JQQJ$`$733E1TtZX3er!xBTkzD-lgzb@3lZWs@s2gdkWKGHxTA?F zG4Y|O?Gr~KR|^lUuMzsmvS^F)gen>GGg3xzmwohlG{nMkYx$BghKv*CSBZM>-Jq;; zIMW6gHiGERB;-aULfdfPtBdtvC+~um(qDLM+Nk)IlI3!h4O_#p+n@xNSf{NMK~yVr zaGeHo0;JX%M)l=w^f}AQk3^Os_c3xecnfsP>ez2(t*nFzw@sC(<*=dRM%p@SsE*i( zW4zqR9dq>a-qZmK#0J*8u_#oZt~`)_{(G_+iE{T>gY}_%TCxSYY7nX<7GcbI@)@#t z&vN4@s6rEac)`J^+_8ik>c*33keAS@*Dp9($i)g}1wc8FX;>`Sn(kq-$tw?n@hJB_ zw#)~cDTTk*)&Qjl8VK3gRpicGbZXi6IPGjGdPI`A)6Au-%INsF2*U)^muR|_aP!;H z&d98Fv;jBAByhtO$X1!OlBSU$BxOP-H{8>dIZc0rh0SA1w1zu9#|~0hWf?e)4F9Fu z)41+~^u&r7LCE3pd8X*O5&>P>;8e-Q9T0ov4^b^G%HhoC=t4@$x}$cJ%QHp@38K+Aza#mVf?SK3h-VYKNZeYKu8 zdSZe9>J+)zOjf;(k|r~wBIO(6q%#xVOdv+oMBifct=|C!Vabx2qY9j| zGe}2knHZad^q}E22%h>`QNz^RPJ5>zz0~#u9ST0SC!d*Qr|}p)MM+6j<03K!ihK9z z10GflG9DwobgJTahj^Pw0w>2<-bWm;-+qv3O=4@>#xtCu8 zddFNr)y7I|;ZJ~C;vS@imSWOFTK4zr@Qz83) zd48UQ1$XT#M;3emGhVFKGdR!HPfwdt)+)?zx^Jpl>bkSW@P%rf>@=v)*5M71{~($A zQBiBNX=a?e3pP!IYnb#@Ks4}pjsY2N!-8Z}#VRUDcBZ{Z=mNNWf`?>p83q8|*Bid`^Mj4IZg#eE`Knr&# z30n#yd<-IkOS0CI=mn&tZCG~JF+1=Y+C3J*n9_KV;bAiGB7Pn0s{T<(SApwvuX9Q3 zQB1sZ^>*Qv@yoTrLnwZ#rNjVgSzc|aX>6izcm>wU$DY>?Nt$YUby&l9D^}>7 zxFQ!p*-(}aw5%sc72O+#hv=RAkt3Mvto62F$eqn#^%xoMP1L_P;-fa2GPx!P>#YTL zQPRXB-%%T4%bveNSh#R|p~QUDBy?8yx=}qvMxC1pnq7F6nSpjRse&7$Mn;D*N-W7YW_w^sW|w{L04GFD}9%3CVge2k+L(A!}u7c|`Ms>Kq$Gg7_K z^uSEM#$aPI1vy2H3rx?eU(sxGf7@esiz~g>{JN+Y71%Mij2~XUwQ6WZ(N-zZKr%C$ zrc6Z#nMjfqm}KOq#$wi~-+83Br&GhE*NuWs+jfA{MRywdo#Jb!kvU`5RnSVtHa5L= zb0lLro1*PEid8o2ph$M*mu!!3Hx@D&^0z8t%usf2KwpuLgh;ldvTB3Cm$o-8zRJJ? z1cp5*r%~%gU4fHS)#C0!4eC_9`@&xrOw{Mg(!QDT-%a|i;nW=4UgN}Oxls^yJn@S} zQ&j?Ki3xc3q6lt=S$F}`1{Egr=3GwiEh8#)8f|f4sB-AEk%++`i8@L#%J?HpDcUf! z*@Ur*e!ZdGD+q*R;>z)KpDofqwcA6&#^!VE>})3nGSap?N+X<{-YC%Opn~HrRPDN+ zA*@!Rcw}AY^Jf)s*~P`>-PSr3hER`En@-sC>hEnLTp!+&c!XCxxcC9#5~B+^hF{Ns zS2aO>yK(8Jaz=J6Q4&VzjR}r0wGsm&Vjq=P2hMe;)hr?pCIF1;(8uiY6`W-{x!v@0~f_mx`w<;ALNb zz?)d=Vs*^8z=pSY_S1<{4K=3vxA!7JgXGWM%d=@_7Jfv z#~4qFw3!hoTJ2Q%Y`Mr`y@)7*_zsL>Y~aF;`*j_3k-5rKUZGU(u*-S-V93q zR!}{J(@UuJmT?z{3GL{my5HotMvPoFWLTzED9syGUs>ovN=lIXN*uQt51_hLz43Ix zsg)0bBCND3ZOry)TJ`7Pz556YmDibX&`FePPhVnFim$cZV>$79ya!`_8yfo4GP~`{ zx#AL3ng%K_ot`37GRU>P)whAL`lkLKv4K-tO35>Df<8P#lZ-9t8}+Er9B zPw)fi?i~nEF{7hx2BjG{?z=pCuCD_dtq+Nute4QQ!jn=0DcFcr1YhVYhCgyDUf-6?R944mE+;s z&W>gI@*AF-p=MUrJ+?gEdzS?*PSD^k*SG{@-p57+$g7zUS7vr z#VYGS8gR;CZ69~Twov#1K=_*Dc75fRR*eTYPj%up<@;1wyfFTkL6cP?8bZcN^1Xh% z=2v{xd8|n$k>x5(rs@w-`$w&eDSF=#O__bT-#~=q@bUb>#6t1f)RgnTId6>|x; z8e5g&I-;oN*nMPsBF?CHjw9_{E_ZHdmUZ27P2 zP&Wg{y>NfjQo`(!0>UPd%dvN+DZ3APcdj2_`%b=_8?w!;v}6R?mETX7#dzta5C7l? z#U}8=c4s|*d*UPDE~^c@ofY(JMsO$B;EIK)KMjJhu^)_2AeX@r3h}lB4K&Z=ot5*i zMq1yt&SdhW=<#+NLV2`7s2Jfa%Awq#ZQ|ZI7X>v#wA68r@Gqo*RKCpn;M3BNjCwi5 zqHx3{Ebx58y6Tip`wHZR-0vrqFpyqV8bp|GK;Ap;eH4XO%7ZH=LFeymU#U}G$jR99 zBD_Fff1)BEbvZ*lqLwZh?HJtId%dz>d)!5F&9h^kb^$A*8*&ANcObXs-iQ&sC;}kH z-?-DR&YhMtlr6KD3C-JNJ~Z_rW%D@(fn|rE#Win<&=kxc(xb zP_hJO3Z7dz_{mZHqZ0KbCb;8-@f*>r6Xfn%5|k=8`1RYTNs293CCc7Bah-A=Ko=ba z04|;^ zQoS?q>yR`>a{*Jf_r)SUhBhzNm0t6bL<29@k7O#4Y4)>AdGM=WN?i}%SJ4-t)cK^Ob4x#d;)4&S3@L9Dl=GFiWNPUNkaz;J|OnZlkWyD9E^>s82yNvUaM zDrnkwbTUkIkk%QW+QC!xu)AmtqP-bh5~INV=1g{f@{!ywo{NiN6Eb4cuT`jwTfce9 z97qtefh#&Zlpf>p0V$-+g{i%m7QK;EMffb9Nq{k3NFTiF6j~yb14gw}n<1B5GbC4g zyfSc&_^|jofodj7OD0q>{)38(F>aMiACpD3wK) zVemlX^)F7KiMnIl!}%(h9H>gx)F@b)Q5MFI8wvA_o}>E)5z4=F+*#m(HYW+>C<^+L zAr`?^CS@tfo~1Ko*j6`>X6Nm>H`(e|Uy`I5KqxJ_`b8eKyUI#{7n$7@n3$~JbRFPh zdEQai*J#M!G3{O%q1};Ta_C=0hxN&CK=|RMn_M1-ll+a$r0gmD`p^w;-yyY$f%Nrb z?g+8;1u!M+^$moAn~hcDUcsCFU5gj#4~@kTCJ3tnk~zF9Fab**Df(&?qHc{X3ABWF ztNjj2f{Ou)t3tkcU02PRiA}SKA)QQvm3G0_9Hyr3r#%O?^A>RmWm^E5YgqEZ+F7O_ z6oge6y?irgQeuoIR*|)Mfy{4ifO#2+?F_trJqa|AS;MGRuVQ>0d~C!TITchBNlQ)a zk_utSw=C$GtmP&aV*k#XYA$#ONcbb(HheQdhM^d(rYEhsc3&9jm`O{d|~sgqiye z*fDhLrupQL<^^Uf_*D?(^{D#CbK|mC)-JATBeD5GIkgMcYv1AW{ubupxv6L6!yCrP zH)2NjJ?lj6y72zl_e#cN8wigw*VPv&_0|1-&GP`!KJb>r6E@NwBFRDy-1l#{LI z$HXMNaPYLT8pri5R&Rjx2d2wmkeUFcQFWWhWfQ{cd%-CzWkPHGb6w}{14g53l*!AR zZ}G}wWm0F5ZD%T-OvujAMg!Zfe9~Km%qKGrb9*#BvTxspN>5eyOpL@9Zn-$hIG(Y#vc*t8%g0a z`Ng%(1RiovjF_k747m5$WC~~5Zuxvdmy+b1^|dETzd(wL2{gB*u@33|=>|T=8RD;G zP~p=I9k0|Ay;HB45QXY$lrl2JYvUt793axSad)8uRi}q)p{8RrxSB7(!y67G^_(!Y z)zg?esX66j>~51=mc+kebg+@w+yP9BXGeYa(q_LaIcmxBw~W|4(f92Sby2SpU+a{$ z8tE|9ARy!f&Bfv{C$MWHU6wVBsn$oWX2Y4$>@~(G>+c3)b>}*&vxr5fQr&@sE5GB% z)+O&4J!E;k7_-bh{D(r7qoYjNCy3<%%Y_sQWPiKNP%A3jR$^WEI8Qn4Gt{Whp&dYT zQd#|&D2-3E!A(9RYDtD+<)6>ndX`Ics>cHe848fj4oe*l9yF3G(q_!sF+-+*+PvbKkX)lFKv2=#>=gUH9zT(HmKn+sb6auCG(HnUV8f zL0IhPK3-{M&#lVp!lu~|$TBh`2KTxY91&_x-aBj1Km zD0_n|?JZxh<;AaXoCpwxs zvI+{;VbvLhra2gf;jChCdJOs6DmNg9Aqx(%XeavxpfRWVoswb;TzlVh? zH|~h=QVJ)5Eow6O!7odC39L1%i3WhM*ia#czm$Ah;jKk@702Gu!sDIUiWfE{2OfV+ zYByP{f&I?emOL^`pOn&SOAS%H^CP+JOS&d9cjF}Zg1LbV2(Qjl^}AK#A%XGom7>99 zXMg-;Shie6FXcSNnyVXcYv_L(AOa72d>_3DsG`8S-B^x*$Z2X@p2+KbDHBm=kXTonWQ6ILU&j(r z360X11V2Re*dNrF;3Z3~h(>h0qk2*YX7WpyFKTN-AzC~|yC{G;))G~rv^KUk%m?e)&xyx5E*L4Ti44nrl6*erm$o*W*_=kz{L znP{M+3nwzg7b;nv2&9`I>gW!{m@d17pM<-CsOeaZ2N=SC=Z?Aj?z)4!UKH0LG7dHj0*l>GEPc|DayB<=hv1P`3a4v- z&5lc7$9S%97qGA@NJ)A9IK{I&w)ox-LJ^`nd?Hg7X;4Hi^WGUccrn%ED;MIXUMb!} zOi+*0s3mZ@bL)LLqO8s-z09ksiq8ByMV4N@EvS2+cR`omPvtPwOr=o%!L?Nak@HqO z_B^VST7!1P2P$-k>^|!i{A9Y!f^bEi)3)E_Va=X3nK-9kD$!RYXfdyhnBs>AhPO-w zD+%?h=rL5JT!sxI!pit$UK=C7v!e^I>c_7B^kc^uY{P8VhseJr9kX!5W=np>rx`F; z|A~v?H7}WHjF~9+8Fm{f9@mFc)xBqF0{cGvD!^SjXI&z4W_65l6al?>W!)vKKUqMMlqe|@epZuldA{T& z{XqePx2xj12V|S>$cQ~Tf$WW_o~PEnww~0+273D+{ZR?u0^wMDx6gfn9vqR{^H zUzNyyAiA!B&V~c25$H}s`)L+2WBR47QdUEFcnA;G_W14-EaZ2TnQH+qwNgRHS2~-a zZ|XxqIdSSmsVj4doUEBTGRRQ$F(tuHjsq{N^yUDSM^M9iTX`_(txoi{PrLRo&VTS_6Bb0h8w zA_jdfI6Q6;b`e8BqaNark)#C3ts(@D4#^sh>k|v=3#x`Vj^WOF_rh?Cb9qtwTgFceySQ{TW*btr9U2s+mpRn#xEIm3OD@J&}zZ zx3L`NL9szj%-BDZFPIv2u#a4APfEvj%%HpU2KW{?pU({TRFcJk%>Ydsa@`4OZ$xy2eH^1ofZNVj%*2hF>f*uXFoNoa3JZb&qhP; z0N$%B{~lgS6Z+hsLwnnT&cv6D6`3@V!B9PnTg6kNo`@1$mk+&LP?wYw4AF{-dJ;Ag zwW2gr4f?Qh;reo zY~X9;`n1|`tBe(Ld2AU;F`aQsx6_*qyl{n!B@VY*5c1eWej~S+GNW}FIjt!xa52Bnvu{If!Bgm?4J^HG zFR|6iKy;j66tX!}C2P%!ZDfpWZHDxKLiMPKv8i0m3-rLJA2nt32xPoRb)iBH#hZC5 zePNnEy@*;92SnD0o}VCB?}_rfeKBz-8>@+wyr5yDAyR>wUu3k$V0Jk^*!t{68@*|C z5djrh!>-Y?K+t8iJ=

    }92FCS<$zdctM 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

    $iVaW_*XPbJP9N6HQf$YInsu68@T0 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

    em#UX#? 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�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

    `8wR+ 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�=gMMjBC4ELc+j-^!)pFj$;}?V^PP`IUi?BGBCIw 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�$2XGf^`@ zs!3}3fstO5!^=kIZEQ>uaX{EpA)x$VsQwnNJ4rRI3fp*fM|$A*Chyr(^%ncaR_s`! ztKHOlYKQytjH0JB@K)DuYMs%6pEC6K^j7b1QpObTBkW9$x4BRjd#ay zlG{5SHa|P@+q5znO{JQoug@lXZsxKWaCb%@7d8q6!efO!eojiKb*fs5f88_@#~a&7 z9?V;Q*`&L5hW5%ho;B8DVWz4N#8~lNUn&oo9WyT{ZVF^WYLN(Cei?MJQ(BEBf{j51 zKqPA;P^C#sRQz1;>`pp7{a41#^|#X_ntW>RdYGv8)*17alvH_!r;>d3NM@-r6xh79 zISCAtAg53ZdIf?gx6O?Vki&CoW-=Plpn<3(x@#60Wj2z6HHQ--~e{+ zTVrl5tl_wQ*gYJ?j#L0@rHpC->}EA20?kl3k{MRYGT*@HG8l{kQSE3dm-tO4E}s`R zMjGQKbFEccNl#d{GeWmDOB&P0k%rPPNnV!3T?k!4XvwIis#R(Qe7M%U4;~#+ZzPS{ zW$}DTN``Px7|j@vs=(9X@X6FGK|@-*(c}7Ojv}0(gag>$WWT35%wyJy_wN&*G z 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 RG&~l$;pa{i2RwN7|Jg9(1ls@r literal 0 HcmV?d00001 diff --git a/spring-integration/src/test/java/com/baeldung/samples/FileCopyTest.java b/spring-integration/src/test/java/com/baeldung/samples/FileCopyTest.java new file mode 100644 index 0000000000..76ed804a9f --- /dev/null +++ b/spring-integration/src/test/java/com/baeldung/samples/FileCopyTest.java @@ -0,0 +1,48 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.baeldung.samples; + +import org.apache.log4j.Logger; +import org.junit.Test; +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +import java.util.Scanner; + + +/** + * Starts the Spring Context and will initialize the Spring Integration routes. + * + * @author Baeldung + * @since 1.0 + * + */ +public final class FileCopyTest { + + private static final Logger LOGGER = Logger.getLogger(FileCopyTest.class); + + @Test + public void test() throws InterruptedException { + + + final AbstractApplicationContext context = + new ClassPathXmlApplicationContext("classpath:META-INF/spring/integration/spring-integration-file-copy-context.xml"); + + Thread.sleep(5000); + + + } +} From 5fa83c03d58f229a71b519f3b9424b5061ecfca4 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Fri, 21 Oct 2016 06:45:07 +0200 Subject: [PATCH 277/309] BAEL-80 - spring integration (cherry picked from commit b5c7147) --- .../spring-integration-context.xml | 69 ++++++++++++++---- ...pring-integration-file-publish-context.xml | 62 ++++++++++++++++ .../main/resources/destination/penguins.jpg | Bin 0 -> 777835 bytes .../com/baeldung/samples/FileCopyTest.java | 12 +++ 4 files changed, 127 insertions(+), 16 deletions(-) create mode 100644 spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-file-publish-context.xml create mode 100644 spring-integration/src/main/resources/destination/penguins.jpg diff --git a/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.xml b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.xml index 567a3464e7..b814e1a6a8 100644 --- a/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.xml +++ b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.xml @@ -1,7 +1,6 @@ + + + + + + + + + + + + + + + + + + + + + - + - - + - + + + + + + - + + + + + + + + + + + + + + diff --git a/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-file-publish-context.xml b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-file-publish-context.xml new file mode 100644 index 0000000000..3bbd59093a --- /dev/null +++ b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-file-publish-context.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-integration/src/main/resources/destination/penguins.jpg b/spring-integration/src/main/resources/destination/penguins.jpg new file mode 100644 index 0000000000000000000000000000000000000000..030ab8a685bebb796c24cc710edd9e69859164f6 GIT binary patch literal 777835 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

    }92FCS<$zdctM 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

    em#UX#? zpXn{&TG6C%t2n6@r42Fs`tlC#K3a$QI#*Ix86ci5PpAV+6jf2OMNcabqMUmq~is`j)S#N#K&6Gelk)i=^?a(7)}ZbmRv~9y6$me~+|xl<^iQ z)crUEG@$*wIR5~Xrz4>RF`z#`PxWX0oVHJrq%n%QW|B6VpY2gclg4H|OIH3OV1z1_ z&>F_zk7#vI;|2)Apbi{B{Jwee^Xls$W2g`qigES-09Tj!x|Whv{hl&;LOiil0LV1F zwbY8XkH)EUERP+WsQ$j&xiOYlq9K$Mka1FS2h1EFLMi3e*b&4LPM;{NC~H57Sz3m& zns4G4;bbf%G(K{luTGL|ZEwf2`=05At5-?EKA$7x56IJ}VqImWICUbQv{TZfho1`P zr`kEiO-X4O(@0{fpq8d7My+PrB9sOec}2K9o7>ra_Nf<1z+MN-7~}l`q>$m1$ZjC!|Q?YI@arDvCPFY?M_1NU2XutaR{7k6|6l zTUoMN<8bkXUX=}=0PsG5dh{Z&jjtIR8lt0uYAKJIp#1*P>DIY_&Ug8`;x^7ZaQq$k zmzSfY#Z^yDP2N43gQzsptwTlP%IqDxQ5%?+j7YYuk`^E?xX1*t2fVkkLAOS3ChpuM zH5vG8#F56dtp}GMmq9LS-Qv4~ZLelu4%vwk(MjiwY4!gjcQFew;Xv6lY(>i zF9?4lE5x;6*!bd7bP(6LLcHAD*>So@oECAZL9U_&D^3~n=;X!vB2qM|2S?1FIQ6ej zcy%5+nG?$irjTf2rs5}gLMvL<5*|hW0I#(>YOBp8ksN|RrfMok`H`NA_ZII&Z7r;1 zSIhxZ`FZrb!tQa7nJFsXGSb82N?lS1dbuJ#38aLP7Pl-Rel8=u{kscAARZ|}HEBY7 zzEvJo{{RIKpF~sG%42!0fiTpPPF8~kgl8FUIjIAvxQx9-QW;)XiU_Np?N#oEnay+`tj{CP?H;Z7Lu_f zNBE6082Qke=A20N9SE&wS46alzfB@gC8$+VN-8S(kcD`83h?R5s%Yw48#PEuy~&cR z@ih}FL5JJa)bi4Ol}IG4YSJ-s%GMSi?V66_IZ;(t#@!^rRT{i58DJ_!IOmV;t1IG@ zJ1es7(Wxc)%W%x6P^dqa00S8{plXXLM_rq%W{!Q$R|RylRHTxDh+hYkQ-vz}UIQdx z{cJ$`{yntUcDEOaZxmwVa6)@q2q+0P^Z)`!%nJ0Z*j-ue(W;p2t;}F92Z(D;Tzu$A z;pfAnW7FRY{#ksVsKeBCCr@^5g~m{ zO^-gxUv-6D*HMyPB}_35YP>xwLbT!KQYr^Ytth@ER(7*opk`pqtjfluDb^QGEB3Gz zH77R@(x32}&!7E^Tvs<1-0LhVOHhv{XL8S5THq+sjY*1(vYDhdU}PLzTiQuC85R|2 zV>)${rRucDAGH4fgU_XL?0fyx1*c0$nUn*aRXk`=(}3VlpO;osvVY+po8q${O`F}n zDH9jDDxiTSrNr%;wxq{Q(gP`qrd-lg%@Kq&H+5S_A@)-HysqS@(xUbmvA&v2@Riji4)A&hKUs{foy^q-&4|3D&J?mA0 zd~F6JdhV^q{+hPt3k#FR$-NB>RNGe#Q?_X(qRMCJFdL^QPgRbmYKZ8nqK-LVP%Z3i z5$`UUrUhVBB|!vMoCyB_SNj3Y%X16#69CT`o}{3zn$&lJzz#LwC~HB)tmbCh*n~PmK!k+5x3qUDWi^twz=eH$n9ObH5M-cQj`)1 zYb36z(q&{m_dIQFJ0$D|st~`!$F(?Og9;u1rR`-~P-Zpk$YRMc*{v#$az z+3CRYssOyIxaT&A@lf_HOALafR8Wya#)s#OTfDn=Gc-Amx1?PAQ&7HAizh*jnjqJqY@D#!Vqk#9 zWfu018$)U0T%cd5F7yJLmdhpd5EZT)? z0Vk&1c1QSb4{+7e#T|V4Y%Lzsmn$?+JeX>coX6ywD@QYmW`=lOO(B*=n8_15s{(El zLuP+>-CxGU%^6#0*l;ysrPialP`NC^yasVjlt`W}^j0&XEJ8+{A;Dz}@PG*wV3nYt z3dX6BdS=VfQDhp)G*M zmFbq6NFOigcxft)B=1}H%M3JYjKpGArg|9TW{5R@N=h=4KC8%B+U1SVq;W;MqQN4W z8YUBIpkD`KTof-D@`6f z-rH-NY3&h~plPX4Rf#ymjUf7raOke>bVF}{b4ccf<&?E*LKz5TA0|pvbTI8q)U~<1 zE>fy5ynOW@da$#yOB-&jlaHyJZW!5{Q@dA@WRU59Ese$fkFEC!roMx4oQaLh6S|Z- zfw|k2qk&ZUvs9H_)KZx0JLV0sEq2SB2wTHjNgzxD57OSqt8rRlngOdWMw*QDq{QU2 zD?eJvoOrT(UWb8Z@XAxK&zdDJp72(u5*7cFjxFO>)J;t>{{SbFdfH(@AMP-CqKPr====+?KauS}F<2Jm z=Y<)1qmiV8FRpoUV`n*K0`Tx zqs-&-87hi=q!gQPbU{$-R9bzkw26(LvZ*|pe6eT|KLjY!2?v0-mGFsoZMT}QqW8oGNO}^ib$uGP6aw;qpC`r zL>Vfn(WInVcC~y98o((r($S?pB4Tui=9EmbzZa3#7uCl;)a|#B&1n_H%!um|u$wdq z6r)NrREkikB;XJje7aY4Z1($$SwM^uLN1YsCsc~%re9Dr=pVwR)|tmoH0fL_!p|gd z*U(B5N_moJBDG?MEOt^z+-m*mWsOXh($WO~08}n%X&mjK$U@vk#TghKU#CQdN_i_F zS{wt49Q0Q+TAO;r3tCFG3SVYIVNiNHG79&Ui zs(dLy_`w2-MkoiDSgC308QN^5^#koH#Z??sk;5!CSs3F~ib&JV8znB52p&PD8hJb4Zp-un*(2}3g6dH*> zWPodqgH2!(1(sJ;C?u3Kel*sUoxNF!Xpwk@0fq-o^wq0Q(5ke8DyXVnIFG4>ijvdh zAZS?V^FXn)M`3bTkI%JhI>N#T#cB!l`*?l7%c9xsjLO7;t~O9l%AuobjOl8C-c&j1 z>l<7iY6hr|F9SlRwr8n|AKXP|jy4)x_$mCNB>D|Nuh)-iVVYKDItgDsKj!lJ{Q51u zwJRK=BHk!&z!aPwByjF(YCd$K;hvuk@`4kwXaOvPm3g2b_VupU z^V;2VN%41LV#JCYG2b*XcuWE)>S=I0OD#~6DQ+raib~|W0KjTn@_ol#!8E2sXou*t zC?N1Ts0P1fe$i3GqZ>m8cC!Ito_2ct7nvUV6UcR;g&C(-cufB{~AI zG97ZOKcZ-s?88eQ5BqOs7GG9iR76O@QIJR3OlLLEmO6U%plg$wMjXMrcr*E~8HL~1f|<>%HA zx{iPeauh~I?_x+`r}J^`JvDxruCq-hzwcB(G1HZ&ark`y0LjyiJ(zkSZ?~OVRugOR z$>SQXk~_30`L)vHNSU_QnoOU1IMo$5k%x-5GkC5U`m=gnISb5bF{Df ztYWaRxm9&!);mNNN&(z1OI%z%PC!R-9ekLeEkXuGYIO<|ZL(f&e9?8dvlQ7aBNo=t z=qstK8%s7o455IH9SbQ|AO$K*gX|^0nc12dNl4h6hiF0%6F=aHWWV~vdj~qruf=m% zAB9g4qJR_S+I;Czk&1LW9vwU|DI(;L^wrHi(ffLks^(&mGPy=`shxc&su`3YrkIrt zi1x7)MA~9t!CwTCP$)Qjl7@$e9vw7Fh_yH%8ek7I!}j!jf0oa2V!99cf_yyg38@lH zF5B-tk583sjEaH{&b@$>9K1eVLpHkVfQ7SfWskE^Ls z_Em@g^p?@4h%(%=c#EG(0C8IS0&CaSiy^n5k0VmbSj8;(5XO3lA0 zzv#-qjy=eWbTk5V>pVqxA2IoG{EtC5w(z8Qm=PwkQNYmfByklLrF@1l)X1<3e0NyX z10lHNa;su(^(6j1(XO+`f}T`8Q|XX?7XE+if2)UHJ7zEOJP)82`Va9Q?7M+cLH@7j z)5&k!LBr=>p-Z&^Qgpwm^)IEpDtI45$MyGb-Yk5&QX4{r?ZBrVnX9(Mu?AwO?wslR zwBr7e5CE4dEqh=6hqqz6uW>X}=6}F{$P!sXC(bNxBBQn zMqs4z>S@3RTRl84tXL+Jf2G_o9F+Fc%pB>~0|Q*+huhP}1pGu$e7eaN-LhS#NdH zoJUW_j=5!J29&6!e$QT?sP=`^_akO+^-Qf{^z{8MEN*|;`(>|+4JMiC-=}E?pbaZb zbmEv6fHI;WH@ZE*BHXY8@yYg`uKZ}#azH2iKj8H0jc<}0{3E9-dP2UfDu<IMfI> zb#+E8N-%+GRk%;^P-$FmH^*+|b8%Q7;P;^;#wc}b>s}rHvmn#sO?-e$ zivUgZTI5>fem$_$5ybT3B#lCT1Luw(XHT$gim2q%EJ%Y$45+$={{YvyQ^mcv^$8%s zuTRGsMzlj(pR@g5y(+18{AEY%s;-p+;csv`2Ecx%Vq@d+L--Kg~!+0p?gzC$m>m3Qnfkhs!SL~eNhtQogf>IbzBDi zgnLph)TICb*QQKV7$lycwj~qwM9fPW0BeA+AQubt1f3%MpQpclM`-|!Um?{>6&0o_ z)-}bdHOlD+oAIakC*RC3zoNQ?R757cCq5D%S~Iv`m1@)(>*vM%qB>1Ce{$6K z2IQq#@SS0fTHIY-Qp{kh-g&18qH^J(nK9He&hipR?vyvbxZ$I@<{ie>9<1a`Jgbbe zki?Qr31Vwp`S9o`yWLwo_t3LxL^Uhq0PRXpdIH5y0i@G`>ioM$KOQ<7jFmfHO>(Rj zk<80Ie1e&5=&q3?B!fw7U+502dlAafg)ZMWy zLNLw`XyL=+JVrjwiibe_d8PTC{K`5r;%#=_ug!Iy%+6suf4bWlF@(}=owGu_t_kuL ztUy{Urs=Juqj=l=>~ly5s8|F&%f2tl_PZ6UmE5_6t+5~w(V>tT+LWk16mlhLjbMHy zsxDmG?k>5CJJN((M+?y43gK9a@c~$aj20BgByVTh7&&>Q4LkZB`$&u;7o}MK8+U%b0rd+fY z6*ZyQRMFR4%NwZDKS{HTdkM`9TX!k%TWk;FL-nHfP_JoYNd|IhCy1vUK|Ba0D7siy zE2;woDJn0_>1UwDcr9zg=UjDUpBT1Nb^icTb*|K@kzlUdyCVgRs_{9JDysOPrjkmR zXylCw#`2H`lWP;r$FT0if?HH({{V9(q=zSjiWx?KqCpw+rVV;1vbSqMRfdt_(!V-+ z0q6Ds(a_q_H~DRAA*hxpYvQIxlS@2}CE7`D?Qqf_E`Lw^Z*m^rV=0CFW}_`U>p}jb z*5YZFJv;#6T30_R{{XA`bTHzw62}Rny&ST`9UW#)C|QPy>cW^KV8KH)PITFCZ}q*Z zSl9tq*Etkb`Fal_kDpX!8p{(|K3`|rf6MFh=xEzP;Av!%sz-=IlLMr(nr&BD!zeeO z%(g%6KF;mczfqY$naChid@D^xp!!tjK7jS&OlP|XAJ5C@UW5pW#T7A?G%!k;T#Ywo zs0736y{{eZ&$WpfJPz=kNM+OysISlV`t+?SIumgooaVH_{Hy+dQPlUInpkG4G|tg2 z8Av0MZsu6!SfrL9yf2B|6LK$Z0r#j7xq=21Ah|!9wK(IZ9G4Vo)ea6a0U7yY$kQA% zj+&}6iAtK}kU65IvP95?64cBVIGvN#DR^E`M;~5)9^Z%{*KSQ2YRCO3H0*Sjk>(7>z}Q>!?_}l}zF&XDd9T# zkxgGqQqUzeOGMPtuQEd%5{i=qvRR9Vm25{R^X(L#86Q;Qf#fS+R<1zv{{SKBN{YZq z86zL+{{TNu^JVGbmR6_=i#d_4O#{1XmqCiFN{vGD9Y0Hh&8_UV?-3Z=4%MgGivIwD zzssvdsyP%e?$$nhX-*Z#AG0+bRTuMX{$m5-pG;TvuEN}HPv5<-iKxd=EfkQ;lk5Gy zSMBRFv#Kc&RphB_7*gtOTKOOVNGjUwqc+bh*+D2VllZgfXmQ6h^y7|}?%Ra0le2Bl zTiF(p(;gC#MRgS-r^dLvLlB%kv zt=>sqs-k&|v14usz5TC7F%sx&FB*9tU**7X$3zAQEbUmZyH?`lv2xZTl@zH{pX)+QB@=j7jY|)KPr>M?CCmcSdWQCU`}}P>9(G2b$$~J zo()bAT-n8}7uTnN{{Wl)eX^oqa&6U1LFMRp*N^k`>1@&IxA6lH7J|Poo-5_n6_p^a zNal!WnT&NBm6gTpA}T`IkEr_E{{YkJ?$02!Z`VvQq2Ouh{{R=$rZ$$;ylvc~tHPf@ zKk{_-NnKKq)lAcUk0Xxvs;)#<32 zmUWRtpAX zrL{FOwD^X6^T$092qPri%zmavWQ-(2qf)UVr_%tRvppnVGRs9#LxD-At;oP+%jPSA zGAcsx)EH>QfFveK9hmB;7J8)^vR$Ae}}0XTWxM$z{ugY7hd5qyMuA%YUwE*G1Rpc`MkbUD11=SQqn08 zp*i4iIV6rfklf$c*lp&~q|mXcGD24{ivj z07XtS_LJMgbid_M{{RWV#ci5Bsog&|pB+_RKZ9;e2To9#q>3qGd1`!H)~FJhH1W=k zX;F+~MF6t^N3y#(H$Cz{3dvsAX(qbK9wdW~4QjPKYeS}>(zNKotYKNr{`Si%mBd*( zD?#PjO+XbMS^1sDy5p~U&#!QlTYF?|{1)HBV?W~AjK*SVG1RoT=gAE`AS^56^p9IN zA3^N!?ebejBa8)%4F3QTKDGYWSdwdwy$#jGgbD%&A1}|Pbu~=wpqC=-1-az@FU^I$kjrlx zY9pgWxn<%=ucbfKI#5M38{8Y|xBPGVdqQJEb4v8$-AhawkDpSNfdHNlK^Z~_3c(X@V|rp^?z)~oSEhNSy9lL7A#qasL1(uT7|tDAYgk zUvFBV{{T6S!yZrMrZ;DGbeL=cVR4%J0G?+5ky|MRCI+i#|w>{?W#+I z;4&m^HAn}s*3g$zMFPrK$2PK;#R&{i(Lpr9Uj94{JqJOJ(s)dg+eV5Ek%1xfr+rBu zWh?e|thRfzsq#2l%BnmiJ|l5L`y(He+_iMd(d{jlu=@`aQ@pWT8F0`DEB@{(1pE4? zQ77C;w1kHt0q7Ggvv{LS+DK7@P)2epC2u?`v%#RVCx@1d57Lsa%inA74;9 z2e-W?5X^MV4G!jubJ6dOwVI!LV7C=^CXTkANpqQ8jtg?`j2;3=YqJpGlQio^Ellc-{@J`8{gla`?sBT#Mzw7>z6 zL4N1UQe=B3ZRHLp8BeyVYcf%$OixDzDci?rN4#=2q>ztz=cWlr9ReE(3p_+_RVSP(KRPcg!y%+iEsqpMpvE$-6J2~3(*%@u-^f{&|E1&_iF zRnDFYK%fh1H!kz+J+;@kNpYJ;AyK+=o0oP}$%c;|fzR&z9@JX8XQbS9Otf^d!B16$ zXQiQC6IGcIsyvLBVJ_Z#cu`87WSVf)fEpZ%aVlwE6dW}Uj+WNjZQQp8QtHsf7$tx{ z9Fl<4Ql`HEejf`0#4$0Rf{dnDCmtYU>Z%0|O)#UU%Hrb@Qe+NViz$`I#wzS7}N%{{YRzXrUi9Yv;w07qJ-3nbYX8}2iK7tN5cimyH`O{s^o<= z)kb0zpkTxiUm(*}TJ=;(R|GGP%VRLqNiAgADdwc6o(idAjd1k|9KUYT#NJ8iWi0cw zOyQ29?^E5%Are9Wyb%hTlB#^bVkuhWgH2eia7u_RqK4zZX7OyLoz8%Y9raL?BKFh_ zDoC{m4KOe>8bh|R!}v{P*~&DdlD938$X8L&;hws_O17Y*p{H5Dh~%ndNQCy6OUB=+ z02ep6wYu98?csAZghbXxWeMUr>`}qliyk=uWr(cx86s8l;M z<}^SEQosP!Dx}a7fqHhO{uK>0YVcO&DCVV*)FhHi41iO|QD8@a2~n-7RH$xk&$I{p zRy%ir1c=v3r#gumbk~os1M}!ovkCs9NsT3n2UZ$L0FL6n(!mv>Ak!XQF+{Q%VW_Ep z3(%k0^+P)?D66ZL7GzM`<@?kjiMx2)>1%r<@ElxyM9k63jl!Xbk5dpDg!gJ%8XD6S z&qlIn5tyMGmQkJ~yGnyYTn!us1x0IKqOC*B6iZWaT`I*|vIkJqP|rxw!Q|A%U`-y7 zzfTwRx3*q(o)wBo19-3cnz7idq%NxbBQy#!RFP4ho@iDwOlg>wsY-lhTo$G(# zzTUZ3OqH2dorJAL0Uig2EpjF+AFe1B1ceI4;#6C;o1e+|OQS8#@xPcbf-nk@0bvX^ zACmAHp*0i-G_AC4ZD1l@BIW)dO#zll7ABR=Ni-Pig?${*PSdQYrlOvXrm8w(sU14y zRMgSY#-X(rF%VdPXXtHf`?ck?w)X;Sb|vM8IV1}}6ijOp4E#h;x0tSJp08ou`#g!0F-1etAYmy`g?xdHLdJ>g}GT?c@YqjX%~nndq@@2Mh2fQIUO;0v0Yic zq{2ZOBQq%YoFT@4q-jioe{V{?zlq05n#CBh0Ac3bx!QGioKn@*WAGGk*JI1Os9593 zN&7!~A+ zZ2Gmg(Ab}6)>AdTmBfg@;&xL_b#B06qMyZ8VfIR;2c1SmDbY2}wY=Amv$$*9h@!QY zxh3IX8C&L2*^NagIOm}cZ{_JIF@}n@zRMpD&8Cui*#$*-tKU%Mu$9syMIn+ZdYI{9 zMKh>n(s;SJ2fKaLkU+M#bXX4Bl9oN%t}2XuKp<1Pv?S1EbPwJ3>x--3skR<1<8Dk9 z2AK3%nCC!hC|OG}It>kY(;ao4HIr@m;evu1TFSSjk8?uuCxag)HgaX|&fQ3mYJDCja)6Y6BRM_7v>6|jZMFR*d$LIKyW7UDZQC`IR3foB zG~?khUzy1j=r;Z%LAJA5JVf$GF5ld7WO21E9IHJoJhe4wl-a6rJS>VLmI&CnMrDjO zhM+yia@<>N7v|n#9>VA}Y-$LNnS~{x97Qr{X;XrDjK!VK^|rydMy$KFnMo8=OR!WV z!qhc23`GF|npDvA&6>j1^~US_d9hDXH53xjRMXZ*^)#6Zx#;JDqa%zmM-$c4)6vxV z5#&T@=5PuNdqH<@yraIN$q~4NK&qOsm7PfO7aiUbvt-k_&;g!}w(Y{-oOTl;Tm?xS zGO`^n8mp;TA^kuA%G~^rDxU2EHtuF*`o+4r!YZQQXF`W7hH*U0jhkmnsh@X!BmSd^m@IV zR#>5ENMj;4O>~7IcV`6BpAqeEBTkW9qDea3V3VnJGE~V@40IS;4MgceNI3Yh)EiaB z92bPuR@NmX)FMV%WR9kqx=*o&SJsh+fH_x^0R2D$zxHJU*Ri*wORJiVCQHHtQHT^O zYPG4SXgMI0L4as_RaF)Gg)#=3w>rCWxlCZ{y{(xSGvTX|f_ zq-hd@7@~%B05}Vd$kw2FnhJ60qP9q=i$x5TZK9DSYLr0&RCpqYR8dh$AYZmxcq&MC zU1mvc1@#N2lI>uXmNOwmgpx;|m7^-xg(@;CYE3iIjjBm>1d<5FWFtvBis~mzxE0h{ zmjKWz(Bg-#@$pqvSHVdXf#j*Dlg!A!X+j`^hDMrc>RE*L>O;wql zLy8KN#lhuC9VMk)WYl`z4@eSLv_Tlrob9o*2|McIag!@HJ;@ zE;3fUMS3k8Vn+qEM31XOD^P$#c&hXb=#i*m3BX{r$rXQ#Cp7X?#wg>4fh$&yjsk)x z(sF7=RE=h5dZrToztV0%HwW3xrTkRz$Wb1;DWMsuudf>M;m6N`OqNl^j^;wwW-V^j zsVm#03{WmU9y|>?Sl}vRT58u;9xt_a@XrZrMFmYIPm(nkkOy+geLVX*x4BruG78d;H1B@x4Mk9FG;~JNUcGr zp%kS!c^{r@)7xdm<%EkR!fSvqRSilLLSCfTP@w{(1u9q)4_grb04s0irgw!#1LAkc z{PF(#pSZ?#S7v2po5#PRvMnCX-&08}fA8jD19&nm zO+7@E_0Z^NppudN=m`twSr9*#HY!L8S%UpX)cZS}h{t?*SxF|oRpW!x(OyVxqhjab z2ZyNirax~}q^wGIs99vEh2^LTB&!wHqgsN#DQ?lDE}%}L4(^X#@|4mHw<4o9wk z%ftPSu9{j!R~@>C<}2q;wVM8Wd6^q*{Ak;=E7Pt|b9RQ}pBd*a(|-(yZDFZv1ox{H=Sw7tLj1J0ag1QnzMnpoZD1nZ{`9$sEp^gnM_nrVDf z4F3QVnqfg&e}p$onQ8p9DuqZ|RShFX{v~Vrbm@?+Q#*6R6$9{j_EB{pH)7sER#sY( zUMI*OCMV`c+vU-o-xr4&B$f(r2&w&}APKVjFnYH8%HXUi1J|Y9)@|sRn2yepBa(NpoX#q zk5WnYsIhonGO|Q$OkomB3%au3+SLg=eND+Ku)_B%LJ08z9iXVDJqDjWRp_=^Su1ZI z9p{b{RBF(TMzsc@@C-{WaHJY^&m|1+76TDgQ9Ur8SFI^f#L`C%e9)LGDUCYJ#7h{| z#DQyj56x>U$7#0SNKk4rI3(#+cGL=$2DJviD*1F`mr*O-?hqorl?he&%SH~RZB*cJ zGtsK6a602lUQ%vY-O z-o>WWGP{``&N(zlafhq|C zxirs6cmyi7P{|tWD+IJ=NgYUOY9Ut<6}(=mc`S9<4L?wLA!xiXvLna(fTJKLm}UUb z@c38^@aRh~h{YsAboU3K2LVkh=Y}3tXe!DXqp4m-0t zJFT}-$=n2MqMKUS=O7uJ?+F0!vj4%WB0Cb!3NZ?rB{{Ua_@)YpaK+_&RBQxUH#P5ZoOsK7!)h zT;Ai`zr2u;%4j^r4r%4-pY>CvM$)vx)9pQCO|qfCNA(17II#!lM>h87?|56Z3Lmqp zt*V1lrl0Ehbv8Y<3V;?SC3pk@qo1h!o;|SpfM%#YUG23eVXk<2e=ejh+l{U0RUq8m zIQ;%w-IsG*f_%Lx(qxG0B03iyRpI+-)0B8vV+sl@04zR$uh!@42RHVS@0hh$rQQf+ zU0~`1*Q}!&5DCLWxAJluN)w5-()zMZlq*wFLP^89!d0?lThFkM zQ4Q5IkLS{9qmkv-gSQ@^>~z^CEXKNwfo*+O95>Y7!|Dk3uj(~rM<2JO?-J^(=?&*n zf64wz^x07U06>QS0D&RWI0oNN8{Uu^Piy{J{hd~xN`J%DQ&A?Rj4VNj(`z~PH|hM? z+#mM-)KrBnQ$f?hMJ9y^9<|}~C{M7gDaBX zXUp>HcigZh*0E(&1f4|Oi#rcd9{eF*Cba7EP8R_8f1CYZ=IQ#5S!|*7Ev;=OwQBnP zMZx-geU{xv8Nm3f*5YZKE(V%l`t+rynqNr_2!(zk2SpPJvlf;~S%4vgXrEKaZf+P00zHiGFCCFlO&AgBPCXXH+7_Sb zznGxuV@tLpLN!E${X=tLY(J&AU_ah{wAZ0O5wGR`9+-v)X-LHz?eZRdJO2OyiNI43 z1oAY4#-GbK7C+E_ebe`a1xY9NALY`)W_I9Eg?;6 zKQ5lv3r^mz8v<=`+E<_HYaRvtmz&uu#PwgMgmJI!>P&c8Y%B=p=q+!r`_Hys?sjT} zkGHRVJU>6>{%)ow8~{liY4nr*e;Z<`xlACe`Rf#{#s1+C$QFcvS0z)eUamf1K`bqx)dG`8l zMnga}{Qm&ddh~F%y36oFk;Ngn%EvM!LbB$U_PJm9?YV;R-mpa{QBI{q-qXp zUXl{y6eC9WAy}2vgdI<9Kx(-mN)KyEp#)Z^)8*^?dTuinS!LD31P-IaiHyh=ajr4Q z3V*31mipWe$Gz*VX;8zYth9^5K-Dc@mzVjvQqW-O{A|Q(z0pCjBFZhrzJmV%?0>Je z+1phC>Gq9W2^eCOkfQo;>A%8%HyYy7=>r9zOS z1N~e&P*PzO8$4$B8kv1g&VK{wL$NWdhBD{WI;jddQUL9&p{{RZF@8;RR z6t>q!;;YeeUm(6gVR4dBY6eQ4wfNb!*D;zA#HzNYo3!_pA(N6CT4KLd;ceUfKP_Ed zNTXBR+S)NEDEG3R#z&@m{+7}xNdEwR&OLH&lC87?4Mk*d&iJS?4I(Ag_*grKr42Nm ztFPc^Sg%|BT64ViSBZ86Fh87=B$FTnZFUC

    H0I2mH8>?&Uw7iE=X(cR9oRz7e^Eeb0@)-1?fUU~Zw&AR*hD8*y zVX`#2rJZRcq^G2#c7jT+GONc8K$z-{zPcAsBFEh&f>-dZN{5l9p-_Gx#+pGMZCrF^ z^$}<=y?izrcmtjb{LW98rYo%0eFAG3PHUI-ei_IS5-SZu3x#aba`%??bGeErHOD=)5y`)8?_}8XaL&gz;W(b<>{o0nYQ+|BgA{i@M>ynri0bap-RwkHO5|4 zhImYBNRdM`c~=<&*Zp2&tv5bP_2e6q;D5)wc4q>xRPJ8l=w0PUU0F#l-&JiGH*R)3 zo_8YA8CEK-QY|p@dgX*GTmxVZLZg-U*&SpCOKD?DkMvls;8VciLAc9T__0Bfi^*lX z<@;xWX!1#@41!P(4fSxLp)_3LnH?H>JbKgBM;tLf+f&d{My@09h}Do7uM=DLio|Sr zCf|=}wkNg_MJnnQs)0<=8KW5T6ij|ctvp@dQfop*2bbGV$cp^GXv?*w6tPBN1*4u? zq;|ile(Vti(3@W1-;-hPL56Uht-PMW61kg}Z_G8F@gP|90 zLbUZ&6;jJCy131CMwLlF%60vu5d}5|D1p`W^q*@Xcp5<2)VSe{WBeX}Z&eB?QF5SC zr_=58{{Rm{mfxEpOI~z5jY82=B`gmj_@t?*ZA^~$BqAzY@xeC#03T*?#}Zvc9h#_( zQTB{dzi&<4KZpoLVM=kPX`VIyc|R(ig@mbu%J5XAjYSMm*3D34u@a*d@dNn`N7MX$ zt}(hQ2uJBF3fGN1=sf=b)H_mrs+5bd`9?e4|8aDaAylp`ofPGeK8I zkyFwlBYM12w9H%8Z_l>UCGiY#l5SZIOJPcqE1zB-U22*|Y5vdq9D0jWTlZ9XNvSGY z2dT+Z(drcDHX@x8IT3+3(K%9}^I^}m7Xc*KZnY7JKx4p+pM-gzUYnX|;_fxleqZYH zra$8Phc!f^wn9uWy)1FXD>%4N3JB~#Hqy7}^X&x0q%p#}su1b^m#u%6I?~FsRH-1Y zDNkS9!=&~@?Veh?w2|VeY1L(w(D`04s?oPXn)36Y^W0^eEe=7Z>KW|#` z9SPt~Gf$sfk?HAZ9bLTQlg&KQv9m=UfgqMGS2CR}Jv@DF?G4Kza~zcdWz>Lh5*{`3 z8T)!w8%-hrFiL_e`BNu{A3yRQfPVM+8?b&gb#~+Ke#fZ`wzmG<%+bB}J6do+>TH%(i!nt|@QC!dfR1YpRsWlH#5f!zk zg$zq8`n@a}k#!OQDg&GS57XJ4k+Mx1oggxwJa9NZhy3H$qIPCtG@VVVgYv2W00uh8 zPpG?kn@SVJOjcE2p_29^Py5~d`Zafb5&R(Wtq1M>hv!bOH3EzcN7sS*eZ5VBXkvrQ z8>75QG*W>Wk>V)2)^}mbsV!np^!Bx!Mykl+q)O_}Mlt(HU0DuD!TE#*do@dEN^u14z$DdMZT(nO;MA9@9RVkICmrZU!yE9mhS)rT_I=+i< zZAU94RX+)D_RMkV)=H04+~#38(;Olmw7IeQ(YDxWALn$4}+k44bk_2s=N#b6EO% zTK&zFrh;rf(g>yAi)qr;2`8jQo<{~&Ej+3LxZndFo0F%#oA<`>Q6C4wR@Au30|Opj zSm}81cB3FyYm29?Bp_51Pzc}$?CRt3lGoNqv(`@|Forn1R@9$HE}>89R3SjINHdfe0k4RAUWFyX^`h_FNkU#*yIC!$+v%uq7yW@_@Xr%2;ol-o$LG1pv-Q}XF&OEDpAMb&}-0B(M^ zKhoaF?js-?(uDN2Wk~_iT8@+u%*M^+q-kWD&Nq*LeAu_^qhWBE6= z{{Y*MdMLH-rmyvUy7sZnE6y2Ac~GEi*RpoVIimR)26q9|MPJ+F=r8R4`_38i%a zo&!+;RQU>#*35{Z%U4PvWA-Q{)7OFfdeKwlx5>V#?0(wa{nNfF_dP_JJ+HevKWXj^ zRRgZxGGMnoH}G6eZx6izrk8EwGcr^E01=~#3TnE!==H#|Q$DX_J4buVdsee$HgdB9 z{0gEMQl`I&RZtxKT?B6?w}EB5oH0g?nM#1fm0${mtw|N(=R?&YZvOzelD8RERVLoc zY}&JxtNtn*BSTqFw?EQ+GMXlR=J7lwI$gyz3Ng(!6IuW%UNxYo1df7z!YJbGUFVnI)cb>A@0>*S zG0@AGHPcW~ZJc&uwu`d2HC95lo}$^e+4K{>Ga8Q6RF7E~i2mG{S!^WmRmnhrpFRWB z@B`*a^!fD7t-MJ*miI)xbd4$)yE_4d6(#7*K+>U3K?Kk!Bf2v9`8K9@nezE9orkEU z&+P51w(Fy%$(^6q`;RY*+?2Te(E&-a^mSS4+?6z6#3EOzaKCPhV+TsfJQjq;&K7X0 z2axU*&S{zfLBhD{i#azdeeof%Ln17aJcY#zXsZJsVXZYWB#;i8u^@m09?aaheBMth zj?2#U8-j;r*A2sxr^nAsX*YEqBN2wJ#$#}}MHDp{O8Db3MJ-7hoo9Em`bllWev8Ma z^%N53q|nf1MGm3-C(Nw}uR=YF(sWea5sODP(u7y=)!0>y8G)kE4JSw)tPLo1^nk0R z+O#Xy`2PUmdHSr5-r3dpjqsFGy-f->LZD5wX(o;0AHgFuf4yB4QZbS#5o6OW*V+cT zfhLaLByB<^3^Wj+f&dk*0K*ah^2KN>Zp(IUZ|)^{BWv4`E!$d_Zqrtv0;Ce5NiT{P z)7?g@n%a7bUG130P*USy#-=uoDX8(X%SLD2-%aMuas*<`0R?<|O)|bH?jKOpZ-1}lf8Hz2sP{{?% zYVtgoqx?;z5mH*ELBP@h&zO=sX;SKI>q8W`c9OJl#~m>l3ZWUeE{bbq0GgU(u6wf} zwfP)nD^$Hr9UUblEM7-^m>DE%vweNnc9dRjFxz;Q zvVzTG(w`+R}S~ikC7wG=1c`QuZK8O#?Y^>GT(-B7mZiKl*1&Pbq@m7gM@p_t z$sG4m=HfJ>M!$fv>0T5yI=JHl<>*hR03KhP3L4VuS`jw`rtII8GK}h*#iz7)gJf0kOw3@5H z0>)Zl719K-w?E^lcLYvntW1R$zREX;l^ZDH*3ua?1@|im4n_2CFe7nj&kZ4I%MDvTI^& zONJzIVPo_l1ACd$@(`sXf_X0s0EAXF03}bQSXQ6Xs5$8hB$nt|i%KK50;FZ%EJZ%b ze}jn3>LoQ9Y#g%3Q5FswsUxQsS1?0P!m_4Gm`0vNig~raAEfEH{5x)p`@MvdRd!{R zfuDpZ48_d=__+O)=`G86JAKkd$lIeJEyQYO8WaIjLR3(E^U#russ0~`q^ZdH>u52X zvXce5F`%fHr)fP*Iea8^5J;!O98^xqSlDS>+zWdcLhZF#i02+9nr^1fWKmWy31pcH zAUpt-SZ25*(DV+xg>LsJhSyAYGgvhC@^A}u6vaNb6{+n&aCn?_sm0LJ=PD_2N{Qm1 zAyKV?MCz5JfTA7|j3!w);LG0eyR%nLYqq7vQ0h%-lNvSyF)Xc~5s;mS=RLNbJ5!F%F%|h}D z9F0-jQb8d)G_6e>3yO|KlHf=$$GhCEk=tDsR+2&5+A3DQAQ=@ETBsi}UOYNaxBYd# z>_&kW-&J*40M{D*IAKcEtG9|l6snwj`UN*LQzUgvp&kJoum(XLodVOu(o#m+nkf9y zMj46cTicVwRm_oFLS<=Lnj)sO^NVY=E%tTjIBiYBbAr%aSG$wd`vW8l*4j zLG6xP-(tJ^drj5P*Ttwn$2x(aI*Ia5BDJai087y(^|tN%F5`4I^aj%J!+GN28n7gi zfDuQKX~4qJkSg@)D_uzr86w@W;+CrsJyg^?yKAhvjtL>ENoAIV z`rr~bj^r<~1?*o$e|XIU&9gPYH#WcpRGSJVMirf|ABQr&inqftohL$l?jRtue?6VX>V_cdm=lGkO;jmIT+|YXaz+{?C+;!kd32z5CpwTmtkFeDBYr)>4&`D+qN%1H5(BneGAS5wl*E=6Ohd83V%K_fhM5`8Xj5Fbx%TtggM zBy{m15fwTJa21HDG|4msoFBqCj*Km3I;M`;i0%yFv1KUCM0HT4)KZ2u{{WnX@#-O5 zg*r`2Xe(f=jtWTX7N%9F1{#mDnu?Kwu8|z{<)6mFG2t4T{?nq#8?<)n=1>-(kO!8P zso<S??Tw z#4F1!Mn1MGBB3CHfs4e1+{_#sDEd7)V&+f*c$kyrsg6;A@(608xo$o{^qK|WjYDqe z5H3%L9W=;=>sDz7mOsIyij&7KIa%v)uuRar($vFIF?kG&1T?Uu)l_JJ@iR{=xncAx zq#t*VZxy1~MVM9FHK0|>kDjKjc;cKorQr*0b1Y$mYK27wH5OtO$^Hd+DPf9s6R40aRa|OCOw!C!q*AJoS~w;I zOLiyJ*7hNdXSRxxkU`EUe=ZpHu9R+lTl9|O)A-Hs4}z&HCIyC(?tZa z8LE&;7zXhRGM#0QvTfeV+WiB-StX6NBMcD0njK!hKbazx=ts)GQL~1M_eqLHBSk75 z8l9z1F`q9*VnTv;kN#Ev0L%j=-#bd5syizvG9Aa&*jd`4Y9n8|?2Wla6msLYymLzF zQ~Y}zuO&TvN=iyf$zT|Od&`@HU0X}HU1>Xlkh+coV0Zb^Sp2X-9cy-3Z7$-PF-@(( z(gCd~O;GUfTH_~D(AK7lbeOHr21Yts<51?2W|E~AR0#^Iz$DXA4zJsjOIdj!o-gd~ z<}!o^rA7@u$b9&9xGv1*kk){XCY1cV{{SyKdh{Rf?3apzQ$#AMB&vfaS55;(EHNaO zM1;sx{^Ji<^dI6qlx|F8PZ4Y3*X<;IpUd;;#wSO(3WQNjO??2ZbI1JsYP06Y)SnE+vJ|_&<$X5f@SE_jeDCy9}<&7neQx;!Z=q{`!O+>Ge?QTu&>_{Z6 zYOw|lLMlN36Hh$xq51yYSnGL+eI=CBjtyx_8fJs0dat$$?K}E}GAD`3MI@e8DxL|O z%N%ZwIW7gi9Q!P~i@|d8I2Rxh0YK%q|Y8Xo#(7{ONYN%3bw-praBPwZG#Ia~yDnJ(Z zd)Cs7rlL7sC_y2C0ZA;njaXFV2P~vu9FfvkM~gIaz~Hi^(`ghcS;mzlDAK?R)S*_X z)Ilb_Jbw?v$>}Mij3MQ_rIDcevVeaJjpP9nqY(hK>Ph$w~$xbrPATolG%8 zdJZJ}n!3YJK99VcAYxh3?p~-zB`{J61N^Fc9Y^}y@O_5oxxKr-333uW!ds95Q^G+B zfK`08K9Wxg8q$>LVxA4Xw~ZBknPIMyI4wh0{i@dk(w#=FhsLmmb|e*y#>hiQIsmnl zvK9(MM=}e2YzRM}Wt)UZ(8ni^?CQaE6{Q-3#9G&auoUvmdVbnXY}!Df%|YU)D8uas z_Ku_mSgF#qOs!HXS}AE{h>O5ujiZ>zZmy0CE1={BzvtSsF^xs-M~oXuQaGy&6UP+6 zP)`m$GC`74Y*dIeR4_k^rlOod7$ER9`E=^qUai_61WP3{NfOaU;)+P*RWe7SLMA$u zTUYfW*0J_&1WKk~4B*?f0*})n#}8WI*T@Qa^o44+;7O^OT!LJUV2%c(9+dsPeOdni z;WE9oMcv=Y%b>B*!ywG`PU-Bvkj_7aB8IAcy}Bwl78a_U0yReaS9DOTu>k8rIkm|q z;dmC}2_j?R8)%T!Q@SDHwFjj|N87+~2NS{KSw%etnmNg-6*Z^N1b>IC=Qx&IS|)F; zm?*adjyU=oarC(NudU4mDmeYWx1v#It}38Y=4t*>*Dv9YSM;)<>894_>%sb4-A(xz z=}KFwifW}iu}-kIEPyYj%ngmWwT-@m-o^Vj3iaUtJP-2ex_m~lZxzqvj(Pn3f3LL> z?g4%xe`id~Y2t9>)IZ@UK_V~f$wSBc&$s@yeSe?(J$u7{pIE%XxefZ9m^00DpcBzy3dPN2CsqP)Ua5P?^G>ZerJP)To zP6+nzi&69Hq7bfGeERL_l?Na(H?_aR`u#tzzj&Q&sT_KWU{)lMf2Ryr{ooI;w-L=T z)p~E5kO0S=zUkuum3YycTj|01t ziXM_xaiW__H4Blz>o_1!JcV^?rSM1-N}CwH$xg>7>{)sRrPyTkvLxEA`{o-BXX_S*^~mi#<=_L2Y~jC{!ITEstH z)tDd2C5PhdZS@5E--?F=g*vm8&`D~@dU~Zr1x~P46gyo0f1n@Q7AM(c%GC`@`D3Lv z@}ri+;!7|wc{wE@M; z8-I=e0N#!Lx8ae~!NaIvY7bogV zJi3z=5K_z|2VJ#UPd55kSdVSJ!3$Dr{;#*CbUb>Pw11Hp1pR$C`t$kY+IPBYVAJjC zI>c4W<3HukSr&k~9+E773-!PCvA5&f4RXgNhx)&7N@IU5A+`BZb8oz_Vwn1rl7Cw9dy)1ew+`$`hUHT zeiM%|)l3XL$57>>B=WYs&Clok=Kla+ZY{>6KutPetqnZu)Cp(}thc!5=y~IddsZh? zScLBJ7S zy+Sk6ey>a8(+6s&B~rhBI?#3OO6Gu zeVp6wVMx>t2l~AK0OI;dA{eL%t!vYKcovO|S%JU%MUUd({y*Lix8=Q7V#Ez6=hl{4 z7vRTF^jM={3KzLQsBvI8xgXGfy!%Hb^2WrdZUccGKB7tC8i)<6k4}(cUN%xigOSRq z;19uHsJFCJ-}s`7P<~`|*tKzzK|M;!RMTy24u5uKTrMwcVKSSBvE^Mc{k9T{TGB~8 z0V={{8o1Vfr?mD$UDI`gX+!$+O&mk*l7nB^waqiruv$FQ3XnUgo*$pezwB2%eAYkV zK>haLC_Z?6Yxw)OW|prP)4gM~Fgau(nd*B-zqe!dUjG2AZ2{%xmp6|=#-&(5BHqND z<09K_Fho+(s5&+}!{D-HI;nEWY*4x9o@>@@&I?`C5efKW$$80)R zt3ysBqTC{)I_lcmh(pT_Jq`+zuBK~xq7e)IN3uQFc%PRx**AFDHs-FMP3iRv;bGPN z9c6V>G^ps_8%CN$jx9RhAkzYw10K9Q$J^HPTPt8-dc&^z_p5f@EOeW9uC`X(*;q)U zI*?Lr%vC-#F@8vu{6Wb)xNv_5*$*l0qhr}%+g7@f0ebviBNEP7`Icf&+7CiUjHa0I zV^yYoeE9soKk@{hC-AjZe;WQk($QsS!qm&u8~*^qmZhirii$gJypQfigb>n!V4(5! z_ayS2%bsf6V?kGYrBKI;mZ%Otq^68LY58>2<4u%}5CT9!t^uZNOmW6K)Efbnr0o8> zs_Q+!yK_6EACm4~x6EyPO)46Urry~}HqMVBgsVol##2+tMysV29XDow23>c2nSEK zzjC#mU75uUW}j^@zbOi8$7$itq#Oa>K{{Yk3 zwVEI*ufdcN@(0NMgQQW;k~74r!K!P+hmpqt{;y7#bhS0>kNecpO+GeRDJjA(x5&+A zhGjbKe`(G?EY5`#;rApVG0N zBjD9n!IsIGylTtgQ%>SkOleY-7W-S!BTuhV7U2$e`Y#rJCu}#P<-?J zx{RU3zNn*;p(+f>8I(2T*2^!X_=r>=l1TTz2({fMJ%ChFzny;1Pw;i=p=m;Z!?f2m z^B?SeoH|N|t?^`5u8|q5<&lj~nOMydv1F1%e@H+yfG@%J%DJ9JnXwoIDDwie`#ROM zZxurjNj3Aw=j;A&&!n|oO<&&$MNkn|!n8E>s)^*JXtn97Gm~#oZ^z@=MZi>$&Q$0m z3jY8<@DYL2b3Mv8>7`+yKcAT6_J5zIm#vcu#nol~n9&nckOKiFt_dGQ z?W>&&GfIa93Lh%z94YDcaq09DEJ*IZsOFy`k_AO;LI;&kU1c)#@eGAqw1MVXB52SC zP>d;HOK7+vLF!ZVx3WvsX%kzrsT>KfpGJ_;4H(sFOntvUL-zHkhx5w$eP6yiQkUa4 z*vT0-e_T{kWpm;wgo{_ZDxhNVP9r5GdJ1^}Al}8T`1V)3-NUzrv$hqMmeP->`-VvWbmNsiYT$r$dK20nlTpuFkf1LPNo3g=sEuY zA7$3C#?qwjO+lyHK7T%zT;52G*1AD0>EwD)tjl)N&2X*(DhM%^DiAN!x2u!=Kc};4 zgHGMeL{-PH`MM}*+Jc}`qxRR0dXX+e?q+sni6?4kAXbblYRL%USpm6nqmyIwx3ynT z#xDQ>4FwO_5A*ctl(g_;02VO^V?&cu^Yr}Mv6*Ug6oGHPD3h~!<`K?YUB~e2kY+B%q^W=`?m%PLV<-! zkPSU+U)kl>jf-9*TThL(K@NBs8|O@c^RLT?OAV{Fa{I?Gjlu2hzqmKX>B!ZkJUCsy zkF3kqef~mIO-}%&rAb{()c|q^kXzkvF6`|W>Mq+^;&hsjNb??9{IQI5ichO0qqWlw zzMkB7I;{yR0IN_CDaWm^zn5?PCI_^;QiBKD-#2o#-7&MPDVDbz)!2arZvM-~Af&9u zoa3NqHts%sEV7_2GK0>RxCF|(p8Y3*WgpY+L}p6Sqz56_%oE0qL-MCpw~FH9Q%vD4 zc!d@54hSUIv~eSeH3K7uTdj3(M)mJW?Cf5^>OG%{*xOeTM@L0TkHb*X)1!)5Rwtdz zA%DtdDXE_1xg?tt?m*i1&AVq%=mX9GsXv$aeCy}ZsjnVEp=dPVf2zD`=g@%;(RSik zgqm12$}@U_{d&)@SSQ(|?lB=@A8HXmG5$|3k*>8PPr^9*)BOJcK9tzqwqdZ+K)=&S zw>2vFypT#}rxKToZ_v_@&u>ySFZB&CgrJd$r=^u77#+lnYF)95t* zeH5RZy^B9od_egZzTlg~Ta4=M!H>tws78rfxT8!oOXp;G;Ap<}rPfrcqLX85dpg^m z1-nV)QqjW;%0M6!;YQ2=srZWp1LsQPq!(c$ghK7xDGJTyM_{I)`T|ewr&pbf-GFX=6eMAIzUYnpdDQNhRdcFJjxpt!QdVG^jW|&()6sj2X(r~~xrlRHiYh&wvNuQfYjo~virk)K1GupXkf4wIxrh)_$eCIy32Ekf znIv#(VwIHKTITIEb*u{Hs#K_;4UtehxcZMGIzee~b8g>LJ4NG%C0eX>P|y=mQ$Rr< z>5=k4s4dtzt;xK*OEr~RRmpBDzQv*36K`zg1x7n&$qpDLGF9oGj+zR5RSr(PBy`fN z#Gh>xaq4EVVlpN=(F(IV>D5{Qqcti#$*2I*qsa7g8Ilxx-Nxz@43^R+n18hl@=$=T zNC2WBW2CUuYuXN|{hONFGH%&gf|@K&+0JbIwo`56F?l*HrgjwD*j#-c9<#7vj#r9? zqjTmk(q-x?rYy@e_Ega#u~U6;v6PBXUUG%IYe7N?s3V1IllBu@j+xlD>1DCi4yeR4 zBxJY)#MP)UiIm}nl|mE>Rhd9t572*+$bH^NCyLrs5#u4u>|8L?r)9XA%uV635r*OM7S51yS_4lk*M>SXi6LmB zy}9uLj_H+MNdhE|f@*4mr&f(rqhP9n#MhwGn;AA{nQ>GSQqa9#W|p2>T#i7aXsM(S z(oATjSe9yf7~SNaW2qKbweD^0G*;d+7~xYNeKa{W0Du9d03ZWXN{amYJ(BG#C;ID< z(yVsmhC~#oa#(Ar(p-S5xa}1*6zRHLm++XTiYh!kWkyPw@zQ@AiX5v@LqoYLDq)_0 zO6e{ZsYW><6DcatNaIKhES6^`Eiyi*41O{spjK>9P^JbAO5+Q|qYG$F*1c^i!YIJR z3}lyzB60x|RFX);4~C|vrtR8kVyY8VjEr?vYSqxuOG{3f8hU)Aiu&4#svw8MH61|7 zOZM(ROh^>{1(NP>XB8IiW_!{}(uqbu=B~u)rkyNka5R7`)B6J4v_2Gm5rHU$!#9S; zF`_W4#-WFXy2qO_VaF_$6Vw{v6-`9TT^%lJjp(I=%O)}?=)Ts1J$4bzJ!~f0haijl zu@c-}$6_QA+z96Fa9G1Yd?h4cysMQyr#J_rIAMfaYlRfrnIUlDs3axzNNL0>9MI#- zsCBrkwmdy7vMV;&dMIR)1`SC_nTQ&+%`+(VUZK?w*VV!Hfp+WoAyo{CJ&cOFssgIZ zABbJOMxX@;1NokmTHo#Wbe#bL_&EWE9n3AFgZ-!^e6!P3v}&|bPgdd<0!qjjL|N() z^(c9WKeUogp(41q)croGXR}tb7uN)dqhltjd{y%}qJq>4I8#4jk%S*}El-xJX#`Lz(4y5z_Us9HW--bX1qYS`^TlJe+^!6p zgE&cLb`EQ#Dy15zM-o9If}i2*PjzPtC9(~A6=z&e`X5fRXVRvks)9xG z!Q{eFH61g?#$!ngDikV(=g1Z1ENlqp`g^AL9LDC_RdNg3u7#yrNU5Py=fs@(bl%d? z#RRC@TTRo4V0(3w_W5A|^6DK_u}@mhG;IwnH7z=b!m^(Ti9}8m-0P~4hc@EwPt)CQ z=Cysr=efnCaiG!x;6@D(n>KOkPfDPUNNs{d!KZl}KRTL^u|_kTQ;$+;)K6ZKwK`8M z(nCB@MB!->TAgN{s-z4Zd@B+b0Pt_^RicO7%8;^6BO|RVpj8!^xjCxQa6J8bV&Isq zORJPcR#L=wnl%?l;gU!Mk4~K{rlWCDSI-{iYPtL+mbW!m0^;#l>DKxwpv2PDq=?4B687hhVmo`qj%2&J zaBj@kGD(A_q>&79r3Go>>ISEX6(2Co)r`qIL19+3Q*EJZLXe|)vdE{4G_0jqW~Yui z%Zgg;&Mt^RDjK^JU6^@DY0Vu*CmVzief(80jWq&+DQAsZ_ER;9=i8fV-Cm?^sC`Yn z)X@gj+4?Zl$x)VC5~^uhwsLxI{Mzle(iwCMTZo|p3$106ZC)8u@c4z1h~ji$W2Gi_ zu~FgbBF1B;El;^<>1TqHqEx4%$5qEj%RzMgQ&vn7RYlok@|Ly5)$an*$8VC~Z$=uY zK`E^V5I|Z~_f%t!PvlLt3-{boOX-%6WbCZ!3p|Ki7tfLkl1>Wvbl`deGrHnIj)_`Y ziEC=9QY$Q#A8!Rof{r%|3#_70>KE$Px%_*Gclks%Uq(-fa_&Yvky?s9K?ff?ROhKj zYSSZqWP~hB60tlNQ!b|>xTQ3j@EkpQ*b}6>^mX4;ZEdevj}-LFgr<^uV^15URZd2e zPG$2D5(P_SDkq&;OAxV;EKdLnyz18!*1DsbB>_psaZ+jPkDss12_47PB$?Jew+B#~4 z$<;elDP2mC&1N?S!f5TFo!0wk{UT$`1*nR^aXtGr`NZ-RAaF&Xe3OP#7 znk-&I$B@I@E4xVoOZ&#mm}2da!az!&hPB`TA@QA6^66pOWR!S&ZR~$g@+-t8K*lvv zJV3RnW^q(C;ItlHIbmU{sH3FDY^<##;vn*1)eB6h!=Ow&15?=E)ypi1nks+Sj zUY`L1%A|mCBe^1g8sJx~xstS%kkRJ$^mqxSS_*{CZRal>^!OMmqK;Uh60|YJSQcaoqQ{SMpm4u zDo!d_xfjxu29>X6)~h*FxHB0!>#+GLF%=bA%1Qw3KoY-5>IFVNCoxpgRnbb(Lt9c- zC8uU5=&VJ-x3^(=66v=o9UpI#!(!^S3V@wJjtofc)lM8JKrIE3b73^sK&fYO^owh{8UvhNfCOM zBzRyq`jPCdB>m@gEV2ADRg^FzQjh{u6bw~r-fE|XNa)qsHjSH zPc~g-2*=`laIaD*B&MjX$JHPdw5XER*VMd78aTq#K}|~J_AFC})~S`-oN%Pf;Z( z@}jBpR8~^cLL)2bU0$!xwTAI#nky+9vIzAOa2AeMht91`A1^`CLv1T%6!$jhLJ3N! z8cwZB8wc>JGd`elX^$?SahV0CSxr?yFeOP5NMaRJ`PzRo)4Iw-7$h%ifo?sT*-N2V zH})#WyNIbgJ$U|I72etziii{SN@Q0`>C>bzrZoyzJuCuavI#9jlK5#+W_2;@ik3MY zq?T5wr?9brx72V&zpu6ONer=gh!28J4*`Rme2+oG*OrX1qUxNL2DxGd01DsIr`ukW zyI-)kk5un%t=au+o2kX`4W*KcBZ{tqLj+Stpwre-RJ1HS_}s+<7%Cww6UNPNt^JVS zE!4lk_g~IQcgx#60MANw~xf% zm)l$9&sptl?X#+(#pPZKJ-gW322%FMrz8;nV=N&{Qi9?+T@nzb}n?J zfDDcV)|IEB9=v!~oodDW-t(!R`N5OK(#&5Ov-Id=eH@%IQepNs;#}!UI*~Fa={V+)5IQb1sGn{o@b45Bq z8dCsR(ZJB57Hs_(X@u z9@(|vQ50c2tHzqOQ`aVy9d?kbz`FFpvIcZ{1kwjE zkR5@A4A3vCz_rkk{XzFjNET=anng;Qf8lYyK%l0s11633 z4F3QwpD5yu=8icW%@LO#A5}}#FoBjzlIChOhH2xCzM@zq2rQu34`z0d2LTdZ-9VbL zYK)u}3dDS!O)*2KfnCguv6exmO)^uoDAXvlqtq!s&~+z`DtdIr(#=pd>Q%`Elr?!w z)>UcNNjwmobb6$C(imh)QsFM%Fj0UWMIc+*jis!!Ph}Iy57U>HaZOYL8k!9?(odd} z0jbsvPe^ZPiW7L&;l@vyjFuDy?Eb76aK0p5V6Vo;(Gb%5gWuIg0AZH z@;rP3&Sr=L$}Oy)&$1~`*UxXb%%or3O&DfsEN`l+%sjya3a}U^qsyT(I$Nx;M&rVX z9GumYg8+V1H30cj%dC-VhAC-l5SZtd4?Ob5CzhJB8Kn&h%Y9VFrV>jLc4DA?FYU## zp570o+(Q6dc#M0zDZ@YM5@c(l253_S^zCvw}94^xIh}O1xoYqMcNw z3FG!26&-F=c;SdEf!U?2jZ`yZvb1sR z9qzQn4~0I`vlEJPP-&1<-};|q9MuG98hcUIis-(RH+EO6&C?eD7yVrm0O$p3$r7V)h4H-C}3R! zP!;)(xSCskOE=Q$EN#K#pU=MrVTCyA<|wO8D_^j6jp&0dokt^%Ep7<^03V?C+TCbk z8l;Y?rXWZPwfwqlmWggvL0fV7{{VRYxBmbiYP@iAE7Av9LlOg0zK5tXP=yvBka;B7 ze~;IYKR(?OusP{t#TubB;191&^HQ?h6&(E<-& z?SJX?AL|}Tx3~O%msMCuH9R_w@mj$8k30Z)xA^@%zXXNY(t{mpKonGQ>LiP&k}g+K z7ykecYZF(Q2d2Jfi0QsUpc7+$3H*{xu74bReP2&)5Bj{iXy>NsT)~SX}Gxh zeQk67K9@eyGXT`Z2UkaE$tlK^>RfL+u~4!Vaz38DCy%K&;FJFG?yf^pg-80nT{n|b zc=YoEJ@kS|Z>T)_xVgQ}hx*p`Up%9M^#1@aN@9e#s5!4r(b7sSZ6FmF0I|7IZf-ue z{Ch7mE>|_`&1~gJBy{Z*Ep__ag+JnKKd0l{EbCL!n9!mG^Bp)xOcjiZIZ{Q9?0*;f zk8HfE*!1f{-J^2xX$(oNetltzF{qndX)C0EjrqU$4`@-FP^mPpuTG9VO^TmaI!ONj z7Ce8kAYa|5oG21z+^?7m5XS|9a)Gu4_bd_tW# ztpl$mKo2c^!~L+g`_cB` zkw~c^9=)EhNkFHSHb0yCx%}`*7dQU^SbMt47t9`;X!UX9UZKfGbud-n5HD}Z;BkNW zpKb|9%D-<>0^LH=Lt^#WXaumpWUiYixf%<(ttrtL0>OYrFTtZz#dRHF3MSM(P5#vB_eiSY3{`P&Vj`T3&`+83l zJ}4yBNHpsY+4%h-bpC7xulJGd(QTo~v~y)(&1KrJGe;b<6X8$p^&LYq zfZm_!_4aql5xl#N*6k1blVf2ts(kg95I_bnOws^8Ls!UIrDz~|fTICHo;}nD%AI_= zcF$qde2e~TtJ!nEo(o+wW0pZKq!5MiEkXYPU@z|XAxv?AHF#-4wWVqHaIXMAE|I{r z)*t&cP_;gE^#p&P{MR@9lRhmqT^8l}k-hPB(Myo6&g{;Wp?J=kd}LE4HtOE7i5^uI z89C9ZX(t0y)0qfis>UwAy*$Ir4H^J8+asaISQ~&f05AvX3Kl+6RVj+}D%#PZwk0abY*sA5Bo2+-8HbN>mOtohnQG%?Bu+qjjdbLBUFn^);A?3SW=Y?LA#k7~hVXe~|wGtJAG4KbIsse;>aozlB%T=Jw88zcV>(4sIZc zo{z7w^(KdJW4A05q!L9PRx*{^P&F(vMyLyFxDRtJy{@bH?480%1*N!VT4_{g=SeHphjJMa7&Wa{OURxZeAfS(u}=We8=oL6hAtU zdMtR@<%UXVmq?9PbV8O<3{eo!M5CQoEMvbPruH|tv5wVs5Sf-nG=G*l30z0v#wBtD zO;cZ&4j<>}M2Qwy%*>jhl2wn>Cbv-}B3tRQ>NYxT53xW&aJ991G750?!1KqhYsWR{ zz8?ioi5^hoeElm?{JL6F%M#MmMv|A3msF6T0x;_>D5g|TDNR~m)NDSydtC#zmNW`N zoL03XJbb*r!PdxSY+zHTye(x)Lmf1XCi`hzNbow7OC(W=S`R60O;a;)H~}4v#pZ6Mk`L1G0xG!1z@O^5Ai09qmYv^k~2~sQl*L**(^S~t@!q9 zGZ~&nnLv#UKxVqC>IaaeEB>nV)acT}QnWwpgG%{SeqLQZ)3r5AV_cZ^iE8C!H#+H& zSR^d^K_O&)K-k>-dS;8qDpHE_C0|y+mr3D3iS;8VR-H894M@)%(}(Lg1E+NJTzi4A;x{d3CjtAmRrE zw;Gf7{@?R`og%YYIST#7G^lE5o*aIN$sSsk2`sBJ1UDi%KEF^w{+`MhM#-W^DDh;9 zS5 zQ`O{=C0ulIMpS@gmDK)ir}KUqZwhB$9e+T^9Q=n8IC*|wmrdQy)^;;QjpAIh9RQG~ zwZ{sK6HMdNhgt*f-O0FnD|&7{>A0&OBbVH{oQ88FS1iG&mZrXTl0sRAq6VR0ZEs*1 z8cX}*G>kkl-JlwfDWyja6d3vRE3}H+X4}%zEHbW5Fj$hz*z;y2pSP|Qv^2t5qB6gZ znIjT|`~F^ykH*5uR6hYb1Gu5;8v zD*P)eh_$Q&K%g*ELI<(8)Ssot9`$i@kxQioK=ZHptJPwLLvP}h8tJN){OQy-s#!s~ z2`;GNfRGd!Bh;?%FV$5*2G%#YE#+8!&O-W}XMJh2*D*`Tg7988!TbUyWbvavc@jv+huNvczPN0!x z03ecPsX_cS99ZU`vyV;ll%rVdB-9o{;~7j!k4lgD5i}(mO@)o@b)V=xpq;*oHM)_q zaR~k~=EQMQJh;}QrLc#&CfO;dQ^joYKZF{OpZZbIt?|#IJ7eVEYi<6X>K(IJy89D( zR;4u*afV1SbZw|smHUg?1iTGz|{o~a}(t5Anm+7J0UofQ(Uk`}}p0c+gf>Hf#scey9a9V@oC zDnyKP!j%62FH=&D�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

    `8wR+ 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�=gMMjBC4ELc+j-^!)pFj$;}?V^PP`IUi?BGBCIw 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�$2XGf^`@ zs!3}3fstO5!^=kIZEQ>uaX{EpA)x$VsQwnNJ4rRI3fp*fM|$A*Chyr(^%ncaR_s`! ztKHOlYKQytjH0JB@K)DuYMs%6pEC6K^j7b1QpObTBkW9$x4BRjd#ay zlG{5SHa|P@+q5znO{JQoug@lXZsxKWaCb%@7d8q6!efO!eojiKb*fs5f88_@#~a&7 z9?V;Q*`&L5hW5%ho;B8DVWz4N#8~lNUn&oo9WyT{ZVF^WYLN(Cei?MJQ(BEBf{j51 zKqPA;P^C#sRQz1;>`pp7{a41#^|#X_ntW>RdYGv8)*17alvH_!r;>d3NM@-r6xh79 zISCAtAg53ZdIf?gx6O?Vki&CoW-=Plpn<3(x@#60Wj2z6HHQ--~e{+ zTVrl5tl_wQ*gYJ?j#L0@rHpC->}EA20?kl3k{MRYGT*@HG8l{kQSE3dm-tO4E}s`R zMjGQKbFEccNl#d{GeWmDOB&P0k%rPPNnV!3T?k!4XvwIis#R(Qe7M%U4;~#+ZzPS{ zW$}DTN``Px7|j@vs=(9X@X6FGK|@-*(c}7Ojv}0(gag>$WWT35%wyJy_wN&*G z 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 RG&~l$;pa{i2RwN7|Jg9(1ls@r literal 0 HcmV?d00001 diff --git a/spring-integration/src/test/java/com/baeldung/samples/FileCopyTest.java b/spring-integration/src/test/java/com/baeldung/samples/FileCopyTest.java index 76ed804a9f..96e5a98f41 100644 --- a/spring-integration/src/test/java/com/baeldung/samples/FileCopyTest.java +++ b/spring-integration/src/test/java/com/baeldung/samples/FileCopyTest.java @@ -44,5 +44,17 @@ public final class FileCopyTest { Thread.sleep(5000); + } + + @Test + public void publish() throws InterruptedException { + + + final AbstractApplicationContext context = + new ClassPathXmlApplicationContext("classpath:META-INF/spring/integration/spring-integration-file-publish-context.xml"); + + Thread.sleep(15000); + + } } From dd146fc62e933c76552d57bcd99b2acfff15d8cb Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Tue, 25 Oct 2016 08:17:43 +0200 Subject: [PATCH 278/309] BAEL-80 - removing an obsolete file (cherry picked from commit 5f6912f) --- .../main/resources/destination/penguins.jpg | Bin 777835 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 spring-integration/src/main/resources/destination/penguins.jpg diff --git a/spring-integration/src/main/resources/destination/penguins.jpg b/spring-integration/src/main/resources/destination/penguins.jpg deleted file mode 100644 index 030ab8a685bebb796c24cc710edd9e69859164f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 777835 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

    }92FCS<$zdctM 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

    em#UX#? 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�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

    `8wR+ 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�=gMMjBC4ELc+j-^!)pFj$;}?V^PP`IUi?BGBCIw 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�$2XGf^`@ zs!3}3fstO5!^=kIZEQ>uaX{EpA)x$VsQwnNJ4rRI3fp*fM|$A*Chyr(^%ncaR_s`! ztKHOlYKQytjH0JB@K)DuYMs%6pEC6K^j7b1QpObTBkW9$x4BRjd#ay zlG{5SHa|P@+q5znO{JQoug@lXZsxKWaCb%@7d8q6!efO!eojiKb*fs5f88_@#~a&7 z9?V;Q*`&L5hW5%ho;B8DVWz4N#8~lNUn&oo9WyT{ZVF^WYLN(Cei?MJQ(BEBf{j51 zKqPA;P^C#sRQz1;>`pp7{a41#^|#X_ntW>RdYGv8)*17alvH_!r;>d3NM@-r6xh79 zISCAtAg53ZdIf?gx6O?Vki&CoW-=Plpn<3(x@#60Wj2z6HHQ--~e{+ zTVrl5tl_wQ*gYJ?j#L0@rHpC->}EA20?kl3k{MRYGT*@HG8l{kQSE3dm-tO4E}s`R zMjGQKbFEccNl#d{GeWmDOB&P0k%rPPNnV!3T?k!4XvwIis#R(Qe7M%U4;~#+ZzPS{ zW$}DTN``Px7|j@vs=(9X@X6FGK|@-*(c}7Ojv}0(gag>$WWT35%wyJy_wN&*G z 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 RG&~l$;pa{i2RwN7|Jg9(1ls@r From 2ab201d6390db8cee25d7fa7eb3d5b70090bb3fc Mon Sep 17 00:00:00 2001 From: eugenp Date: Tue, 25 Oct 2016 11:09:51 +0300 Subject: [PATCH 279/309] cleanup work --- .../com/baeldung/datetime/UseDuration.java | 8 +- .../com/baeldung/datetime/UseLocalDate.java | 32 ++-- .../baeldung/datetime/UseLocalDateTime.java | 4 +- .../com/baeldung/datetime/UseLocalTime.java | 26 ++-- .../java/com/baeldung/datetime/UsePeriod.java | 8 +- .../com/baeldung/datetime/UseToInstant.java | 8 +- .../baeldung/datetime/UseZonedDateTime.java | 4 +- .../main/java/com/baeldung/enums/Pizza.java | 7 +- .../PizzaDeliverySystemConfiguration.java | 1 - .../forkjoin/CustomRecursiveAction.java | 3 +- .../forkjoin/CustomRecursiveTask.java | 17 +-- .../com/baeldung/forkjoin/util/PoolUtil.java | 1 - .../java/nio/selector/EchoServer.java | 2 +- .../com/baeldung/java_8_features/Vehicle.java | 2 +- .../baeldung/java_8_features/VehicleImpl.java | 4 +- .../java/com/baeldung/socket/EchoClient.java | 59 ++++---- .../com/baeldung/socket/EchoMultiServer.java | 101 +++++++------ .../java/com/baeldung/socket/EchoServer.java | 73 +++++---- .../java/com/baeldung/socket/GreetClient.java | 59 ++++---- .../java/com/baeldung/socket/GreetServer.java | 67 +++++---- .../java/com/baeldung/streamApi/Product.java | 1 - .../com/baeldung/threadpool/CountingTask.java | 4 +- .../executable/ExecutableMavenJar.java | 6 +- .../java/com/baeldung/CharToStringTest.java | 10 +- ...st.java => RandomListElementUnitTest.java} | 4 +- ...java => StringToIntOrIntegerUnitTest.java} | 10 +- .../collectors/Java8CollectorsTest.java | 139 ++++++------------ .../CompletableFutureTest.java | 17 +-- ...imeTest.java => JavaUtilTimeUnitTest.java} | 2 +- ....java => FunctionalInterfaceUnitTest.java} | 71 ++++----- ...ctionTest.java => ReflectionUnitTest.java} | 111 ++++++-------- .../{RegexTest.java => RegexUnitTest.java} | 3 +- ...nshotTest.java => ScreenshotUnitTest.java} | 3 +- .../com/baeldung/socket/EchoMultiTest.java | 72 ++++----- .../java/com/baeldung/socket/EchoTest.java | 40 ++--- ...t.java => GreetServerIntegrationTest.java} | 4 +- .../exceptions/FileNotFoundExceptionTest.java | 2 +- ...sTest.java => PrimitiveClassUnitTest.java} | 2 +- ...lassTest.java => SquareClassUnitTest.java} | 3 +- .../arrays/ArraysJoinAndSplitJUnitTest.java | 17 +-- .../java/collections/ArrayListTest.java | 19 +-- .../{PizzaTest.java => PizzaUnitTest.java} | 41 +++--- ...a => JavaReadFromFileIntegrationTest.java} | 4 +- ...t.java => JavaScannerIntegrationTest.java} | 2 +- ...va => JavaWriteToFileIntegrationTest.java} | 2 +- ...ertJTest.java => ListAssertJUnitTest.java} | 6 +- ...estNGTest.java => ListTestNgUnitTest.java} | 2 +- ...{JavaMD5Test.java => JavaMD5UnitTest.java} | 57 +++---- ...JavaTest.java => SandboxJavaUnitTest.java} | 2 +- 49 files changed, 489 insertions(+), 653 deletions(-) rename core-java/src/test/java/com/baeldung/{RandomListElementTest.java => RandomListElementUnitTest.java} (95%) rename core-java/src/test/java/com/baeldung/{StringToIntOrIntegerTest.java => StringToIntOrIntegerUnitTest.java} (97%) rename core-java/src/test/java/com/baeldung/dateapi/{JavaUtilTimeTest.java => JavaUtilTimeUnitTest.java} (98%) rename core-java/src/test/java/com/baeldung/functionalinterface/{FunctionalInterfaceTest.java => FunctionalInterfaceUnitTest.java} (89%) rename core-java/src/test/java/com/baeldung/java/reflection/{ReflectionTest.java => ReflectionUnitTest.java} (81%) rename core-java/src/test/java/com/baeldung/java/regex/{RegexTest.java => RegexUnitTest.java} (99%) rename core-java/src/test/java/com/baeldung/printscreen/{ScreenshotTest.java => ScreenshotUnitTest.java} (93%) rename core-java/src/test/java/com/baeldung/socket/{GreetServerTest.java => GreetServerIntegrationTest.java} (90%) rename core-java/src/test/java/org/baeldung/equalshashcode/entities/{PrimitiveClassTest.java => PrimitiveClassUnitTest.java} (94%) rename core-java/src/test/java/org/baeldung/equalshashcode/entities/{SquareClassTest.java => SquareClassUnitTest.java} (94%) rename core-java/src/test/java/org/baeldung/java/enums/{PizzaTest.java => PizzaUnitTest.java} (60%) rename core-java/src/test/java/org/baeldung/java/io/{JavaReadFromFileTest.java => JavaReadFromFileIntegrationTest.java} (98%) rename core-java/src/test/java/org/baeldung/java/io/{JavaScannerTest.java => JavaScannerIntegrationTest.java} (99%) rename core-java/src/test/java/org/baeldung/java/io/{JavaWriteToFileTest.java => JavaWriteToFileIntegrationTest.java} (99%) rename core-java/src/test/java/org/baeldung/java/lists/{ListAssertJTest.java => ListAssertJUnitTest.java} (83%) rename core-java/src/test/java/org/baeldung/java/lists/{ListTestNGTest.java => ListTestNgUnitTest.java} (94%) rename core-java/src/test/java/org/baeldung/java/md5/{JavaMD5Test.java => JavaMD5UnitTest.java} (77%) rename core-java/src/test/java/org/baeldung/java/sandbox/{SandboxJavaTest.java => SandboxJavaUnitTest.java} (98%) diff --git a/core-java/src/main/java/com/baeldung/datetime/UseDuration.java b/core-java/src/main/java/com/baeldung/datetime/UseDuration.java index 125b6fbe38..31b45aab84 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseDuration.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseDuration.java @@ -5,12 +5,12 @@ import java.time.LocalTime; import java.time.Period; public class UseDuration { - - public LocalTime modifyDates(LocalTime localTime,Duration duration){ + + public LocalTime modifyDates(LocalTime localTime, Duration duration) { return localTime.plus(duration); } - - public Duration getDifferenceBetweenDates(LocalTime localTime1,LocalTime localTime2){ + + public Duration getDifferenceBetweenDates(LocalTime localTime1, LocalTime localTime2) { return Duration.between(localTime1, localTime2); } } diff --git a/core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java b/core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java index 47b1b3f67d..82f5745b3c 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseLocalDate.java @@ -7,39 +7,39 @@ import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; public class UseLocalDate { - - public LocalDate getLocalDateUsingFactoryOfMethod(int year, int month, int dayOfMonth){ + + public LocalDate getLocalDateUsingFactoryOfMethod(int year, int month, int dayOfMonth) { return LocalDate.of(year, month, dayOfMonth); } - - public LocalDate getLocalDateUsingParseMethod(String representation){ + + public LocalDate getLocalDateUsingParseMethod(String representation) { return LocalDate.parse(representation); } - - public LocalDate getLocalDateFromClock(){ + + public LocalDate getLocalDateFromClock() { LocalDate localDate = LocalDate.now(); return localDate; } - - public LocalDate getNextDay(LocalDate localDate){ + + public LocalDate getNextDay(LocalDate localDate) { return localDate.plusDays(1); } - - public LocalDate getPreviousDay(LocalDate localDate){ + + public LocalDate getPreviousDay(LocalDate localDate) { return localDate.minus(1, ChronoUnit.DAYS); } - - public DayOfWeek getDayOfWeek(LocalDate localDate){ + + public DayOfWeek getDayOfWeek(LocalDate localDate) { DayOfWeek day = localDate.getDayOfWeek(); return day; } - - public LocalDate getFirstDayOfMonth(){ + + public LocalDate getFirstDayOfMonth() { LocalDate firstDayOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); return firstDayOfMonth; } - - public LocalDateTime getStartOfDay(LocalDate localDate){ + + public LocalDateTime getStartOfDay(LocalDate localDate) { LocalDateTime startofDay = localDate.atStartOfDay(); return startofDay; } diff --git a/core-java/src/main/java/com/baeldung/datetime/UseLocalDateTime.java b/core-java/src/main/java/com/baeldung/datetime/UseLocalDateTime.java index 7aa1eaa276..7f39ac2f91 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseLocalDateTime.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseLocalDateTime.java @@ -3,8 +3,8 @@ package com.baeldung.datetime; import java.time.LocalDateTime; public class UseLocalDateTime { - - public LocalDateTime getLocalDateTimeUsingParseMethod(String representation){ + + public LocalDateTime getLocalDateTimeUsingParseMethod(String representation) { return LocalDateTime.parse(representation); } diff --git a/core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java b/core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java index e13fd10d6f..9bd8f9706c 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseLocalTime.java @@ -4,32 +4,32 @@ import java.time.LocalTime; import java.time.temporal.ChronoUnit; public class UseLocalTime { - - public LocalTime getLocalTimeUsingFactoryOfMethod(int hour, int min, int seconds){ + + public LocalTime getLocalTimeUsingFactoryOfMethod(int hour, int min, int seconds) { LocalTime localTime = LocalTime.of(hour, min, seconds); return localTime; } - - public LocalTime getLocalTimeUsingParseMethod(String timeRepresentation){ + + public LocalTime getLocalTimeUsingParseMethod(String timeRepresentation) { LocalTime localTime = LocalTime.parse(timeRepresentation); return localTime; } - - public LocalTime getLocalTimeFromClock(){ + + public LocalTime getLocalTimeFromClock() { LocalTime localTime = LocalTime.now(); return localTime; } - - public LocalTime addAnHour(LocalTime localTime){ - LocalTime newTime = localTime.plus(1,ChronoUnit.HOURS); + + public LocalTime addAnHour(LocalTime localTime) { + LocalTime newTime = localTime.plus(1, ChronoUnit.HOURS); return newTime; } - - public int getHourFromLocalTime(LocalTime localTime){ + + public int getHourFromLocalTime(LocalTime localTime) { return localTime.getHour(); } - - public LocalTime getLocalTimeWithMinuteSetToValue(LocalTime localTime, int minute){ + + public LocalTime getLocalTimeWithMinuteSetToValue(LocalTime localTime, int minute) { return localTime.withMinute(minute); } } diff --git a/core-java/src/main/java/com/baeldung/datetime/UsePeriod.java b/core-java/src/main/java/com/baeldung/datetime/UsePeriod.java index 326cfad650..5a42ef83b4 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UsePeriod.java +++ b/core-java/src/main/java/com/baeldung/datetime/UsePeriod.java @@ -4,12 +4,12 @@ import java.time.LocalDate; import java.time.Period; public class UsePeriod { - - public LocalDate modifyDates(LocalDate localDate,Period period){ + + public LocalDate modifyDates(LocalDate localDate, Period period) { return localDate.plus(period); } - - public Period getDifferenceBetweenDates(LocalDate localDate1,LocalDate localDate2){ + + public Period getDifferenceBetweenDates(LocalDate localDate1, LocalDate localDate2) { return Period.between(localDate1, localDate2); } } diff --git a/core-java/src/main/java/com/baeldung/datetime/UseToInstant.java b/core-java/src/main/java/com/baeldung/datetime/UseToInstant.java index 1ddb096cf6..94154ce5c0 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseToInstant.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseToInstant.java @@ -6,13 +6,13 @@ import java.util.Calendar; import java.util.Date; public class UseToInstant { - - public LocalDateTime convertDateToLocalDate(Date date){ + + public LocalDateTime convertDateToLocalDate(Date date) { LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); return localDateTime; } - - public LocalDateTime convertDateToLocalDate(Calendar calendar){ + + public LocalDateTime convertDateToLocalDate(Calendar calendar) { LocalDateTime localDateTime = LocalDateTime.ofInstant(calendar.toInstant(), ZoneId.systemDefault()); return localDateTime; } diff --git a/core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java b/core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java index 0369de9835..2d1b17484b 100644 --- a/core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java +++ b/core-java/src/main/java/com/baeldung/datetime/UseZonedDateTime.java @@ -5,8 +5,8 @@ import java.time.ZoneId; import java.time.ZonedDateTime; public class UseZonedDateTime { - - public ZonedDateTime getZonedDateTime(LocalDateTime localDateTime,ZoneId zoneId){ + + public ZonedDateTime getZonedDateTime(LocalDateTime localDateTime, ZoneId zoneId) { ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId); return zonedDateTime; } diff --git a/core-java/src/main/java/com/baeldung/enums/Pizza.java b/core-java/src/main/java/com/baeldung/enums/Pizza.java index 5bc2d9a9eb..bad134bf00 100644 --- a/core-java/src/main/java/com/baeldung/enums/Pizza.java +++ b/core-java/src/main/java/com/baeldung/enums/Pizza.java @@ -7,8 +7,7 @@ import java.util.stream.Collectors; public class Pizza { - private static EnumSet deliveredPizzaStatuses = - EnumSet.of(PizzaStatusEnum.DELIVERED); + private static EnumSet deliveredPizzaStatuses = EnumSet.of(PizzaStatusEnum.DELIVERED); private PizzaStatusEnum status; @@ -76,9 +75,7 @@ public class Pizza { } public static EnumMap> groupPizzaByStatus(List pzList) { - return pzList.stream().collect( - Collectors.groupingBy(Pizza::getStatus, - () -> new EnumMap<>(PizzaStatusEnum.class), Collectors.toList())); + return pzList.stream().collect(Collectors.groupingBy(Pizza::getStatus, () -> new EnumMap<>(PizzaStatusEnum.class), Collectors.toList())); } public void deliver() { diff --git a/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java b/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java index 5ccff5e959..a276b3c000 100644 --- a/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java +++ b/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java @@ -1,6 +1,5 @@ package com.baeldung.enums; - public enum PizzaDeliverySystemConfiguration { INSTANCE; diff --git a/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java b/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java index f1ab2d8d09..ae79787570 100644 --- a/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java +++ b/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveAction.java @@ -30,8 +30,7 @@ public class CustomRecursiveAction extends RecursiveAction { private Collection createSubtasks() { - List subtasks = - new ArrayList<>(); + List subtasks = new ArrayList<>(); String partOne = workLoad.substring(0, workLoad.length() / 2); String partTwo = workLoad.substring(workLoad.length() / 2, workLoad.length()); diff --git a/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java b/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java index 5d4d97b805..af9805c33f 100644 --- a/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java +++ b/core-java/src/main/java/com/baeldung/forkjoin/CustomRecursiveTask.java @@ -1,6 +1,5 @@ package com.baeldung.forkjoin; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -23,10 +22,7 @@ public class CustomRecursiveTask extends RecursiveTask { if (arr.length > THRESHOLD) { - return ForkJoinTask.invokeAll(createSubtasks()) - .stream() - .mapToInt(ForkJoinTask::join) - .sum(); + return ForkJoinTask.invokeAll(createSubtasks()).stream().mapToInt(ForkJoinTask::join).sum(); } else { return processing(arr); @@ -35,17 +31,12 @@ public class CustomRecursiveTask extends RecursiveTask { private Collection createSubtasks() { List dividedTasks = new ArrayList<>(); - dividedTasks.add(new CustomRecursiveTask( - Arrays.copyOfRange(arr, 0, arr.length / 2))); - dividedTasks.add(new CustomRecursiveTask( - Arrays.copyOfRange(arr, arr.length / 2, arr.length))); + dividedTasks.add(new CustomRecursiveTask(Arrays.copyOfRange(arr, 0, arr.length / 2))); + dividedTasks.add(new CustomRecursiveTask(Arrays.copyOfRange(arr, arr.length / 2, arr.length))); return dividedTasks; } private Integer processing(int[] arr) { - return Arrays.stream(arr) - .filter(a -> a > 10 && a < 27) - .map(a -> a * 10) - .sum(); + return Arrays.stream(arr).filter(a -> a > 10 && a < 27).map(a -> a * 10).sum(); } } diff --git a/core-java/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java b/core-java/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java index 521616600f..fd24a6fc66 100644 --- a/core-java/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java +++ b/core-java/src/main/java/com/baeldung/forkjoin/util/PoolUtil.java @@ -1,6 +1,5 @@ package com.baeldung.forkjoin.util; - import java.util.concurrent.ForkJoinPool; public class PoolUtil { diff --git a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java index 285d4e51fc..ffabad9c4d 100644 --- a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java +++ b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java @@ -15,7 +15,7 @@ public class EchoServer { public static void main(String[] args) - throws IOException { + throws IOException { Selector selector = Selector.open(); ServerSocketChannel serverSocket = ServerSocketChannel.open(); serverSocket.bind(new InetSocketAddress("localhost", 5454)); diff --git a/core-java/src/main/java/com/baeldung/java_8_features/Vehicle.java b/core-java/src/main/java/com/baeldung/java_8_features/Vehicle.java index 011173bcaf..045fc90590 100644 --- a/core-java/src/main/java/com/baeldung/java_8_features/Vehicle.java +++ b/core-java/src/main/java/com/baeldung/java_8_features/Vehicle.java @@ -9,7 +9,7 @@ public interface Vehicle { } default long[] startPosition() { - return new long[]{23, 15}; + return new long[] { 23, 15 }; } default String getOverview() { diff --git a/core-java/src/main/java/com/baeldung/java_8_features/VehicleImpl.java b/core-java/src/main/java/com/baeldung/java_8_features/VehicleImpl.java index 83e55f5f4d..64bec0246d 100644 --- a/core-java/src/main/java/com/baeldung/java_8_features/VehicleImpl.java +++ b/core-java/src/main/java/com/baeldung/java_8_features/VehicleImpl.java @@ -1,9 +1,9 @@ package com.baeldung.java_8_features; -public class VehicleImpl implements Vehicle { +public class VehicleImpl implements Vehicle { @Override public void moveTo(long altitude, long longitude) { - //do nothing + // do nothing } } diff --git a/core-java/src/main/java/com/baeldung/socket/EchoClient.java b/core-java/src/main/java/com/baeldung/socket/EchoClient.java index 1ddf752a03..570bd60b2d 100644 --- a/core-java/src/main/java/com/baeldung/socket/EchoClient.java +++ b/core-java/src/main/java/com/baeldung/socket/EchoClient.java @@ -4,39 +4,38 @@ import java.io.*; import java.net.*; public class EchoClient { - private Socket clientSocket; - private PrintWriter out; - private BufferedReader in; + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; - public void startConnection(String ip, int port) { - try { - clientSocket = new Socket(ip, port); - out = new PrintWriter(clientSocket.getOutputStream(), true); - in = new BufferedReader(new InputStreamReader( - clientSocket.getInputStream())); - } catch (IOException e) { - System.out.print(e); - } + public void startConnection(String ip, int port) { + try { + clientSocket = new Socket(ip, port); + out = new PrintWriter(clientSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + } catch (IOException e) { + System.out.print(e); + } - } + } - public String sendMessage(String msg) { - try { - out.println(msg); - return in.readLine(); - } catch (Exception e) { - return null; - } - } + public String sendMessage(String msg) { + try { + out.println(msg); + return in.readLine(); + } catch (Exception e) { + return null; + } + } - public void stopConnection() { - try { - in.close(); - out.close(); - clientSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } + public void stopConnection() { + try { + in.close(); + out.close(); + clientSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } - } + } } diff --git a/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java index 2ece1ceebe..b920967545 100644 --- a/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java +++ b/core-java/src/main/java/com/baeldung/socket/EchoMultiServer.java @@ -4,68 +4,67 @@ import java.net.*; import java.io.*; public class EchoMultiServer { - private ServerSocket serverSocket; + private ServerSocket serverSocket; - public void start(int port) { - try { - serverSocket = new ServerSocket(port); - while (true) - new EchoClientHandler(serverSocket.accept()).run(); + public void start(int port) { + try { + serverSocket = new ServerSocket(port); + while (true) + new EchoClientHandler(serverSocket.accept()).run(); - } catch (IOException e) { - e.printStackTrace(); - } finally { - stop(); - } + } catch (IOException e) { + e.printStackTrace(); + } finally { + stop(); + } - } + } - public void stop() { - try { + public void stop() { + try { - serverSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } + serverSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } - } + } - private static class EchoClientHandler extends Thread { - private Socket clientSocket; - private PrintWriter out; - private BufferedReader in; + private static class EchoClientHandler extends Thread { + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; - public EchoClientHandler(Socket socket) { - this.clientSocket = socket; - } + public EchoClientHandler(Socket socket) { + this.clientSocket = socket; + } - public void run() { - try { - out = new PrintWriter(clientSocket.getOutputStream(), true); - in = new BufferedReader(new InputStreamReader( - clientSocket.getInputStream())); - String inputLine; - while ((inputLine = in.readLine()) != null) { - if (".".equals(inputLine)) { - out.println("bye"); - break; - } - out.println(inputLine); - } + public void run() { + try { + out = new PrintWriter(clientSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + String inputLine; + while ((inputLine = in.readLine()) != null) { + if (".".equals(inputLine)) { + out.println("bye"); + break; + } + out.println(inputLine); + } - in.close(); - out.close(); - clientSocket.close(); + in.close(); + out.close(); + clientSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } + } catch (IOException e) { + e.printStackTrace(); + } + } + } - public static void main(String[] args) { - EchoMultiServer server = new EchoMultiServer(); - server.start(5555); - } + public static void main(String[] args) { + EchoMultiServer server = new EchoMultiServer(); + server.start(5555); + } } diff --git a/core-java/src/main/java/com/baeldung/socket/EchoServer.java b/core-java/src/main/java/com/baeldung/socket/EchoServer.java index 3607afa7f5..dfd281d51c 100644 --- a/core-java/src/main/java/com/baeldung/socket/EchoServer.java +++ b/core-java/src/main/java/com/baeldung/socket/EchoServer.java @@ -4,47 +4,46 @@ import java.net.*; import java.io.*; public class EchoServer { - private ServerSocket serverSocket; - private Socket clientSocket; - private PrintWriter out; - private BufferedReader in; + private ServerSocket serverSocket; + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; - public void start(int port) { - try { - serverSocket = new ServerSocket(port); - clientSocket = serverSocket.accept(); - out = new PrintWriter(clientSocket.getOutputStream(), true); - in = new BufferedReader(new InputStreamReader( - clientSocket.getInputStream())); - String inputLine; - while ((inputLine = in.readLine()) != null) { - if (".".equals(inputLine)) { - out.println("good bye"); - break; - } - out.println(inputLine); - } - } catch (IOException e) { - e.printStackTrace(); - } + public void start(int port) { + try { + serverSocket = new ServerSocket(port); + clientSocket = serverSocket.accept(); + out = new PrintWriter(clientSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + String inputLine; + while ((inputLine = in.readLine()) != null) { + if (".".equals(inputLine)) { + out.println("good bye"); + break; + } + out.println(inputLine); + } + } catch (IOException e) { + e.printStackTrace(); + } - } + } - public void stop() { - try { - in.close(); - out.close(); - clientSocket.close(); - serverSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } + public void stop() { + try { + in.close(); + out.close(); + clientSocket.close(); + serverSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } - } + } - public static void main(String[] args) { - EchoServer server = new EchoServer(); - server.start(4444); - } + public static void main(String[] args) { + EchoServer server = new EchoServer(); + server.start(4444); + } } diff --git a/core-java/src/main/java/com/baeldung/socket/GreetClient.java b/core-java/src/main/java/com/baeldung/socket/GreetClient.java index 21959c7469..e6f14bb2b6 100644 --- a/core-java/src/main/java/com/baeldung/socket/GreetClient.java +++ b/core-java/src/main/java/com/baeldung/socket/GreetClient.java @@ -7,39 +7,38 @@ import java.io.PrintWriter; import java.net.Socket; public class GreetClient { - private Socket clientSocket; - private PrintWriter out; - private BufferedReader in; + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; - public void startConnection(String ip, int port) { - try { - clientSocket = new Socket(ip, port); - out = new PrintWriter(clientSocket.getOutputStream(), true); - in = new BufferedReader(new InputStreamReader( - clientSocket.getInputStream())); - } catch (IOException e) { - - } + public void startConnection(String ip, int port) { + try { + clientSocket = new Socket(ip, port); + out = new PrintWriter(clientSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + } catch (IOException e) { - } + } - public String sendMessage(String msg) { - try { - out.println(msg); - return in.readLine(); - } catch (Exception e) { - return null; - } - } + } - public void stopConnection() { - try { - in.close(); - out.close(); - clientSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } + public String sendMessage(String msg) { + try { + out.println(msg); + return in.readLine(); + } catch (Exception e) { + return null; + } + } + + public void stopConnection() { + try { + in.close(); + out.close(); + clientSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } diff --git a/core-java/src/main/java/com/baeldung/socket/GreetServer.java b/core-java/src/main/java/com/baeldung/socket/GreetServer.java index 8bf675c7b9..05bc65a65e 100644 --- a/core-java/src/main/java/com/baeldung/socket/GreetServer.java +++ b/core-java/src/main/java/com/baeldung/socket/GreetServer.java @@ -4,44 +4,43 @@ import java.net.*; import java.io.*; public class GreetServer { - private ServerSocket serverSocket; - private Socket clientSocket; - private PrintWriter out; - private BufferedReader in; + private ServerSocket serverSocket; + private Socket clientSocket; + private PrintWriter out; + private BufferedReader in; + public void start(int port) { + try { + serverSocket = new ServerSocket(port); + clientSocket = serverSocket.accept(); + out = new PrintWriter(clientSocket.getOutputStream(), true); + in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + String greeting = in.readLine(); + if ("hello server".equals(greeting)) + out.println("hello client"); + else + out.println("unrecognised greeting"); + } catch (IOException e) { + e.printStackTrace(); + } - public void start(int port) { - try { - serverSocket = new ServerSocket(port); - clientSocket = serverSocket.accept(); - out = new PrintWriter(clientSocket.getOutputStream(), true); - in = new BufferedReader(new InputStreamReader( - clientSocket.getInputStream())); - String greeting = in.readLine(); - if ("hello server".equals(greeting)) - out.println("hello client"); - else - out.println("unrecognised greeting"); - } catch (IOException e) { - e.printStackTrace(); - } + } - } + public void stop() { + try { + in.close(); + out.close(); + clientSocket.close(); + serverSocket.close(); + } catch (IOException e) { + e.printStackTrace(); + } - public void stop() { - try { - in.close(); - out.close(); - clientSocket.close(); - serverSocket.close(); - } catch (IOException e) { - e.printStackTrace(); - } + } - } - public static void main(String[] args) { - GreetServer server=new GreetServer(); - server.start(6666); - } + public static void main(String[] args) { + GreetServer server = new GreetServer(); + server.start(6666); + } } diff --git a/core-java/src/main/java/com/baeldung/streamApi/Product.java b/core-java/src/main/java/com/baeldung/streamApi/Product.java index 18f3a61904..26b8bd6fed 100644 --- a/core-java/src/main/java/com/baeldung/streamApi/Product.java +++ b/core-java/src/main/java/com/baeldung/streamApi/Product.java @@ -44,7 +44,6 @@ public class Product { this.name = name; } - public static Stream streamOf(List list) { return (list == null || list.isEmpty()) ? Stream.empty() : list.stream(); } diff --git a/core-java/src/main/java/com/baeldung/threadpool/CountingTask.java b/core-java/src/main/java/com/baeldung/threadpool/CountingTask.java index 05aa14c5ae..effdf54916 100644 --- a/core-java/src/main/java/com/baeldung/threadpool/CountingTask.java +++ b/core-java/src/main/java/com/baeldung/threadpool/CountingTask.java @@ -14,9 +14,7 @@ public class CountingTask extends RecursiveTask { @Override protected Integer compute() { - return node.value + node.children.stream() - .map(childNode -> new CountingTask(childNode).fork()) - .collect(Collectors.summingInt(ForkJoinTask::join)); + return node.value + node.children.stream().map(childNode -> new CountingTask(childNode).fork()).collect(Collectors.summingInt(ForkJoinTask::join)); } } diff --git a/core-java/src/main/java/org/baeldung/executable/ExecutableMavenJar.java b/core-java/src/main/java/org/baeldung/executable/ExecutableMavenJar.java index 2c52a17904..09344902b7 100644 --- a/core-java/src/main/java/org/baeldung/executable/ExecutableMavenJar.java +++ b/core-java/src/main/java/org/baeldung/executable/ExecutableMavenJar.java @@ -4,8 +4,8 @@ import javax.swing.JOptionPane; public class ExecutableMavenJar { - public static void main(String[] args) { - JOptionPane.showMessageDialog(null, "It worked!", "Executable Jar with Maven", 1); - } + public static void main(String[] args) { + JOptionPane.showMessageDialog(null, "It worked!", "Executable Jar with Maven", 1); + } } diff --git a/core-java/src/test/java/com/baeldung/CharToStringTest.java b/core-java/src/test/java/com/baeldung/CharToStringTest.java index d91016d104..4fd451f2ed 100644 --- a/core-java/src/test/java/com/baeldung/CharToStringTest.java +++ b/core-java/src/test/java/com/baeldung/CharToStringTest.java @@ -7,7 +7,7 @@ import static org.assertj.core.api.Assertions.assertThat; public class CharToStringTest { @Test - public void givenChar_whenCallingStringValueOf_shouldConvertToString(){ + public void givenChar_whenCallingStringValueOf_shouldConvertToString() { final char givenChar = 'x'; final String result = String.valueOf(givenChar); @@ -16,7 +16,7 @@ public class CharToStringTest { } @Test - public void givenChar_whenCallingToStringOnCharacter_shouldConvertToString(){ + public void givenChar_whenCallingToStringOnCharacter_shouldConvertToString() { final char givenChar = 'x'; final String result = Character.toString(givenChar); @@ -25,7 +25,7 @@ public class CharToStringTest { } @Test - public void givenChar_whenCallingCharacterConstructor_shouldConvertToString3(){ + public void givenChar_whenCallingCharacterConstructor_shouldConvertToString3() { final char givenChar = 'x'; final String result = new Character(givenChar).toString(); @@ -34,7 +34,7 @@ public class CharToStringTest { } @Test - public void givenChar_whenConcatenated_shouldConvertToString4(){ + public void givenChar_whenConcatenated_shouldConvertToString4() { final char givenChar = 'x'; final String result = givenChar + ""; @@ -43,7 +43,7 @@ public class CharToStringTest { } @Test - public void givenChar_whenFormated_shouldConvertToString5(){ + public void givenChar_whenFormated_shouldConvertToString5() { final char givenChar = 'x'; final String result = String.format("%c", givenChar); diff --git a/core-java/src/test/java/com/baeldung/RandomListElementTest.java b/core-java/src/test/java/com/baeldung/RandomListElementUnitTest.java similarity index 95% rename from core-java/src/test/java/com/baeldung/RandomListElementTest.java rename to core-java/src/test/java/com/baeldung/RandomListElementUnitTest.java index 1918c801dc..6ae7c40f4d 100644 --- a/core-java/src/test/java/com/baeldung/RandomListElementTest.java +++ b/core-java/src/test/java/com/baeldung/RandomListElementUnitTest.java @@ -6,7 +6,7 @@ import org.junit.Test; import java.util.*; import java.util.concurrent.ThreadLocalRandom; -public class RandomListElementTest { +public class RandomListElementUnitTest { @Test public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingRandom() { @@ -20,7 +20,7 @@ public class RandomListElementTest { public void givenList_whenRandomIndexChosen_shouldReturnARandomElementUsingMathRandom() { List givenList = Lists.newArrayList(1, 2, 3); - givenList.get((int)(Math.random() * givenList.size())); + givenList.get((int) (Math.random() * givenList.size())); } @Test diff --git a/core-java/src/test/java/com/baeldung/StringToIntOrIntegerTest.java b/core-java/src/test/java/com/baeldung/StringToIntOrIntegerUnitTest.java similarity index 97% rename from core-java/src/test/java/com/baeldung/StringToIntOrIntegerTest.java rename to core-java/src/test/java/com/baeldung/StringToIntOrIntegerUnitTest.java index 6c1493d89b..a7ad0bf114 100644 --- a/core-java/src/test/java/com/baeldung/StringToIntOrIntegerTest.java +++ b/core-java/src/test/java/com/baeldung/StringToIntOrIntegerUnitTest.java @@ -1,11 +1,12 @@ package com.baeldung; -import com.google.common.primitives.Ints; -import org.junit.Test; - import static org.assertj.core.api.Assertions.assertThat; -public class StringToIntOrIntegerTest { +import org.junit.Test; + +import com.google.common.primitives.Ints; + +public class StringToIntOrIntegerUnitTest { @Test public void givenString_whenParsingInt_shouldConvertToInt() { @@ -16,7 +17,6 @@ public class StringToIntOrIntegerTest { assertThat(result).isEqualTo(42); } - @Test public void givenString_whenCallingIntegerValueOf_shouldConvertToInt() { String givenString = "42"; diff --git a/core-java/src/test/java/com/baeldung/collectors/Java8CollectorsTest.java b/core-java/src/test/java/com/baeldung/collectors/Java8CollectorsTest.java index d94f72b685..ac8c666e4b 100644 --- a/core-java/src/test/java/com/baeldung/collectors/Java8CollectorsTest.java +++ b/core-java/src/test/java/com/baeldung/collectors/Java8CollectorsTest.java @@ -42,192 +42,137 @@ public class Java8CollectorsTest { @Test public void whenCollectingToList_shouldCollectToList() throws Exception { - final List result = givenList.stream() - .collect(toList()); + final List result = givenList.stream().collect(toList()); - assertThat(result) - .containsAll(givenList); + assertThat(result).containsAll(givenList); } @Test public void whenCollectingToList_shouldCollectToSet() throws Exception { - final Set result = givenList.stream() - .collect(toSet()); + final Set result = givenList.stream().collect(toSet()); - assertThat(result) - .containsAll(givenList); + assertThat(result).containsAll(givenList); } @Test public void whenCollectingToCollection_shouldCollectToCollection() throws Exception { - final List result = givenList.stream() - .collect(toCollection(LinkedList::new)); + final List result = givenList.stream().collect(toCollection(LinkedList::new)); - assertThat(result) - .containsAll(givenList) - .isInstanceOf(LinkedList.class); + assertThat(result).containsAll(givenList).isInstanceOf(LinkedList.class); } @Test public void whenCollectingToImmutableCollection_shouldThrowException() throws Exception { assertThatThrownBy(() -> { - givenList.stream() - .collect(toCollection(ImmutableList::of)); + givenList.stream().collect(toCollection(ImmutableList::of)); }).isInstanceOf(UnsupportedOperationException.class); } @Test public void whenCollectingToMap_shouldCollectToMap() throws Exception { - final Map result = givenList.stream() - .collect(toMap(Function.identity(), String::length)); + final Map result = givenList.stream().collect(toMap(Function.identity(), String::length)); - assertThat(result) - .containsEntry("a", 1) - .containsEntry("bb", 2) - .containsEntry("ccc", 3) - .containsEntry("dd", 2); + assertThat(result).containsEntry("a", 1).containsEntry("bb", 2).containsEntry("ccc", 3).containsEntry("dd", 2); } @Test public void whenCollectingToMap_shouldCollectToMapMerging() throws Exception { - final Map result = givenList.stream() - .collect(toMap(Function.identity(), String::length, (i1, i2) -> i1)); + final Map result = givenList.stream().collect(toMap(Function.identity(), String::length, (i1, i2) -> i1)); - assertThat(result) - .containsEntry("a", 1) - .containsEntry("bb", 2) - .containsEntry("ccc", 3) - .containsEntry("dd", 2); + assertThat(result).containsEntry("a", 1).containsEntry("bb", 2).containsEntry("ccc", 3).containsEntry("dd", 2); } @Test public void whenCollectingAndThen_shouldCollect() throws Exception { - final List result = givenList.stream() - .collect(collectingAndThen(toList(), ImmutableList::copyOf)); + final List result = givenList.stream().collect(collectingAndThen(toList(), ImmutableList::copyOf)); - assertThat(result) - .containsAll(givenList) - .isInstanceOf(ImmutableList.class); + assertThat(result).containsAll(givenList).isInstanceOf(ImmutableList.class); } @Test public void whenJoining_shouldJoin() throws Exception { - final String result = givenList.stream() - .collect(joining()); + final String result = givenList.stream().collect(joining()); - assertThat(result) - .isEqualTo("abbcccdd"); + assertThat(result).isEqualTo("abbcccdd"); } @Test public void whenJoiningWithSeparator_shouldJoinWithSeparator() throws Exception { - final String result = givenList.stream() - .collect(joining(" ")); + final String result = givenList.stream().collect(joining(" ")); - assertThat(result) - .isEqualTo("a bb ccc dd"); + assertThat(result).isEqualTo("a bb ccc dd"); } @Test public void whenJoiningWithSeparatorAndPrefixAndPostfix_shouldJoinWithSeparatorPrePost() throws Exception { - final String result = givenList.stream() - .collect(joining(" ", "PRE-", "-POST")); + final String result = givenList.stream().collect(joining(" ", "PRE-", "-POST")); - assertThat(result) - .isEqualTo("PRE-a bb ccc dd-POST"); + assertThat(result).isEqualTo("PRE-a bb ccc dd-POST"); } @Test public void whenPartitioningBy_shouldPartition() throws Exception { - final Map> result = givenList.stream() - .collect(partitioningBy(s -> s.length() > 2)); + final Map> result = givenList.stream().collect(partitioningBy(s -> s.length() > 2)); - assertThat(result) - .containsKeys(true, false) - .satisfies(booleanListMap -> { - assertThat(booleanListMap.get(true)) - .contains("ccc"); + assertThat(result).containsKeys(true, false).satisfies(booleanListMap -> { + assertThat(booleanListMap.get(true)).contains("ccc"); - assertThat(booleanListMap.get(false)) - .contains("a", "bb", "dd"); - }); + assertThat(booleanListMap.get(false)).contains("a", "bb", "dd"); + }); } @Test public void whenCounting_shouldCount() throws Exception { - final Long result = givenList.stream() - .collect(counting()); + final Long result = givenList.stream().collect(counting()); - assertThat(result) - .isEqualTo(4); + assertThat(result).isEqualTo(4); } @Test public void whenSummarizing_shouldSummarize() throws Exception { - final DoubleSummaryStatistics result = givenList.stream() - .collect(summarizingDouble(String::length)); + final DoubleSummaryStatistics result = givenList.stream().collect(summarizingDouble(String::length)); - assertThat(result.getAverage()) - .isEqualTo(2); - assertThat(result.getCount()) - .isEqualTo(4); - assertThat(result.getMax()) - .isEqualTo(3); - assertThat(result.getMin()) - .isEqualTo(1); - assertThat(result.getSum()) - .isEqualTo(8); + assertThat(result.getAverage()).isEqualTo(2); + assertThat(result.getCount()).isEqualTo(4); + assertThat(result.getMax()).isEqualTo(3); + assertThat(result.getMin()).isEqualTo(1); + assertThat(result.getSum()).isEqualTo(8); } @Test public void whenAveraging_shouldAverage() throws Exception { - final Double result = givenList.stream() - .collect(averagingDouble(String::length)); + final Double result = givenList.stream().collect(averagingDouble(String::length)); - assertThat(result) - .isEqualTo(2); + assertThat(result).isEqualTo(2); } @Test public void whenSumming_shouldSum() throws Exception { - final Double result = givenList.stream() - .collect(summingDouble(String::length)); + final Double result = givenList.stream().collect(summingDouble(String::length)); - assertThat(result) - .isEqualTo(8); + assertThat(result).isEqualTo(8); } @Test public void whenMaxingBy_shouldMaxBy() throws Exception { - final Optional result = givenList.stream() - .collect(maxBy(Comparator.naturalOrder())); + final Optional result = givenList.stream().collect(maxBy(Comparator.naturalOrder())); - assertThat(result) - .isPresent() - .hasValue("dd"); + assertThat(result).isPresent().hasValue("dd"); } @Test public void whenGroupingBy_shouldGroupBy() throws Exception { - final Map> result = givenList.stream() - .collect(groupingBy(String::length, toSet())); + final Map> result = givenList.stream().collect(groupingBy(String::length, toSet())); - assertThat(result) - .containsEntry(1, newHashSet("a")) - .containsEntry(2, newHashSet("bb", "dd")) - .containsEntry(3, newHashSet("ccc")); + assertThat(result).containsEntry(1, newHashSet("a")).containsEntry(2, newHashSet("bb", "dd")).containsEntry(3, newHashSet("ccc")); } - @Test public void whenCreatingCustomCollector_shouldCollect() throws Exception { - final ImmutableSet result = givenList.stream() - .collect(toImmutableSet()); + final ImmutableSet result = givenList.stream().collect(toImmutableSet()); - assertThat(result) - .isInstanceOf(ImmutableSet.class) - .contains("a", "bb", "ccc", "dd"); + assertThat(result).isInstanceOf(ImmutableSet.class).contains("a", "bb", "ccc", "dd"); } diff --git a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java index 5363a73afa..d337382934 100644 --- a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java +++ b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java @@ -43,7 +43,6 @@ public class CompletableFutureTest { } - public Future calculateAsyncWithCancellation() throws InterruptedException { CompletableFuture completableFuture = new CompletableFuture<>(); @@ -56,7 +55,6 @@ public class CompletableFutureTest { return completableFuture; } - @Test(expected = CancellationException.class) public void whenCancelingTheFuture_thenThrowsCancellationException() throws ExecutionException, InterruptedException { @@ -110,8 +108,7 @@ public class CompletableFutureTest { @Test public void whenUsingThenCompose_thenFuturesExecuteSequentially() throws ExecutionException, InterruptedException { - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello") - .thenCompose(s -> CompletableFuture.supplyAsync(() -> s + " World")); + CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello").thenCompose(s -> CompletableFuture.supplyAsync(() -> s + " World")); assertEquals("Hello World", completableFuture.get()); @@ -120,9 +117,7 @@ public class CompletableFutureTest { @Test public void whenUsingThenCombine_thenWaitForExecutionOfBothFutures() throws ExecutionException, InterruptedException { - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello") - .thenCombine(CompletableFuture.supplyAsync(() -> " World"), - (s1, s2) -> s1 + s2); + CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello").thenCombine(CompletableFuture.supplyAsync(() -> " World"), (s1, s2) -> s1 + s2); assertEquals("Hello World", completableFuture.get()); @@ -131,9 +126,7 @@ public class CompletableFutureTest { @Test public void whenUsingThenAcceptBoth_thenWaitForExecutionOfBothFutures() throws ExecutionException, InterruptedException { - CompletableFuture.supplyAsync(() -> "Hello") - .thenAcceptBoth(CompletableFuture.supplyAsync(() -> " World"), - (s1, s2) -> System.out.println(s1 + s2)); + CompletableFuture.supplyAsync(() -> "Hello").thenAcceptBoth(CompletableFuture.supplyAsync(() -> " World"), (s1, s2) -> System.out.println(s1 + s2)); } @@ -154,9 +147,7 @@ public class CompletableFutureTest { assertTrue(future2.isDone()); assertTrue(future3.isDone()); - String combined = Stream.of(future1, future2, future3) - .map(CompletableFuture::join) - .collect(Collectors.joining(" ")); + String combined = Stream.of(future1, future2, future3).map(CompletableFuture::join).collect(Collectors.joining(" ")); assertEquals("Hello Beautiful World", combined); diff --git a/core-java/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java b/core-java/src/test/java/com/baeldung/dateapi/JavaUtilTimeUnitTest.java similarity index 98% rename from core-java/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java rename to core-java/src/test/java/com/baeldung/dateapi/JavaUtilTimeUnitTest.java index 4bce40c2d9..e4753dbd5c 100644 --- a/core-java/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java +++ b/core-java/src/test/java/com/baeldung/dateapi/JavaUtilTimeUnitTest.java @@ -14,7 +14,7 @@ import java.time.temporal.ChronoUnit; import static org.assertj.core.api.Assertions.assertThat; -public class JavaUtilTimeTest { +public class JavaUtilTimeUnitTest { @Test public void currentTime() { diff --git a/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java b/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java similarity index 89% rename from core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java rename to core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java index e07bcc9a8d..6f3384c8eb 100644 --- a/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceTest.java +++ b/core-java/src/test/java/com/baeldung/functionalinterface/FunctionalInterfaceUnitTest.java @@ -1,7 +1,8 @@ package com.baeldung.functionalinterface; -import com.google.common.util.concurrent.Uninterruptibles; -import org.junit.Test; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.HashMap; @@ -13,54 +14,43 @@ import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; -import static org.junit.Assert.*; +import org.junit.Test; -public class FunctionalInterfaceTest { +import com.google.common.util.concurrent.Uninterruptibles; + +public class FunctionalInterfaceUnitTest { @Test public void whenPassingLambdaToComputeIfAbsent_thenTheValueGetsComputedAndPutIntoMap() { - Map nameMap = new HashMap<>(); Integer value = nameMap.computeIfAbsent("John", s -> s.length()); assertEquals(new Integer(4), nameMap.get("John")); assertEquals(new Integer(4), value); - } @Test public void whenPassingMethodReferenceToComputeIfAbsent_thenTheValueGetsComputedAndPutIntoMap() { - Map nameMap = new HashMap<>(); Integer value = nameMap.computeIfAbsent("John", String::length); assertEquals(new Integer(4), nameMap.get("John")); assertEquals(new Integer(4), value); - - } - - public byte[] transformArray(short[] array, ShortToByteFunction function) { - byte[] transformedArray = new byte[array.length]; - for (int i = 0; i < array.length; i++) { - transformedArray[i] = function.applyAsByte(array[i]); - } - return transformedArray; } @Test public void whenUsingCustomFunctionalInterfaceForPrimitives_thenCanUseItAsLambda() { - short[] array = {(short) 1, (short) 2, (short) 3}; + short[] array = { (short) 1, (short) 2, (short) 3 }; byte[] transformedArray = transformArray(array, s -> (byte) (s * 2)); - byte[] expectedArray = {(byte) 2, (byte) 4, (byte) 6}; + byte[] expectedArray = { (byte) 2, (byte) 4, (byte) 6 }; assertArrayEquals(expectedArray, transformedArray); } @Test public void whenUsingBiFunction_thenCanUseItToReplaceMapValues() { - Map salaries = new HashMap<>(); salaries.put("John", 40000); salaries.put("Freddy", 30000); @@ -71,22 +61,18 @@ public class FunctionalInterfaceTest { assertEquals(new Integer(50000), salaries.get("John")); assertEquals(new Integer(30000), salaries.get("Freddy")); assertEquals(new Integer(60000), salaries.get("Samuel")); - } - @Test public void whenPassingLambdaToThreadConstructor_thenLambdaInferredToRunnable() { - Thread thread = new Thread(() -> System.out.println("Hello From Another Thread")); thread.start(); - } @Test public void whenUsingSupplierToGenerateNumbers_thenCanUseItInStreamGenerate() { - int[] fibs = {0, 1}; + int[] fibs = { 0, 1 }; Stream fibonacci = Stream.generate(() -> { int result = fibs[1]; int fib3 = fibs[0] + fibs[1]; @@ -95,55 +81,44 @@ public class FunctionalInterfaceTest { return result; }); - List fibonacci5 = fibonacci.limit(5) - .collect(Collectors.toList()); + List fibonacci5 = fibonacci.limit(5).collect(Collectors.toList()); assertEquals(new Integer(1), fibonacci5.get(0)); assertEquals(new Integer(1), fibonacci5.get(1)); assertEquals(new Integer(2), fibonacci5.get(2)); assertEquals(new Integer(3), fibonacci5.get(3)); assertEquals(new Integer(5), fibonacci5.get(4)); - } @Test public void whenUsingConsumerInForEach_thenConsumerExecutesForEachListElement() { - List names = Arrays.asList("John", "Freddy", "Samuel"); names.forEach(name -> System.out.println("Hello, " + name)); - } @Test public void whenUsingBiConsumerInForEach_thenConsumerExecutesForEachMapElement() { - Map ages = new HashMap<>(); ages.put("John", 25); ages.put("Freddy", 24); ages.put("Samuel", 30); ages.forEach((name, age) -> System.out.println(name + " is " + age + " years old")); - } @Test public void whenUsingPredicateInFilter_thenListValuesAreFilteredOut() { - List names = Arrays.asList("Angela", "Aaron", "Bob", "Claire", "David"); - List namesWithA = names.stream() - .filter(name -> name.startsWith("A")) - .collect(Collectors.toList()); + List namesWithA = names.stream().filter(name -> name.startsWith("A")).collect(Collectors.toList()); assertEquals(2, namesWithA.size()); assertTrue(namesWithA.contains("Angela")); assertTrue(namesWithA.contains("Aaron")); - } @Test public void whenUsingUnaryOperatorWithReplaceAll_thenAllValuesInTheListAreReplaced() { - List names = Arrays.asList("bob", "josh", "megan"); names.replaceAll(String::toUpperCase); @@ -151,7 +126,6 @@ public class FunctionalInterfaceTest { assertEquals("BOB", names.get(0)); assertEquals("JOSH", names.get(1)); assertEquals("MEGAN", names.get(2)); - } @Test @@ -159,8 +133,7 @@ public class FunctionalInterfaceTest { List values = Arrays.asList(3, 5, 8, 9, 12); - int sum = values.stream() - .reduce(0, (i1, i2) -> i1 + i2); + int sum = values.stream().reduce(0, (i1, i2) -> i1 + i2); assertEquals(37, sum); @@ -178,10 +151,6 @@ public class FunctionalInterfaceTest { } - public double squareLazy(Supplier lazyValue) { - return Math.pow(lazyValue.get(), 2); - } - @Test public void whenUsingSupplierToGenerateValue_thenValueIsGeneratedLazily() { @@ -196,4 +165,18 @@ public class FunctionalInterfaceTest { } + // + + public double squareLazy(Supplier lazyValue) { + return Math.pow(lazyValue.get(), 2); + } + + public byte[] transformArray(short[] array, ShortToByteFunction function) { + byte[] transformedArray = new byte[array.length]; + for (int i = 0; i < array.length; i++) { + transformedArray[i] = function.applyAsByte(array[i]); + } + return transformedArray; + } + } diff --git a/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java b/core-java/src/test/java/com/baeldung/java/reflection/ReflectionUnitTest.java similarity index 81% rename from core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java rename to core-java/src/test/java/com/baeldung/java/reflection/ReflectionUnitTest.java index a12a2f205f..e008616c72 100644 --- a/core-java/src/test/java/com/baeldung/java/reflection/ReflectionTest.java +++ b/core-java/src/test/java/com/baeldung/java/reflection/ReflectionUnitTest.java @@ -11,7 +11,7 @@ import java.util.List; import java.util.ArrayList; import static org.junit.Assert.*; -public class ReflectionTest { +public class ReflectionUnitTest { @Test public void givenObject_whenGetsFieldNamesAtRuntime_thenCorrect() { @@ -20,8 +20,7 @@ public class ReflectionTest { List actualFieldNames = getFieldNames(fields); - assertTrue(Arrays.asList("name", "age") - .containsAll(actualFieldNames)); + assertTrue(Arrays.asList("name", "age").containsAll(actualFieldNames)); } @Test @@ -35,8 +34,7 @@ public class ReflectionTest { } @Test - public void givenClassName_whenCreatesObject_thenCorrect() - throws ClassNotFoundException { + public void givenClassName_whenCreatesObject_thenCorrect() throws ClassNotFoundException { Class clazz = Class.forName("com.baeldung.java.reflection.Goat"); assertEquals("Goat", clazz.getSimpleName()); @@ -45,8 +43,7 @@ public class ReflectionTest { } @Test - public void givenClass_whenRecognisesModifiers_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenRecognisesModifiers_thenCorrect() throws ClassNotFoundException { Class goatClass = Class.forName("com.baeldung.java.reflection.Goat"); Class animalClass = Class.forName("com.baeldung.java.reflection.Animal"); int goatMods = goatClass.getModifiers(); @@ -80,8 +77,7 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsImplementedInterfaces_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenGetsImplementedInterfaces_thenCorrect() throws ClassNotFoundException { Class goatClass = Class.forName("com.baeldung.java.reflection.Goat"); Class animalClass = Class.forName("com.baeldung.java.reflection.Animal"); Class[] goatInterfaces = goatClass.getInterfaces(); @@ -94,8 +90,7 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsConstructor_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenGetsConstructor_thenCorrect() throws ClassNotFoundException { Class goatClass = Class.forName("com.baeldung.java.reflection.Goat"); Constructor[] constructors = goatClass.getConstructors(); @@ -104,8 +99,7 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsFields_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenGetsFields_thenCorrect() throws ClassNotFoundException { Class animalClass = Class.forName("com.baeldung.java.reflection.Animal"); Field[] fields = animalClass.getDeclaredFields(); @@ -116,20 +110,17 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsMethods_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenGetsMethods_thenCorrect() throws ClassNotFoundException { Class animalClass = Class.forName("com.baeldung.java.reflection.Animal"); Method[] methods = animalClass.getDeclaredMethods(); List actualMethods = getMethodNames(methods); assertEquals(4, actualMethods.size()); - assertTrue(actualMethods.containsAll(Arrays.asList("getName", - "setName", "getSound"))); + assertTrue(actualMethods.containsAll(Arrays.asList("getName", "setName", "getSound"))); } @Test - public void givenClass_whenGetsAllConstructors_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenGetsAllConstructors_thenCorrect() throws ClassNotFoundException { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Constructor[] constructors = birdClass.getConstructors(); @@ -137,24 +128,20 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsEachConstructorByParamTypes_thenCorrect() - throws Exception { + public void givenClass_whenGetsEachConstructorByParamTypes_thenCorrect() throws Exception { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Constructor cons1 = birdClass.getConstructor(); Constructor cons2 = birdClass.getConstructor(String.class); - Constructor cons3 = birdClass.getConstructor(String.class, - boolean.class); + Constructor cons3 = birdClass.getConstructor(String.class, boolean.class); } @Test - public void givenClass_whenInstantiatesObjectsAtRuntime_thenCorrect() - throws Exception { + public void givenClass_whenInstantiatesObjectsAtRuntime_thenCorrect() throws Exception { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Constructor cons1 = birdClass.getConstructor(); Constructor cons2 = birdClass.getConstructor(String.class); - Constructor cons3 = birdClass.getConstructor(String.class, - boolean.class); + Constructor cons3 = birdClass.getConstructor(String.class, boolean.class); Bird bird1 = (Bird) cons1.newInstance(); Bird bird2 = (Bird) cons2.newInstance("Weaver bird"); @@ -168,8 +155,7 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsPublicFields_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenGetsPublicFields_thenCorrect() throws ClassNotFoundException { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Field[] fields = birdClass.getFields(); assertEquals(1, fields.length); @@ -178,8 +164,7 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsPublicFieldByName_thenCorrect() - throws Exception { + public void givenClass_whenGetsPublicFieldByName_thenCorrect() throws Exception { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Field field = birdClass.getField("CATEGORY"); assertEquals("CATEGORY", field.getName()); @@ -187,8 +172,7 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsDeclaredFields_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenGetsDeclaredFields_thenCorrect() throws ClassNotFoundException { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Field[] fields = birdClass.getDeclaredFields(); assertEquals(1, fields.length); @@ -196,8 +180,7 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsFieldsByName_thenCorrect() - throws Exception { + public void givenClass_whenGetsFieldsByName_thenCorrect() throws Exception { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Field field = birdClass.getDeclaredField("walks"); assertEquals("walks", field.getName()); @@ -205,17 +188,14 @@ public class ReflectionTest { } @Test - public void givenClassField_whenGetsType_thenCorrect() - throws Exception { - Field field = Class.forName("com.baeldung.java.reflection.Bird") - .getDeclaredField("walks"); + public void givenClassField_whenGetsType_thenCorrect() throws Exception { + Field field = Class.forName("com.baeldung.java.reflection.Bird").getDeclaredField("walks"); Class fieldClass = field.getType(); assertEquals("boolean", fieldClass.getSimpleName()); } @Test - public void givenClassField_whenSetsAndGetsValue_thenCorrect() - throws Exception { + public void givenClassField_whenSetsAndGetsValue_thenCorrect() throws Exception { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Bird bird = (Bird) birdClass.newInstance(); Field field = birdClass.getDeclaredField("walks"); @@ -232,8 +212,7 @@ public class ReflectionTest { } @Test - public void givenClassField_whenGetsAndSetsWithNull_thenCorrect() - throws Exception { + public void givenClassField_whenGetsAndSetsWithNull_thenCorrect() throws Exception { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Field field = birdClass.getField("CATEGORY"); field.setAccessible(true); @@ -242,21 +221,17 @@ public class ReflectionTest { } @Test - public void givenClass_whenGetsAllPublicMethods_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenGetsAllPublicMethods_thenCorrect() throws ClassNotFoundException { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Method[] methods = birdClass.getMethods(); List methodNames = getMethodNames(methods); - assertTrue(methodNames.containsAll(Arrays - .asList("equals", "notifyAll", "hashCode", - "walks", "eats", "toString"))); + assertTrue(methodNames.containsAll(Arrays.asList("equals", "notifyAll", "hashCode", "walks", "eats", "toString"))); } @Test - public void givenClass_whenGetsOnlyDeclaredMethods_thenCorrect() - throws ClassNotFoundException { + public void givenClass_whenGetsOnlyDeclaredMethods_thenCorrect() throws ClassNotFoundException { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); List actualMethodNames = getMethodNames(birdClass.getDeclaredMethods()); @@ -269,12 +244,10 @@ public class ReflectionTest { } @Test - public void givenMethodName_whenGetsMethod_thenCorrect() - throws Exception { + public void givenMethodName_whenGetsMethod_thenCorrect() throws Exception { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Method walksMethod = birdClass.getDeclaredMethod("walks"); - Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", - boolean.class); + Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", boolean.class); assertFalse(walksMethod.isAccessible()); assertFalse(setWalksMethod.isAccessible()); @@ -288,12 +261,10 @@ public class ReflectionTest { } @Test - public void givenMethod_whenInvokes_thenCorrect() - throws Exception { + public void givenMethod_whenInvokes_thenCorrect() throws Exception { Class birdClass = Class.forName("com.baeldung.java.reflection.Bird"); Bird bird = (Bird) birdClass.newInstance(); - Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", - boolean.class); + Method setWalksMethod = birdClass.getDeclaredMethod("setWalks", boolean.class); Method walksMethod = birdClass.getDeclaredMethod("walks"); boolean walks = (boolean) walksMethod.invoke(bird); @@ -308,19 +279,19 @@ public class ReflectionTest { } - private static List getFieldNames(Field[] fields) { - List fieldNames = new ArrayList<>(); - for (Field field : fields) - fieldNames.add(field.getName()); - return fieldNames; + private static List getFieldNames(Field[] fields) { + List fieldNames = new ArrayList<>(); + for (Field field : fields) + fieldNames.add(field.getName()); + return fieldNames; - } + } - private static List getMethodNames(Method[] methods) { - List methodNames = new ArrayList<>(); - for (Method method : methods) - methodNames.add(method.getName()); - return methodNames; - } + private static List getMethodNames(Method[] methods) { + List methodNames = new ArrayList<>(); + for (Method method : methods) + methodNames.add(method.getName()); + return methodNames; + } } diff --git a/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java b/core-java/src/test/java/com/baeldung/java/regex/RegexUnitTest.java similarity index 99% rename from core-java/src/test/java/com/baeldung/java/regex/RegexTest.java rename to core-java/src/test/java/com/baeldung/java/regex/RegexUnitTest.java index 414401eb85..e4ea55aae3 100644 --- a/core-java/src/test/java/com/baeldung/java/regex/RegexTest.java +++ b/core-java/src/test/java/com/baeldung/java/regex/RegexUnitTest.java @@ -7,7 +7,7 @@ import java.util.regex.Pattern; import org.junit.Test; -public class RegexTest { +public class RegexUnitTest { private static Pattern pattern; private static Matcher matcher; @@ -499,4 +499,3 @@ public class RegexTest { return matches; } } - diff --git a/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotUnitTest.java similarity index 93% rename from core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java rename to core-java/src/test/java/com/baeldung/printscreen/ScreenshotUnitTest.java index 7e35fc3e30..650abc301a 100644 --- a/core-java/src/test/java/com/baeldung/printscreen/ScreenshotTest.java +++ b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotUnitTest.java @@ -7,8 +7,7 @@ import java.io.File; import static org.junit.Assert.assertTrue; - -public class ScreenshotTest { +public class ScreenshotUnitTest { private Screenshot screenshot = new Screenshot("Screenshot.jpg"); private File file = new File("Screenshot.jpg"); diff --git a/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java b/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java index fcf353281d..50af34d61a 100644 --- a/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java +++ b/core-java/src/test/java/com/baeldung/socket/EchoMultiTest.java @@ -17,43 +17,43 @@ public class EchoMultiTest { Thread.sleep(500); } - @Test - public void givenClient1_whenServerResponds_thenCorrect() { - EchoClient client = new EchoClient(); - client.startConnection("127.0.0.1", PORT); - String msg1 = client.sendMessage("hello"); - String msg2 = client.sendMessage("world"); - String terminate = client.sendMessage("."); + @Test + public void givenClient1_whenServerResponds_thenCorrect() { + EchoClient client = new EchoClient(); + client.startConnection("127.0.0.1", PORT); + String msg1 = client.sendMessage("hello"); + String msg2 = client.sendMessage("world"); + String terminate = client.sendMessage("."); - assertEquals(msg1, "hello"); - assertEquals(msg2, "world"); - assertEquals(terminate, "bye"); - client.stopConnection(); - } + assertEquals(msg1, "hello"); + assertEquals(msg2, "world"); + assertEquals(terminate, "bye"); + client.stopConnection(); + } - @Test - public void givenClient2_whenServerResponds_thenCorrect() { - EchoClient client = new EchoClient(); - client.startConnection("127.0.0.1", PORT); - String msg1 = client.sendMessage("hello"); - String msg2 = client.sendMessage("world"); - String terminate = client.sendMessage("."); - assertEquals(msg1, "hello"); - assertEquals(msg2, "world"); - assertEquals(terminate, "bye"); - client.stopConnection(); - } + @Test + public void givenClient2_whenServerResponds_thenCorrect() { + EchoClient client = new EchoClient(); + client.startConnection("127.0.0.1", PORT); + String msg1 = client.sendMessage("hello"); + String msg2 = client.sendMessage("world"); + String terminate = client.sendMessage("."); + assertEquals(msg1, "hello"); + assertEquals(msg2, "world"); + assertEquals(terminate, "bye"); + client.stopConnection(); + } - @Test - public void givenClient3_whenServerResponds_thenCorrect() { - EchoClient client = new EchoClient(); - client.startConnection("127.0.0.1", PORT); - String msg1 = client.sendMessage("hello"); - String msg2 = client.sendMessage("world"); - String terminate = client.sendMessage("."); - assertEquals(msg1, "hello"); - assertEquals(msg2, "world"); - assertEquals(terminate, "bye"); - client.stopConnection(); - } + @Test + public void givenClient3_whenServerResponds_thenCorrect() { + EchoClient client = new EchoClient(); + client.startConnection("127.0.0.1", PORT); + String msg1 = client.sendMessage("hello"); + String msg2 = client.sendMessage("world"); + String terminate = client.sendMessage("."); + assertEquals(msg1, "hello"); + assertEquals(msg2, "world"); + assertEquals(terminate, "bye"); + client.stopConnection(); + } } diff --git a/core-java/src/test/java/com/baeldung/socket/EchoTest.java b/core-java/src/test/java/com/baeldung/socket/EchoTest.java index cb09d42f79..6c93646ba6 100644 --- a/core-java/src/test/java/com/baeldung/socket/EchoTest.java +++ b/core-java/src/test/java/com/baeldung/socket/EchoTest.java @@ -18,28 +18,28 @@ public class EchoTest { Thread.sleep(500); } - private EchoClient client = new EchoClient(); + private EchoClient client = new EchoClient(); - @Before - public void init() { - client.startConnection("127.0.0.1", PORT); - } + @Before + public void init() { + client.startConnection("127.0.0.1", PORT); + } - @Test - public void givenClient_whenServerEchosMessage_thenCorrect() { + @Test + public void givenClient_whenServerEchosMessage_thenCorrect() { - String resp1 = client.sendMessage("hello"); - String resp2 = client.sendMessage("world"); - String resp3 = client.sendMessage("!"); - String resp4 = client.sendMessage("."); - assertEquals("hello", resp1); - assertEquals("world", resp2); - assertEquals("!", resp3); - assertEquals("good bye", resp4); - } + String resp1 = client.sendMessage("hello"); + String resp2 = client.sendMessage("world"); + String resp3 = client.sendMessage("!"); + String resp4 = client.sendMessage("."); + assertEquals("hello", resp1); + assertEquals("world", resp2); + assertEquals("!", resp3); + assertEquals("good bye", resp4); + } - @After - public void tearDown() { - client.stopConnection(); - } + @After + public void tearDown() { + client.stopConnection(); + } } diff --git a/core-java/src/test/java/com/baeldung/socket/GreetServerTest.java b/core-java/src/test/java/com/baeldung/socket/GreetServerIntegrationTest.java similarity index 90% rename from core-java/src/test/java/com/baeldung/socket/GreetServerTest.java rename to core-java/src/test/java/com/baeldung/socket/GreetServerIntegrationTest.java index caf56a8c76..06b37d8539 100644 --- a/core-java/src/test/java/com/baeldung/socket/GreetServerTest.java +++ b/core-java/src/test/java/com/baeldung/socket/GreetServerIntegrationTest.java @@ -9,7 +9,7 @@ import java.util.concurrent.Executors; import static org.junit.Assert.assertEquals; -public class GreetServerTest { +public class GreetServerIntegrationTest { private GreetClient client; @@ -24,7 +24,7 @@ public class GreetServerTest { @Before public void init() { client = new GreetClient(); - client.startConnection("127.0.0.1", PORT); + client.startConnection("127.0.0.1", PORT); } diff --git a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java index 23be2200d3..d701babc20 100644 --- a/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java +++ b/core-java/src/test/java/org/baeldung/core/exceptions/FileNotFoundExceptionTest.java @@ -42,7 +42,7 @@ public class FileNotFoundExceptionTest { LOG.error("Optional file " + fileName + " was not found.", ex); } } - + private void readFailingFile() throws IOException { BufferedReader rd = new BufferedReader(new FileReader(new File(fileName))); rd.readLine(); diff --git a/core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java b/core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java similarity index 94% rename from core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java rename to core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java index 16f25ae021..603b0bfbf9 100644 --- a/core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassTest.java +++ b/core-java/src/test/java/org/baeldung/equalshashcode/entities/PrimitiveClassUnitTest.java @@ -3,7 +3,7 @@ package org.baeldung.equalshashcode.entities; import org.junit.Assert; import org.junit.Test; -public class PrimitiveClassTest { +public class PrimitiveClassUnitTest { @Test public void testTwoEqualsObjects() { diff --git a/core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java b/core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassUnitTest.java similarity index 94% rename from core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java rename to core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassUnitTest.java index 52d024a696..0943436883 100644 --- a/core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassTest.java +++ b/core-java/src/test/java/org/baeldung/equalshashcode/entities/SquareClassUnitTest.java @@ -5,11 +5,10 @@ import java.awt.Color; import org.junit.Assert; import org.junit.Test; -public class SquareClassTest { +public class SquareClassUnitTest { @Test public void testEqualsAndHashcodes() { - Square aObject = new Square(10, Color.BLUE); Square bObject = new Square(10, Color.BLUE); diff --git a/core-java/src/test/java/org/baeldung/java/arrays/ArraysJoinAndSplitJUnitTest.java b/core-java/src/test/java/org/baeldung/java/arrays/ArraysJoinAndSplitJUnitTest.java index ad1f2dc70c..885c3bcd6c 100644 --- a/core-java/src/test/java/org/baeldung/java/arrays/ArraysJoinAndSplitJUnitTest.java +++ b/core-java/src/test/java/org/baeldung/java/arrays/ArraysJoinAndSplitJUnitTest.java @@ -7,11 +7,11 @@ import org.junit.Test; public class ArraysJoinAndSplitJUnitTest { - private final String[] sauces = {"Marinara", "Olive Oil"}; - private final String[] cheeses = {"Mozzarella", "Feta", "Parmesan"}; - private final String[] vegetables = {"Olives", "Spinach", "Green Peppers"}; + private final String[] sauces = { "Marinara", "Olive Oil" }; + private final String[] cheeses = { "Mozzarella", "Feta", "Parmesan" }; + private final String[] vegetables = { "Olives", "Spinach", "Green Peppers" }; - private final String[] customers = {"Jay", "Harry", "Ronnie", "Gary", "Ross"}; + private final String[] customers = { "Jay", "Harry", "Ronnie", "Gary", "Ross" }; @Test public void givenThreeStringArrays_whenJoiningIntoOneStringArray_shouldSucceed() { @@ -25,12 +25,9 @@ public class ArraysJoinAndSplitJUnitTest { System.arraycopy(vegetables, 0, toppings, AddedSoFar, vegetables.length); - Assert.assertArrayEquals(toppings, - new String[]{"Marinara", "Olive Oil", "Mozzarella", "Feta", - "Parmesan", "Olives", "Spinach", "Green Peppers"}); + Assert.assertArrayEquals(toppings, new String[] { "Marinara", "Olive Oil", "Mozzarella", "Feta", "Parmesan", "Olives", "Spinach", "Green Peppers" }); } - @Test public void givenOneStringArray_whenSplittingInHalfTwoStringArrays_shouldSucceed() { int ordersHalved = (customers.length / 2) + (customers.length % 2); @@ -38,7 +35,7 @@ public class ArraysJoinAndSplitJUnitTest { String[] driverOne = Arrays.copyOf(customers, ordersHalved); String[] driverTwo = Arrays.copyOfRange(customers, ordersHalved, customers.length); - Assert.assertArrayEquals(driverOne, new String[]{"Jay", "Harry", "Ronnie"}); - Assert.assertArrayEquals(driverTwo, new String[]{"Gary", "Ross"}); + Assert.assertArrayEquals(driverOne, new String[] { "Jay", "Harry", "Ronnie" }); + Assert.assertArrayEquals(driverTwo, new String[] { "Gary", "Ross" }); } } 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 30b0111555..6f291c535f 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,10 +18,7 @@ public class ArrayListTest { @Before public void setUp() { - List list = LongStream.range(0, 16) - .boxed() - .map(Long::toHexString) - .collect(toCollection(ArrayList::new)); + List list = LongStream.range(0, 16).boxed().map(Long::toHexString).collect(toCollection(ArrayList::new)); stringsToSearch = new ArrayList<>(list); stringsToSearch.addAll(list); } @@ -34,8 +31,7 @@ public class ArrayListTest { @Test public void givenCollection_whenProvideItToArrayListCtor_thenArrayListIsPopulatedWithItsElements() { - Collection numbers = - IntStream.range(0, 10).boxed().collect(toSet()); + Collection numbers = IntStream.range(0, 10).boxed().collect(toSet()); List list = new ArrayList<>(numbers); assertEquals(10, list.size()); @@ -56,8 +52,7 @@ public class ArrayListTest { @Test public void givenCollection_whenAddToArrayList_thenIsAdded() { List list = new ArrayList<>(Arrays.asList(1L, 2L, 3L)); - LongStream.range(4, 10).boxed() - .collect(collectingAndThen(toCollection(ArrayList::new), ys -> list.addAll(0, ys))); + LongStream.range(4, 10).boxed().collect(collectingAndThen(toCollection(ArrayList::new), ys -> list.addAll(0, ys))); assertThat(Arrays.asList(4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo(list)); } @@ -88,10 +83,7 @@ public class ArrayListTest { public void givenPredicate_whenIterateArrayList_thenFindAllElementsSatisfyingPredicate() { Set matchingStrings = new HashSet<>(Arrays.asList("a", "c", "9")); - List result = stringsToSearch - .stream() - .filter(matchingStrings::contains) - .collect(toCollection(ArrayList::new)); + List result = stringsToSearch.stream().filter(matchingStrings::contains).collect(toCollection(ArrayList::new)); assertEquals(6, result.size()); } @@ -131,8 +123,7 @@ public class ArrayListTest { @Test public void givenCondition_whenIterateArrayList_thenRemoveAllElementsSatisfyingCondition() { - Set matchingStrings - = Sets.newHashSet("a", "b", "c", "d", "e", "f"); + Set matchingStrings = Sets.newHashSet("a", "b", "c", "d", "e", "f"); Iterator it = stringsToSearch.iterator(); while (it.hasNext()) { diff --git a/core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java b/core-java/src/test/java/org/baeldung/java/enums/PizzaUnitTest.java similarity index 60% rename from core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java rename to core-java/src/test/java/org/baeldung/java/enums/PizzaUnitTest.java index a6814ee600..cc042eeca9 100644 --- a/core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java +++ b/core-java/src/test/java/org/baeldung/java/enums/PizzaUnitTest.java @@ -1,21 +1,21 @@ package org.baeldung.java.enums; - -import com.baeldung.enums.Pizza; -import org.junit.Test; +import static junit.framework.TestCase.assertTrue; import java.util.ArrayList; import java.util.EnumMap; import java.util.List; -import static junit.framework.TestCase.assertTrue; +import org.junit.Test; +import com.baeldung.enums.Pizza; + +public class PizzaUnitTest { -public class PizzaTest { @Test public void givenPizaOrder_whenReady_thenDeliverable() { Pizza testPz = new Pizza(); - testPz.setStatus(Pizza.PizzaStatus.READY); + testPz.setStatus(Pizza.PizzaStatusEnum.READY); assertTrue(testPz.isDeliverable()); } @@ -23,16 +23,16 @@ public class PizzaTest { public void givenPizaOrders_whenRetrievingUnDeliveredPzs_thenCorrectlyRetrieved() { List pzList = new ArrayList<>(); Pizza pz1 = new Pizza(); - pz1.setStatus(Pizza.PizzaStatus.DELIVERED); + pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); Pizza pz2 = new Pizza(); - pz2.setStatus(Pizza.PizzaStatus.ORDERED); + pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); Pizza pz3 = new Pizza(); - pz3.setStatus(Pizza.PizzaStatus.ORDERED); + pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); Pizza pz4 = new Pizza(); - pz4.setStatus(Pizza.PizzaStatus.READY); + pz4.setStatus(Pizza.PizzaStatusEnum.READY); pzList.add(pz1); pzList.add(pz2); @@ -48,33 +48,34 @@ public class PizzaTest { List pzList = new ArrayList<>(); Pizza pz1 = new Pizza(); - pz1.setStatus(Pizza.PizzaStatus.DELIVERED); + pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); Pizza pz2 = new Pizza(); - pz2.setStatus(Pizza.PizzaStatus.ORDERED); + pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); Pizza pz3 = new Pizza(); - pz3.setStatus(Pizza.PizzaStatus.ORDERED); + pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); Pizza pz4 = new Pizza(); - pz4.setStatus(Pizza.PizzaStatus.READY); + pz4.setStatus(Pizza.PizzaStatusEnum.READY); pzList.add(pz1); pzList.add(pz2); pzList.add(pz3); pzList.add(pz4); - EnumMap> map = Pizza.groupPizzaByStatus(pzList); - assertTrue(map.get(Pizza.PizzaStatus.DELIVERED).size() == 1); - assertTrue(map.get(Pizza.PizzaStatus.ORDERED).size() == 2); - assertTrue(map.get(Pizza.PizzaStatus.READY).size() == 1); + EnumMap> map = Pizza.groupPizzaByStatus(pzList); + assertTrue(map.get(Pizza.PizzaStatusEnum.DELIVERED).size() == 1); + assertTrue(map.get(Pizza.PizzaStatusEnum.ORDERED).size() == 2); + assertTrue(map.get(Pizza.PizzaStatusEnum.READY).size() == 1); } @Test public void givenPizaOrder_whenDelivered_thenPizzaGetsDeliveredAndStatusChanges() { Pizza pz = new Pizza(); - pz.setStatus(Pizza.PizzaStatus.READY); + pz.setStatus(Pizza.PizzaStatusEnum.READY); pz.deliver(); - assertTrue(pz.getStatus() == Pizza.PizzaStatus.DELIVERED); + assertTrue(pz.getStatus() == Pizza.PizzaStatusEnum.DELIVERED); } + } diff --git a/core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileTest.java b/core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileIntegrationTest.java similarity index 98% rename from core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileTest.java rename to core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileIntegrationTest.java index e679b82d3f..b87f6e606f 100644 --- a/core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileTest.java +++ b/core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileIntegrationTest.java @@ -23,7 +23,7 @@ import java.util.Scanner; import org.junit.Test; -public class JavaReadFromFileTest { +public class JavaReadFromFileIntegrationTest { @Test public void whenReadWithBufferedReader_thenCorrect() throws IOException { @@ -111,7 +111,7 @@ public class JavaReadFromFileTest { @Test public void whenReadUTFEncodedFile_thenCorrect() throws IOException { - final String expected_value = "é’空"; + final String expected_value = "é?’空"; final BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("src/test/resources/test_read7.in"), "UTF-8")); final String currentLine = reader.readLine(); reader.close(); diff --git a/core-java/src/test/java/org/baeldung/java/io/JavaScannerTest.java b/core-java/src/test/java/org/baeldung/java/io/JavaScannerIntegrationTest.java similarity index 99% rename from core-java/src/test/java/org/baeldung/java/io/JavaScannerTest.java rename to core-java/src/test/java/org/baeldung/java/io/JavaScannerIntegrationTest.java index 61f0f52316..89a84d9d7d 100644 --- a/core-java/src/test/java/org/baeldung/java/io/JavaScannerTest.java +++ b/core-java/src/test/java/org/baeldung/java/io/JavaScannerIntegrationTest.java @@ -15,7 +15,7 @@ import java.util.Scanner; import org.junit.Test; -public class JavaScannerTest { +public class JavaScannerIntegrationTest { @Test public void whenReadFileWithScanner_thenCorrect() throws IOException { diff --git a/core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileTest.java b/core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileIntegrationTest.java similarity index 99% rename from core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileTest.java rename to core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileIntegrationTest.java index 93cfffa39d..54b40a070c 100644 --- a/core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileTest.java +++ b/core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileIntegrationTest.java @@ -26,7 +26,7 @@ import java.nio.file.Paths; import org.junit.Test; -public class JavaWriteToFileTest { +public class JavaWriteToFileIntegrationTest { private String fileName = "src/test/resources/test_write.txt"; private String fileName1 = "src/test/resources/test_write_1.txt"; diff --git a/core-java/src/test/java/org/baeldung/java/lists/ListAssertJTest.java b/core-java/src/test/java/org/baeldung/java/lists/ListAssertJUnitTest.java similarity index 83% rename from core-java/src/test/java/org/baeldung/java/lists/ListAssertJTest.java rename to core-java/src/test/java/org/baeldung/java/lists/ListAssertJUnitTest.java index b8926946a9..c609f5badb 100644 --- a/core-java/src/test/java/org/baeldung/java/lists/ListAssertJTest.java +++ b/core-java/src/test/java/org/baeldung/java/lists/ListAssertJUnitTest.java @@ -7,7 +7,7 @@ import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -public class ListAssertJTest { +public class ListAssertJUnitTest { private final List list1 = Arrays.asList("1", "2", "3", "4"); private final List list2 = Arrays.asList("1", "2", "3", "4"); @@ -15,9 +15,7 @@ public class ListAssertJTest { @Test public void whenTestingForEquality_ShouldBeEqual() throws Exception { - assertThat(list1) - .isEqualTo(list2) - .isNotEqualTo(list3); + assertThat(list1).isEqualTo(list2).isNotEqualTo(list3); assertThat(list1.equals(list2)).isTrue(); assertThat(list1.equals(list3)).isFalse(); diff --git a/core-java/src/test/java/org/baeldung/java/lists/ListTestNGTest.java b/core-java/src/test/java/org/baeldung/java/lists/ListTestNgUnitTest.java similarity index 94% rename from core-java/src/test/java/org/baeldung/java/lists/ListTestNGTest.java rename to core-java/src/test/java/org/baeldung/java/lists/ListTestNgUnitTest.java index fa80d0e224..b7c2bd7272 100644 --- a/core-java/src/test/java/org/baeldung/java/lists/ListTestNGTest.java +++ b/core-java/src/test/java/org/baeldung/java/lists/ListTestNgUnitTest.java @@ -6,7 +6,7 @@ import org.testng.annotations.Test; import java.util.Arrays; import java.util.List; -public class ListTestNGTest { +public class ListTestNgUnitTest { private final List list1 = Arrays.asList("1", "2", "3", "4"); private final List list2 = Arrays.asList("1", "2", "3", "4"); diff --git a/core-java/src/test/java/org/baeldung/java/md5/JavaMD5Test.java b/core-java/src/test/java/org/baeldung/java/md5/JavaMD5UnitTest.java similarity index 77% rename from core-java/src/test/java/org/baeldung/java/md5/JavaMD5Test.java rename to core-java/src/test/java/org/baeldung/java/md5/JavaMD5UnitTest.java index 83f1fb33b6..55e71470c8 100644 --- a/core-java/src/test/java/org/baeldung/java/md5/JavaMD5Test.java +++ b/core-java/src/test/java/org/baeldung/java/md5/JavaMD5UnitTest.java @@ -1,9 +1,10 @@ package org.baeldung.java.md5; -import static org.junit.Assert.*; +import static org.assertj.core.api.Assertions.assertThat; +import java.io.File; +import java.io.IOException; import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.Paths; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; @@ -11,80 +12,64 @@ import java.security.NoSuchAlgorithmException; import javax.xml.bind.DatatypeConverter; import org.apache.commons.codec.digest.DigestUtils; -import org.junit.Before; import org.junit.Test; import com.google.common.hash.HashCode; import com.google.common.hash.Hashing; -import java.io.File; -import java.io.IOException; -import java.nio.*; -import static org.assertj.core.api.Assertions.assertThat; +public class JavaMD5UnitTest { - -public class JavaMD5Test { - - String filename = "src/test/resources/test_md5.txt"; String checksum = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; - + String hash = "35454B055CC325EA1AF2126E27707052"; String password = "ILoveJava"; - - - + @Test public void givenPassword_whenHashing_thenVerifying() throws NoSuchAlgorithmException { String hash = "35454B055CC325EA1AF2126E27707052"; String password = "ILoveJava"; - + MessageDigest md = MessageDigest.getInstance("MD5"); md.update(password.getBytes()); byte[] digest = md.digest(); String myHash = DatatypeConverter.printHexBinary(digest).toUpperCase(); - + assertThat(myHash.equals(hash)).isTrue(); } - + @Test public void givenFile_generatingChecksum_thenVerifying() throws NoSuchAlgorithmException, IOException { String filename = "src/test/resources/test_md5.txt"; String checksum = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; - + MessageDigest md = MessageDigest.getInstance("MD5"); md.update(Files.readAllBytes(Paths.get(filename))); byte[] digest = md.digest(); - String myChecksum = DatatypeConverter - .printHexBinary(digest).toUpperCase(); - + String myChecksum = DatatypeConverter.printHexBinary(digest).toUpperCase(); + assertThat(myChecksum.equals(checksum)).isTrue(); } - + @Test - public void givenPassword_whenHashingUsingCommons_thenVerifying() { + public void givenPassword_whenHashingUsingCommons_thenVerifying() { String hash = "35454B055CC325EA1AF2126E27707052"; String password = "ILoveJava"; - String md5Hex = DigestUtils - .md5Hex(password).toUpperCase(); - + String md5Hex = DigestUtils.md5Hex(password).toUpperCase(); + assertThat(md5Hex.equals(hash)).isTrue(); } - - + @Test public void givenFile_whenChecksumUsingGuava_thenVerifying() throws IOException { String filename = "src/test/resources/test_md5.txt"; String checksum = "5EB63BBBE01EEED093CB22BB8F5ACDC3"; - - HashCode hash = com.google.common.io.Files - .hash(new File(filename), Hashing.md5()); - String myChecksum = hash.toString() - .toUpperCase(); - + + HashCode hash = com.google.common.io.Files.hash(new File(filename), Hashing.md5()); + String myChecksum = hash.toString().toUpperCase(); + assertThat(myChecksum.equals(checksum)).isTrue(); } - } diff --git a/core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaTest.java b/core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaUnitTest.java similarity index 98% rename from core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaTest.java rename to core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaUnitTest.java index 5127ccb10c..6bd29982dc 100644 --- a/core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaTest.java +++ b/core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaUnitTest.java @@ -6,7 +6,7 @@ import java.util.TimerTask; import org.junit.Test; -public class SandboxJavaTest { +public class SandboxJavaUnitTest { @Test public void givenUsingTimer_whenSchedulingTimerTaskOnce_thenCorrect() throws InterruptedException { From 5e676c855e96d52d6efc4a2a52fa74d99b50dcbd Mon Sep 17 00:00:00 2001 From: eugenp Date: Tue, 25 Oct 2016 11:15:13 +0300 Subject: [PATCH 280/309] testing work --- core-java/pom.xml | 2 + ...CompletableFutureLongRunningUnitTest.java} | 42 ++++--------------- ...tegrationTest.java => JavaIoUnitTest.java} | 2 +- ...java => JavaTimerLongRunningUnitTest.java} | 2 +- ...grationTest.java => JavaFileUnitTest.java} | 2 +- ...est.java => JavaReadFromFileUnitTest.java} | 2 +- ...tionTest.java => JavaScannerUnitTest.java} | 2 +- ...Test.java => JavaWriteToFileUnitTest.java} | 2 +- ...itTest.java => SandboxJavaManualTest.java} | 2 +- 9 files changed, 18 insertions(+), 40 deletions(-) rename core-java/src/test/java/com/baeldung/completablefuture/{CompletableFutureTest.java => CompletableFutureLongRunningUnitTest.java} (96%) rename core-java/src/test/java/org/baeldung/java/{JavaIoIntegrationTest.java => JavaIoUnitTest.java} (98%) rename core-java/src/test/java/org/baeldung/java/{JavaTimerUnitTest.java => JavaTimerLongRunningUnitTest.java} (98%) rename core-java/src/test/java/org/baeldung/java/io/{JavaFileIntegrationTest.java => JavaFileUnitTest.java} (99%) rename core-java/src/test/java/org/baeldung/java/io/{JavaReadFromFileIntegrationTest.java => JavaReadFromFileUnitTest.java} (99%) rename core-java/src/test/java/org/baeldung/java/io/{JavaScannerIntegrationTest.java => JavaScannerUnitTest.java} (99%) rename core-java/src/test/java/org/baeldung/java/io/{JavaWriteToFileIntegrationTest.java => JavaWriteToFileUnitTest.java} (99%) rename core-java/src/test/java/org/baeldung/java/sandbox/{SandboxJavaUnitTest.java => SandboxJavaManualTest.java} (98%) diff --git a/core-java/pom.xml b/core-java/pom.xml index 75608b59ba..b39e356977 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -162,6 +162,8 @@ **/*IntegrationTest.java + **/*LongRunningUnitTest.java + **/*ManualTest.java diff --git a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java similarity index 96% rename from core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java rename to core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java index d337382934..2500bf590a 100644 --- a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureTest.java +++ b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java @@ -1,24 +1,26 @@ package com.baeldung.completablefuture; -import java.util.concurrent.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.util.concurrent.CancellationException; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.stream.Collectors; import java.util.stream.Stream; import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -public class CompletableFutureTest { +public class CompletableFutureLongRunningUnitTest { @Test public void whenRunningCompletableFutureAsynchronously_thenGetMethodWaitsForResult() throws InterruptedException, ExecutionException { - Future completableFuture = calculateAsync(); String result = completableFuture.get(); assertEquals("Hello", result); - } public Future calculateAsync() throws InterruptedException { @@ -35,12 +37,10 @@ public class CompletableFutureTest { @Test public void whenRunningCompletableFutureWithResult_thenGetMethodReturnsImmediately() throws InterruptedException, ExecutionException { - Future completableFuture = CompletableFuture.completedFuture("Hello"); String result = completableFuture.get(); assertEquals("Hello", result); - } public Future calculateAsyncWithCancellation() throws InterruptedException { @@ -57,82 +57,65 @@ public class CompletableFutureTest { @Test(expected = CancellationException.class) public void whenCancelingTheFuture_thenThrowsCancellationException() throws ExecutionException, InterruptedException { - Future future = calculateAsyncWithCancellation(); future.get(); - } @Test public void whenCreatingCompletableFutureWithSupplyAsync_thenFutureReturnsValue() throws ExecutionException, InterruptedException { - CompletableFuture future = CompletableFuture.supplyAsync(() -> "Hello"); assertEquals("Hello", future.get()); - } @Test public void whenAddingThenAcceptToFuture_thenFunctionExecutesAfterComputationIsFinished() throws ExecutionException, InterruptedException { - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture future = completableFuture.thenAccept(s -> System.out.println("Computation returned: " + s)); future.get(); - } @Test public void whenAddingThenRunToFuture_thenFunctionExecutesAfterComputationIsFinished() throws ExecutionException, InterruptedException { - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture future = completableFuture.thenRun(() -> System.out.println("Computation finished.")); future.get(); - } @Test public void whenAddingThenApplyToFuture_thenFunctionExecutesAfterComputationIsFinished() throws ExecutionException, InterruptedException { - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture future = completableFuture.thenApply(s -> s + " World"); assertEquals("Hello World", future.get()); - } @Test public void whenUsingThenCompose_thenFuturesExecuteSequentially() throws ExecutionException, InterruptedException { - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello").thenCompose(s -> CompletableFuture.supplyAsync(() -> s + " World")); assertEquals("Hello World", completableFuture.get()); - } @Test public void whenUsingThenCombine_thenWaitForExecutionOfBothFutures() throws ExecutionException, InterruptedException { - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello").thenCombine(CompletableFuture.supplyAsync(() -> " World"), (s1, s2) -> s1 + s2); assertEquals("Hello World", completableFuture.get()); - } @Test public void whenUsingThenAcceptBoth_thenWaitForExecutionOfBothFutures() throws ExecutionException, InterruptedException { - CompletableFuture.supplyAsync(() -> "Hello").thenAcceptBoth(CompletableFuture.supplyAsync(() -> " World"), (s1, s2) -> System.out.println(s1 + s2)); - } @Test public void whenFutureCombinedWithAllOfCompletes_thenAllFuturesAreDone() throws ExecutionException, InterruptedException { - CompletableFuture future1 = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture future2 = CompletableFuture.supplyAsync(() -> "Beautiful"); CompletableFuture future3 = CompletableFuture.supplyAsync(() -> "World"); @@ -150,12 +133,10 @@ public class CompletableFutureTest { String combined = Stream.of(future1, future2, future3).map(CompletableFuture::join).collect(Collectors.joining(" ")); assertEquals("Hello Beautiful World", combined); - } @Test public void whenFutureThrows_thenHandleMethodReceivesException() throws ExecutionException, InterruptedException { - String name = null; // ... @@ -168,12 +149,10 @@ public class CompletableFutureTest { }).handle((s, t) -> s != null ? s : "Hello, Stranger!"); assertEquals("Hello, Stranger!", completableFuture.get()); - } @Test(expected = ExecutionException.class) public void whenCompletingFutureExceptionally_thenGetMethodThrows() throws ExecutionException, InterruptedException { - CompletableFuture completableFuture = new CompletableFuture<>(); // ... @@ -183,18 +162,15 @@ public class CompletableFutureTest { // ... completableFuture.get(); - } @Test public void whenAddingThenApplyAsyncToFuture_thenFunctionExecutesAfterComputationIsFinished() throws ExecutionException, InterruptedException { - CompletableFuture completableFuture = CompletableFuture.supplyAsync(() -> "Hello"); CompletableFuture future = completableFuture.thenApplyAsync(s -> s + " World"); assertEquals("Hello World", future.get()); - } } \ No newline at end of file diff --git a/core-java/src/test/java/org/baeldung/java/JavaIoIntegrationTest.java b/core-java/src/test/java/org/baeldung/java/JavaIoUnitTest.java similarity index 98% rename from core-java/src/test/java/org/baeldung/java/JavaIoIntegrationTest.java rename to core-java/src/test/java/org/baeldung/java/JavaIoUnitTest.java index ff92410bc4..501f2ffca0 100644 --- a/core-java/src/test/java/org/baeldung/java/JavaIoIntegrationTest.java +++ b/core-java/src/test/java/org/baeldung/java/JavaIoUnitTest.java @@ -14,7 +14,7 @@ import org.slf4j.LoggerFactory; import com.google.common.base.Charsets; import com.google.common.io.Files; -public class JavaIoIntegrationTest { +public class JavaIoUnitTest { protected final Logger logger = LoggerFactory.getLogger(getClass()); // tests - iterate lines in a file diff --git a/core-java/src/test/java/org/baeldung/java/JavaTimerUnitTest.java b/core-java/src/test/java/org/baeldung/java/JavaTimerLongRunningUnitTest.java similarity index 98% rename from core-java/src/test/java/org/baeldung/java/JavaTimerUnitTest.java rename to core-java/src/test/java/org/baeldung/java/JavaTimerLongRunningUnitTest.java index fcc74dbe64..da316aa885 100644 --- a/core-java/src/test/java/org/baeldung/java/JavaTimerUnitTest.java +++ b/core-java/src/test/java/org/baeldung/java/JavaTimerLongRunningUnitTest.java @@ -9,7 +9,7 @@ import java.util.concurrent.TimeUnit; import org.junit.Test; -public class JavaTimerUnitTest { +public class JavaTimerLongRunningUnitTest { // tests diff --git a/core-java/src/test/java/org/baeldung/java/io/JavaFileIntegrationTest.java b/core-java/src/test/java/org/baeldung/java/io/JavaFileUnitTest.java similarity index 99% rename from core-java/src/test/java/org/baeldung/java/io/JavaFileIntegrationTest.java rename to core-java/src/test/java/org/baeldung/java/io/JavaFileUnitTest.java index 24213ba869..f39ba80c08 100644 --- a/core-java/src/test/java/org/baeldung/java/io/JavaFileIntegrationTest.java +++ b/core-java/src/test/java/org/baeldung/java/io/JavaFileUnitTest.java @@ -13,7 +13,7 @@ import java.nio.file.Paths; import org.apache.commons.io.FileUtils; import org.junit.Test; -public class JavaFileIntegrationTest { +public class JavaFileUnitTest { // create a file diff --git a/core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileIntegrationTest.java b/core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileUnitTest.java similarity index 99% rename from core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileIntegrationTest.java rename to core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileUnitTest.java index b87f6e606f..2aa3b366ba 100644 --- a/core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileIntegrationTest.java +++ b/core-java/src/test/java/org/baeldung/java/io/JavaReadFromFileUnitTest.java @@ -23,7 +23,7 @@ import java.util.Scanner; import org.junit.Test; -public class JavaReadFromFileIntegrationTest { +public class JavaReadFromFileUnitTest { @Test public void whenReadWithBufferedReader_thenCorrect() throws IOException { diff --git a/core-java/src/test/java/org/baeldung/java/io/JavaScannerIntegrationTest.java b/core-java/src/test/java/org/baeldung/java/io/JavaScannerUnitTest.java similarity index 99% rename from core-java/src/test/java/org/baeldung/java/io/JavaScannerIntegrationTest.java rename to core-java/src/test/java/org/baeldung/java/io/JavaScannerUnitTest.java index 89a84d9d7d..5af286dbca 100644 --- a/core-java/src/test/java/org/baeldung/java/io/JavaScannerIntegrationTest.java +++ b/core-java/src/test/java/org/baeldung/java/io/JavaScannerUnitTest.java @@ -15,7 +15,7 @@ import java.util.Scanner; import org.junit.Test; -public class JavaScannerIntegrationTest { +public class JavaScannerUnitTest { @Test public void whenReadFileWithScanner_thenCorrect() throws IOException { diff --git a/core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileIntegrationTest.java b/core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileUnitTest.java similarity index 99% rename from core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileIntegrationTest.java rename to core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileUnitTest.java index 54b40a070c..9ff95c4e16 100644 --- a/core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileIntegrationTest.java +++ b/core-java/src/test/java/org/baeldung/java/io/JavaWriteToFileUnitTest.java @@ -26,7 +26,7 @@ import java.nio.file.Paths; import org.junit.Test; -public class JavaWriteToFileIntegrationTest { +public class JavaWriteToFileUnitTest { private String fileName = "src/test/resources/test_write.txt"; private String fileName1 = "src/test/resources/test_write_1.txt"; diff --git a/core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaUnitTest.java b/core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaManualTest.java similarity index 98% rename from core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaUnitTest.java rename to core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaManualTest.java index 6bd29982dc..bb849d6a13 100644 --- a/core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaUnitTest.java +++ b/core-java/src/test/java/org/baeldung/java/sandbox/SandboxJavaManualTest.java @@ -6,7 +6,7 @@ import java.util.TimerTask; import org.junit.Test; -public class SandboxJavaUnitTest { +public class SandboxJavaManualTest { @Test public void givenUsingTimer_whenSchedulingTimerTaskOnce_thenCorrect() throws InterruptedException { From 62ca74121fc5294c143c19ead2dfbb9eff82b150 Mon Sep 17 00:00:00 2001 From: eugenp Date: Tue, 25 Oct 2016 11:18:24 +0300 Subject: [PATCH 281/309] tuning tests --- ...eLongRunningUnitTest.java => CompletableFutureUnitTest.java} | 2 +- .../{ScreenshotUnitTest.java => ScreenshotIntegrationTest.java} | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename core-java/src/test/java/com/baeldung/completablefuture/{CompletableFutureLongRunningUnitTest.java => CompletableFutureUnitTest.java} (99%) rename core-java/src/test/java/com/baeldung/printscreen/{ScreenshotUnitTest.java => ScreenshotIntegrationTest.java} (92%) diff --git a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureUnitTest.java similarity index 99% rename from core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java rename to core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureUnitTest.java index 2500bf590a..df12c3d79e 100644 --- a/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureLongRunningUnitTest.java +++ b/core-java/src/test/java/com/baeldung/completablefuture/CompletableFutureUnitTest.java @@ -13,7 +13,7 @@ import java.util.stream.Stream; import org.junit.Test; -public class CompletableFutureLongRunningUnitTest { +public class CompletableFutureUnitTest { @Test public void whenRunningCompletableFutureAsynchronously_thenGetMethodWaitsForResult() throws InterruptedException, ExecutionException { diff --git a/core-java/src/test/java/com/baeldung/printscreen/ScreenshotUnitTest.java b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotIntegrationTest.java similarity index 92% rename from core-java/src/test/java/com/baeldung/printscreen/ScreenshotUnitTest.java rename to core-java/src/test/java/com/baeldung/printscreen/ScreenshotIntegrationTest.java index 650abc301a..13609b6977 100644 --- a/core-java/src/test/java/com/baeldung/printscreen/ScreenshotUnitTest.java +++ b/core-java/src/test/java/com/baeldung/printscreen/ScreenshotIntegrationTest.java @@ -7,7 +7,7 @@ import java.io.File; import static org.junit.Assert.assertTrue; -public class ScreenshotUnitTest { +public class ScreenshotIntegrationTest { private Screenshot screenshot = new Screenshot("Screenshot.jpg"); private File file = new File("Screenshot.jpg"); From 672b6fe3365189cf1e63e4c89ffd6942736e9835 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 25 Oct 2016 13:51:51 +0200 Subject: [PATCH 282/309] configure integration test --- jpa-storedprocedure/pom.xml | 11 +++++++++++ ...eTest.java => StoredProcedureIntegrationTest.java} | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) rename jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/{StoredProcedureTest.java => StoredProcedureIntegrationTest.java} (98%) diff --git a/jpa-storedprocedure/pom.xml b/jpa-storedprocedure/pom.xml index b2ebaa32e2..b5a2e8693c 100644 --- a/jpa-storedprocedure/pom.xml +++ b/jpa-storedprocedure/pom.xml @@ -11,6 +11,7 @@ 7.0 5.1.0.Final 5.1.38 + 2.19.1 @@ -33,6 +34,16 @@ + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + + + diff --git a/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java b/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureIntegrationTest.java similarity index 98% rename from jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java rename to jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureIntegrationTest.java index 69351d9683..c93d59fe30 100644 --- a/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureTest.java +++ b/jpa-storedprocedure/src/test/java/com/baeldung/jpa/storedprocedure/StoredProcedureIntegrationTest.java @@ -15,7 +15,7 @@ import org.junit.Test; import com.baeldung.jpa.model.Car; -public class StoredProcedureTest { +public class StoredProcedureIntegrationTest { private static EntityManagerFactory factory = null; private static EntityManager entityManager = null; From 48f3f0b8340112a2b2e7fe8e6df9096e05469792 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 25 Oct 2016 14:11:22 +0200 Subject: [PATCH 283/309] add live test profile --- resteasy/pom.xml | 92 +++++++++++++++++ ...tTest.java => RestEasyClientLiveTest.java} | 99 +++++++++---------- 2 files changed, 141 insertions(+), 50 deletions(-) rename resteasy/src/test/java/com/baeldung/server/{RestEasyClientTest.java => RestEasyClientLiveTest.java} (61%) diff --git a/resteasy/pom.xml b/resteasy/pom.xml index ec9e87b0d1..04e8576e1f 100644 --- a/resteasy/pom.xml +++ b/resteasy/pom.xml @@ -10,6 +10,8 @@ 3.0.14.Final + 2.19.1 + 1.6.0 @@ -23,6 +25,35 @@ 1.8 + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/*IntegrationTest.java + **/*LiveTest.java + + + + + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + true + + jetty8x + embedded + + + + 8082 + + + + @@ -73,5 +104,66 @@ + + + live + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration-test + + test + + + + **/*IntegrationTest.java + + + **/*LiveTest.java + + + + + + + json + + + + + org.codehaus.cargo + cargo-maven2-plugin + ${cargo-maven2-plugin.version} + + false + + + + start-server + pre-integration-test + + start + + + + stop-server + post-integration-test + + stop + + + + + + + + + + \ No newline at end of file diff --git a/resteasy/src/test/java/com/baeldung/server/RestEasyClientTest.java b/resteasy/src/test/java/com/baeldung/server/RestEasyClientLiveTest.java similarity index 61% rename from resteasy/src/test/java/com/baeldung/server/RestEasyClientTest.java rename to resteasy/src/test/java/com/baeldung/server/RestEasyClientLiveTest.java index ef18b0f23f..7e709edb96 100644 --- a/resteasy/src/test/java/com/baeldung/server/RestEasyClientTest.java +++ b/resteasy/src/test/java/com/baeldung/server/RestEasyClientLiveTest.java @@ -1,7 +1,15 @@ package com.baeldung.server; -import com.baeldung.client.ServicesInterface; -import com.baeldung.model.Movie; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.List; +import java.util.Locale; + +import javax.naming.NamingException; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.UriBuilder; + import org.apache.commons.io.IOUtils; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; @@ -14,18 +22,13 @@ import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; import org.jboss.resteasy.client.jaxrs.engines.ApacheHttpClient4Engine; import org.junit.Before; import org.junit.Test; -import javax.naming.NamingException; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.UriBuilder; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.text.SimpleDateFormat; -import java.util.List; -import java.util.Locale; -public class RestEasyClientTest { +import com.baeldung.client.ServicesInterface; +import com.baeldung.model.Movie; - public static final UriBuilder FULL_PATH = UriBuilder.fromPath("http://127.0.0.1:8080/RestEasyTutorial/rest"); +public class RestEasyClientLiveTest { + + public static final UriBuilder FULL_PATH = UriBuilder.fromPath("http://127.0.0.1:8082/RestEasyTutorial/rest"); Movie transformerMovie = null; Movie batmanMovie = null; ObjectMapper jsonMapper = null; @@ -35,22 +38,22 @@ public class RestEasyClientTest { jsonMapper = new ObjectMapper().configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); jsonMapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); - SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH); + final SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH); jsonMapper.setDateFormat(sdf); - try (InputStream inputStream = new RestEasyClientTest().getClass().getResourceAsStream("./movies/transformer.json")) { - String transformerMovieAsString = String.format(IOUtils.toString(inputStream, StandardCharsets.UTF_8)); + try (InputStream inputStream = new RestEasyClientLiveTest().getClass().getResourceAsStream("./movies/transformer.json")) { + final String transformerMovieAsString = String.format(IOUtils.toString(inputStream, StandardCharsets.UTF_8)); transformerMovie = jsonMapper.readValue(transformerMovieAsString, Movie.class); - } catch (Exception e) { + } catch (final Exception e) { e.printStackTrace(); throw new RuntimeException("Test is going to die ...", e); } - try (InputStream inputStream = new RestEasyClientTest().getClass().getResourceAsStream("./movies/batman.json")) { - String batmanMovieAsString = String.format(IOUtils.toString(inputStream, StandardCharsets.UTF_8)); + try (InputStream inputStream = new RestEasyClientLiveTest().getClass().getResourceAsStream("./movies/batman.json")) { + final String batmanMovieAsString = String.format(IOUtils.toString(inputStream, StandardCharsets.UTF_8)); batmanMovie = jsonMapper.readValue(batmanMovieAsString, Movie.class); - } catch (Exception e) { + } catch (final Exception e) { throw new RuntimeException("Test is going to die ...", e); } } @@ -58,41 +61,41 @@ public class RestEasyClientTest { @Test public void testListAllMovies() { - ResteasyClient client = new ResteasyClientBuilder().build(); - ResteasyWebTarget target = client.target(FULL_PATH); - ServicesInterface proxy = target.proxy(ServicesInterface.class); + final ResteasyClient client = new ResteasyClientBuilder().build(); + final ResteasyWebTarget target = client.target(FULL_PATH); + final ServicesInterface proxy = target.proxy(ServicesInterface.class); Response moviesResponse = proxy.addMovie(transformerMovie); moviesResponse.close(); moviesResponse = proxy.addMovie(batmanMovie); moviesResponse.close(); - List movies = proxy.listMovies(); + final List movies = proxy.listMovies(); System.out.println(movies); } @Test public void testMovieByImdbId() { - String transformerImdbId = "tt0418279"; + final String transformerImdbId = "tt0418279"; - ResteasyClient client = new ResteasyClientBuilder().build(); - ResteasyWebTarget target = client.target(FULL_PATH); - ServicesInterface proxy = target.proxy(ServicesInterface.class); + final ResteasyClient client = new ResteasyClientBuilder().build(); + final ResteasyWebTarget target = client.target(FULL_PATH); + final ServicesInterface proxy = target.proxy(ServicesInterface.class); - Response moviesResponse = proxy.addMovie(transformerMovie); + final Response moviesResponse = proxy.addMovie(transformerMovie); moviesResponse.close(); - Movie movies = proxy.movieByImdbId(transformerImdbId); + final Movie movies = proxy.movieByImdbId(transformerImdbId); System.out.println(movies); } @Test public void testAddMovie() { - ResteasyClient client = new ResteasyClientBuilder().build(); - ResteasyWebTarget target = client.target(FULL_PATH); - ServicesInterface proxy = target.proxy(ServicesInterface.class); + final ResteasyClient client = new ResteasyClientBuilder().build(); + final ResteasyWebTarget target = client.target(FULL_PATH); + final ServicesInterface proxy = target.proxy(ServicesInterface.class); Response moviesResponse = proxy.addMovie(batmanMovie); moviesResponse.close(); @@ -109,17 +112,15 @@ public class RestEasyClientTest { @Test public void testAddMovieMultiConnection() { - PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); - CloseableHttpClient httpClient = HttpClients.custom() - .setConnectionManager(cm) - .build(); - ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient); - ResteasyClient client = new ResteasyClientBuilder().httpEngine(engine).build(); - ResteasyWebTarget target = client.target(FULL_PATH); - ServicesInterface proxy = target.proxy(ServicesInterface.class); + final PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(); + final CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build(); + final ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient); + final ResteasyClient client = new ResteasyClientBuilder().httpEngine(engine).build(); + final ResteasyWebTarget target = client.target(FULL_PATH); + final ServicesInterface proxy = target.proxy(ServicesInterface.class); - Response batmanResponse = proxy.addMovie(batmanMovie); - Response transformerResponse = proxy.addMovie(transformerMovie); + final Response batmanResponse = proxy.addMovie(batmanMovie); + final Response transformerResponse = proxy.addMovie(transformerMovie); if (batmanResponse.getStatus() != Response.Status.CREATED.getStatusCode()) { System.out.println("Batman Movie creation Failed : HTTP error code : " + batmanResponse.getStatus()); @@ -132,16 +133,14 @@ public class RestEasyClientTest { transformerResponse.close(); cm.close(); - - } @Test public void testDeleteMovie() { - ResteasyClient client = new ResteasyClientBuilder().build(); - ResteasyWebTarget target = client.target(FULL_PATH); - ServicesInterface proxy = target.proxy(ServicesInterface.class); + final ResteasyClient client = new ResteasyClientBuilder().build(); + final ResteasyWebTarget target = client.target(FULL_PATH); + final ServicesInterface proxy = target.proxy(ServicesInterface.class); Response moviesResponse = proxy.addMovie(batmanMovie); moviesResponse.close(); @@ -159,9 +158,9 @@ public class RestEasyClientTest { @Test public void testUpdateMovie() { - ResteasyClient client = new ResteasyClientBuilder().build(); - ResteasyWebTarget target = client.target(FULL_PATH); - ServicesInterface proxy = target.proxy(ServicesInterface.class); + final ResteasyClient client = new ResteasyClientBuilder().build(); + final ResteasyWebTarget target = client.target(FULL_PATH); + final ServicesInterface proxy = target.proxy(ServicesInterface.class); Response moviesResponse = proxy.addMovie(batmanMovie); moviesResponse.close(); From 4bae45370d2725fe487d0483192d36fef60fa2a1 Mon Sep 17 00:00:00 2001 From: DOHA Date: Tue, 25 Oct 2016 14:11:39 +0200 Subject: [PATCH 284/309] rename test --- .../persistence/PersistenceTestSuite.java | 16 ++++++++-------- ...java => JPACriteriaQueryIntegrationTest.java} | 2 +- ...Test.java => JPAQuerydslIntegrationTest.java} | 2 +- ...java => JPASpecificationIntegrationTest.java} | 2 +- .../{RsqlTest.java => RsqlIntegrationTest.java} | 2 +- ...ava => LoggerInterceptorIntegrationTest.java} | 2 +- ... SessionTimerInterceptorIntegrationTest.java} | 2 +- ....java => UserInterceptorIntegrationTest.java} | 2 +- 8 files changed, 15 insertions(+), 15 deletions(-) rename spring-security-rest-full/src/test/java/org/baeldung/persistence/query/{JPACriteriaQueryTest.java => JPACriteriaQueryIntegrationTest.java} (98%) rename spring-security-rest-full/src/test/java/org/baeldung/persistence/query/{JPAQuerydslTest.java => JPAQuerydslIntegrationTest.java} (98%) rename spring-security-rest-full/src/test/java/org/baeldung/persistence/query/{JPASpecificationTest.java => JPASpecificationIntegrationTest.java} (99%) rename spring-security-rest-full/src/test/java/org/baeldung/persistence/query/{RsqlTest.java => RsqlIntegrationTest.java} (99%) rename spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/{LoggerInterceptorTest.java => LoggerInterceptorIntegrationTest.java} (97%) rename spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/{SessionTimerInterceptorTest.java => SessionTimerInterceptorIntegrationTest.java} (97%) rename spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/{UserInterceptorTest.java => UserInterceptorIntegrationTest.java} (97%) diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/PersistenceTestSuite.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/PersistenceTestSuite.java index 0ce8c0300b..fda7b01c7a 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/PersistenceTestSuite.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/PersistenceTestSuite.java @@ -1,9 +1,9 @@ package org.baeldung.persistence; -import org.baeldung.persistence.query.JPACriteriaQueryTest; -import org.baeldung.persistence.query.JPAQuerydslTest; -import org.baeldung.persistence.query.JPASpecificationTest; -import org.baeldung.persistence.query.RsqlTest; +import org.baeldung.persistence.query.JPACriteriaQueryIntegrationTest; +import org.baeldung.persistence.query.JPAQuerydslIntegrationTest; +import org.baeldung.persistence.query.JPASpecificationIntegrationTest; +import org.baeldung.persistence.query.RsqlIntegrationTest; import org.baeldung.persistence.service.FooServicePersistenceIntegrationTest; import org.junit.runner.RunWith; import org.junit.runners.Suite; @@ -11,11 +11,11 @@ import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({ // @formatter:off - RsqlTest.class - ,JPASpecificationTest.class + RsqlIntegrationTest.class + ,JPASpecificationIntegrationTest.class ,FooServicePersistenceIntegrationTest.class - ,JPAQuerydslTest.class - ,JPACriteriaQueryTest.class + ,JPAQuerydslIntegrationTest.class + ,JPACriteriaQueryIntegrationTest.class }) // public class PersistenceTestSuite { diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryIntegrationTest.java similarity index 98% rename from spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java rename to spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryIntegrationTest.java index 1d0826e6ba..e8e98074c6 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPACriteriaQueryIntegrationTest.java @@ -24,7 +24,7 @@ import org.springframework.transaction.annotation.Transactional; @ContextConfiguration(classes = { PersistenceConfig.class }) @Transactional @Rollback -public class JPACriteriaQueryTest { +public class JPACriteriaQueryIntegrationTest { @Autowired private IUserDAO userApi; diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslIntegrationTest.java similarity index 98% rename from spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslTest.java rename to spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslIntegrationTest.java index d5fbc819fd..d397c3aac4 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPAQuerydslIntegrationTest.java @@ -23,7 +23,7 @@ import org.springframework.transaction.annotation.Transactional; @ContextConfiguration(classes = { PersistenceConfig.class }) @Transactional @Rollback -public class JPAQuerydslTest { +public class JPAQuerydslIntegrationTest { @Autowired private MyUserRepository repo; diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationIntegrationTest.java similarity index 99% rename from spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java rename to spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationIntegrationTest.java index 0d8773dd61..8bd4857e85 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/JPASpecificationIntegrationTest.java @@ -26,7 +26,7 @@ import org.springframework.transaction.annotation.Transactional; @ContextConfiguration(classes = { PersistenceConfig.class }) @Transactional @Rollback -public class JPASpecificationTest { +public class JPASpecificationIntegrationTest { @Autowired private UserRepository repository; diff --git a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/RsqlTest.java b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/RsqlIntegrationTest.java similarity index 99% rename from spring-security-rest-full/src/test/java/org/baeldung/persistence/query/RsqlTest.java rename to spring-security-rest-full/src/test/java/org/baeldung/persistence/query/RsqlIntegrationTest.java index e0deb8d4ec..16dfa8a12f 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/RsqlTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/persistence/query/RsqlIntegrationTest.java @@ -27,7 +27,7 @@ import cz.jirutka.rsql.parser.ast.Node; @ContextConfiguration(classes = { PersistenceConfig.class }) @Transactional @Rollback -public class RsqlTest { +public class RsqlIntegrationTest { @Autowired private UserRepository repository; diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/LoggerInterceptorTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/LoggerInterceptorIntegrationTest.java similarity index 97% rename from spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/LoggerInterceptorTest.java rename to spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/LoggerInterceptorIntegrationTest.java index 930ab20262..99b391eda1 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/LoggerInterceptorTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/LoggerInterceptorIntegrationTest.java @@ -23,7 +23,7 @@ import org.springframework.web.context.WebApplicationContext; @WebAppConfiguration @Transactional @ContextConfiguration(classes = { SecurityWithoutCsrfConfig.class, PersistenceConfig.class, WebConfig.class }) -public class LoggerInterceptorTest { +public class LoggerInterceptorIntegrationTest { @Autowired WebApplicationContext wac; diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorIntegrationTest.java similarity index 97% rename from spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java rename to spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorIntegrationTest.java index 916a849c63..662fc997f9 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/SessionTimerInterceptorIntegrationTest.java @@ -28,7 +28,7 @@ import org.springframework.web.context.WebApplicationContext; @Transactional @ContextConfiguration(classes = { SecurityWithoutCsrfConfig.class, PersistenceConfig.class, WebConfig.class }) @WithMockUser(username = "admin", roles = { "USER", "ADMIN" }) -public class SessionTimerInterceptorTest { +public class SessionTimerInterceptorIntegrationTest { @Autowired WebApplicationContext wac; diff --git a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorIntegrationTest.java similarity index 97% rename from spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java rename to spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorIntegrationTest.java index ff40c86906..0e8f7c98ed 100644 --- a/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorTest.java +++ b/spring-security-rest-full/src/test/java/org/baeldung/web/interceptor/UserInterceptorIntegrationTest.java @@ -25,7 +25,7 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. @Transactional @ContextConfiguration(classes = { SecurityWithoutCsrfConfig.class, PersistenceConfig.class, WebConfig.class }) @WithMockUser(username = "admin", roles = { "USER", "ADMIN" }) -public class UserInterceptorTest { +public class UserInterceptorIntegrationTest { @Autowired WebApplicationContext wac; From 89b50437be1b92045af37fd458c96727f5fd2736 Mon Sep 17 00:00:00 2001 From: Egima profile Date: Tue, 25 Oct 2016 17:42:03 +0300 Subject: [PATCH 285/309] Java low level networking project (#770) * made changes to java reflection * removed redundant method makeSound in Animal abstract class * added project for play-framework article * added project for regex * changed regex project from own model to core-java * added project for routing in play * made changes to regex project * refactored code for REST API with Play project * refactored student store indexing to zero base * added unit tests, removed bad names * added NIO Selector project under core-java module * requested changes made --- .../cookies/PersistentCookieStore.java | 56 ++++++ .../cookies/ProxyAcceptCookiePolicy.java | 26 +++ .../java/networking/udp/EchoClient.java | 42 +++++ .../java/networking/udp/EchoServer.java | 42 +++++ .../baeldung/java/networking/udp/UDPTest.java | 33 ++++ .../java/nio/selector/EchoServer.java | 17 +- .../baeldung/java/networking/url/UrlTest.java | 104 +++++++++++ .../baeldung/java/nio/selector/EchoTest.java | 1 + .../student-api/test/ApplicationTest.java | 172 ++++++++++++++++++ 9 files changed, 485 insertions(+), 8 deletions(-) create mode 100644 core-java/src/main/java/com/baeldung/java/networking/cookies/PersistentCookieStore.java create mode 100644 core-java/src/main/java/com/baeldung/java/networking/cookies/ProxyAcceptCookiePolicy.java create mode 100644 core-java/src/main/java/com/baeldung/java/networking/udp/EchoClient.java create mode 100644 core-java/src/main/java/com/baeldung/java/networking/udp/EchoServer.java create mode 100644 core-java/src/main/java/com/baeldung/java/networking/udp/UDPTest.java create mode 100644 core-java/src/test/java/com/baeldung/java/networking/url/UrlTest.java create mode 100644 play-framework/student-api/test/ApplicationTest.java diff --git a/core-java/src/main/java/com/baeldung/java/networking/cookies/PersistentCookieStore.java b/core-java/src/main/java/com/baeldung/java/networking/cookies/PersistentCookieStore.java new file mode 100644 index 0000000000..0d66406ac2 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/networking/cookies/PersistentCookieStore.java @@ -0,0 +1,56 @@ +package com.baeldung.java.networking.cookies; + +import java.net.*; +import java.util.List; + +public class PersistentCookieStore implements CookieStore, Runnable { + CookieStore store; + + public PersistentCookieStore() { + store = new CookieManager().getCookieStore(); + // deserialize cookies into store + Runtime.getRuntime().addShutdownHook(new Thread(this)); + } + + @Override + public void run() { + // serialize cookies to persistent storage + } + + @Override + public void add(URI uri, HttpCookie cookie) { + store.add(uri, cookie); + + } + + @Override + public List get(URI uri) { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getCookies() { + // TODO Auto-generated method stub + return null; + } + + @Override + public List getURIs() { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean remove(URI uri, HttpCookie cookie) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean removeAll() { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/core-java/src/main/java/com/baeldung/java/networking/cookies/ProxyAcceptCookiePolicy.java b/core-java/src/main/java/com/baeldung/java/networking/cookies/ProxyAcceptCookiePolicy.java new file mode 100644 index 0000000000..6d6371bfe0 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/networking/cookies/ProxyAcceptCookiePolicy.java @@ -0,0 +1,26 @@ +package com.baeldung.java.networking.cookies; + +import java.net.*; + +public class ProxyAcceptCookiePolicy implements CookiePolicy { + String acceptedProxy; + + public ProxyAcceptCookiePolicy(String acceptedProxy) { + this.acceptedProxy = acceptedProxy; + } + + public boolean shouldAccept(URI uri, HttpCookie cookie) { + String host; + try { + host = InetAddress.getByName(uri.getHost()).getCanonicalHostName(); + } catch (UnknownHostException e) { + host = uri.getHost(); + } + + if (!HttpCookie.domainMatches(acceptedProxy, host)) { + return false; + } + + return CookiePolicy.ACCEPT_ORIGINAL_SERVER.shouldAccept(uri, cookie); + } +} diff --git a/core-java/src/main/java/com/baeldung/java/networking/udp/EchoClient.java b/core-java/src/main/java/com/baeldung/java/networking/udp/EchoClient.java new file mode 100644 index 0000000000..1fb9af3a9d --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/networking/udp/EchoClient.java @@ -0,0 +1,42 @@ +package com.baeldung.java.networking.udp; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; + +public class EchoClient { + private DatagramSocket socket; + private InetAddress address; + + private byte[] buf; + + public EchoClient() { + try { + socket = new DatagramSocket(); + address = InetAddress.getByName("localhost"); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + public String sendEcho(String msg) { + DatagramPacket packet = null; + try { + buf=msg.getBytes(); + packet = new DatagramPacket(buf, buf.length, address, 4445); + socket.send(packet); + packet = new DatagramPacket(buf, buf.length); + socket.receive(packet); + } catch (IOException e) { + e.printStackTrace(); + } + String received = new String(packet.getData(), 0, packet.getLength()); + return received; + } + + public void close() { + socket.close(); + } +} diff --git a/core-java/src/main/java/com/baeldung/java/networking/udp/EchoServer.java b/core-java/src/main/java/com/baeldung/java/networking/udp/EchoServer.java new file mode 100644 index 0000000000..900d330786 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/networking/udp/EchoServer.java @@ -0,0 +1,42 @@ +package com.baeldung.java.networking.udp; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; + +public class EchoServer extends Thread { + + protected DatagramSocket socket = null; + protected boolean running; + protected byte[] buf = new byte[256]; + + public EchoServer() throws IOException { + socket = new DatagramSocket(4445); + } + + public void run() { + running = true; + + while (running) { + try { + + DatagramPacket packet = new DatagramPacket(buf, buf.length); + socket.receive(packet); + InetAddress address = packet.getAddress(); + int port = packet.getPort(); + packet = new DatagramPacket(buf, buf.length, address, port); + String received = new String(packet.getData(), 0, packet.getLength()); + if (received.equals("end")) { + running = false; + continue; + } + socket.send(packet); + } catch (IOException e) { + e.printStackTrace(); + running = false; + } + } + socket.close(); + } +} diff --git a/core-java/src/main/java/com/baeldung/java/networking/udp/UDPTest.java b/core-java/src/main/java/com/baeldung/java/networking/udp/UDPTest.java new file mode 100644 index 0000000000..ee93936230 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/java/networking/udp/UDPTest.java @@ -0,0 +1,33 @@ +package com.baeldung.java.networking.udp; + +import static org.junit.Assert.*; + +import java.io.IOException; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class UDPTest { + EchoClient client = null; + + @Before + public void setup() throws IOException { + new EchoServer().start(); + client = new EchoClient(); + } + + @Test + public void whenCanSendAndReceivePacket_thenCorrect1() { + String echo = client.sendEcho("hello server"); + assertEquals("hello server", echo); + echo = client.sendEcho("server is working"); + assertFalse(echo.equals("hello server")); + } + + @After + public void tearDown() { + client.sendEcho("end"); + client.close(); + } +} diff --git a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java index ffabad9c4d..1d4e01bbc3 100644 --- a/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java +++ b/core-java/src/main/java/com/baeldung/java/nio/selector/EchoServer.java @@ -1,15 +1,15 @@ package com.baeldung.java.nio.selector; -import java.io.File; -import java.io.IOException; -import java.net.InetSocketAddress; -import java.nio.ByteBuffer; -import java.nio.channels.SelectionKey; -import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; -import java.util.Iterator; +import java.nio.channels.Selector; +import java.nio.channels.SelectionKey; +import java.nio.ByteBuffer; +import java.io.IOException; import java.util.Set; +import java.util.Iterator; +import java.net.InetSocketAddress; +import java.io.File; public class EchoServer { @@ -49,6 +49,7 @@ public class EchoServer { } } + public static Process start() throws IOException, InterruptedException { String javaHome = System.getProperty("java.home"); String javaBin = javaHome + File.separator + "bin" + File.separator + "java"; @@ -59,4 +60,4 @@ public class EchoServer { return builder.start(); } -} \ No newline at end of file +} diff --git a/core-java/src/test/java/com/baeldung/java/networking/url/UrlTest.java b/core-java/src/test/java/com/baeldung/java/networking/url/UrlTest.java new file mode 100644 index 0000000000..14444f0145 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java/networking/url/UrlTest.java @@ -0,0 +1,104 @@ +package com.baeldung.java.networking.url; + +import static org.junit.Assert.assertEquals; + +import java.net.MalformedURLException; +import java.net.URL; + +import org.junit.Test; + +public class UrlTest { + + @Test + public void givenUrl_whenCanIdentifyProtocol_thenCorrect() throws MalformedURLException { + URL url = new URL("http://baeldung.com"); + assertEquals("http", url.getProtocol()); + } + + @Test + public void givenUrl_whenCanGetHost_thenCorrect() throws MalformedURLException { + URL url = new URL("http://baeldung.com"); + assertEquals("baeldung.com", url.getHost()); + } + + @Test + public void givenUrl_whenCanGetFileName_thenCorrect2() throws MalformedURLException { + URL url = new URL("http://baeldung.com/articles?topic=java&version=8"); + assertEquals("/articles?topic=java&version=8", url.getFile()); + } + + @Test + public void givenUrl_whenCanGetFileName_thenCorrect1() throws MalformedURLException { + URL url = new URL("http://baeldung.com/guidelines.txt"); + assertEquals("/guidelines.txt", url.getFile()); + } + + @Test + public void givenUrl_whenCanGetPathParams_thenCorrect() throws MalformedURLException { + URL url = new URL("http://baeldung.com/articles?topic=java&version=8"); + assertEquals("/articles", url.getPath()); + } + + @Test + public void givenUrl_whenCanGetQueryParams_thenCorrect() throws MalformedURLException { + URL url = new URL("http://baeldung.com/articles?topic=java"); + assertEquals("topic=java", url.getQuery()); + } + + @Test + public void givenUrl_whenGetsDefaultPort_thenCorrect() throws MalformedURLException { + URL url = new URL("http://baeldung.com"); + assertEquals(-1, url.getPort()); + assertEquals(80, url.getDefaultPort()); + } + + @Test + public void givenUrl_whenGetsPort_thenCorrect() throws MalformedURLException { + URL url = new URL("http://baeldung.com:8090"); + assertEquals(8090, url.getPort()); + assertEquals(80, url.getDefaultPort()); + } + + @Test + public void givenBaseUrl_whenCreatesRelativeUrl_thenCorrect() throws MalformedURLException { + URL baseUrl = new URL("http://baeldung.com"); + URL relativeUrl = new URL(baseUrl, "a-guide-to-java-sockets"); + assertEquals("http://baeldung.com/a-guide-to-java-sockets", relativeUrl.toString()); + } + + @Test + public void givenAbsoluteUrl_whenIgnoresBaseUrl_thenCorrect() throws MalformedURLException { + URL baseUrl = new URL("http://baeldung.com"); + URL relativeUrl = new URL(baseUrl, "http://baeldung.com/a-guide-to-java-sockets"); + assertEquals("http://baeldung.com/a-guide-to-java-sockets", relativeUrl.toString()); + } + + @Test + public void givenUrlComponents_whenConstructsCompleteUrl_thenCorrect() throws MalformedURLException { + String protocol = "http"; + String host = "baeldung.com"; + String file = "/guidelines.txt"; + URL url = new URL(protocol, host, file); + assertEquals("http://baeldung.com/guidelines.txt", url.toString()); + } + + @Test + public void givenUrlComponents_whenConstructsCompleteUrl_thenCorrect2() throws MalformedURLException { + String protocol = "http"; + String host = "baeldung.com"; + String file = "/articles?topic=java&version=8"; + URL url = new URL(protocol, host, file); + assertEquals("http://baeldung.com/guidelines.txt", url.toString()); + } + + @Test + public void givenUrlComponentsWithPort_whenConstructsCompleteUrl_thenCorrect() throws MalformedURLException { + String protocol = "http"; + String host = "baeldung.com"; + int port = 9000; + String file = "/guidelines.txt"; + URL url = new URL(protocol, host, port, file); + assertEquals("http://baeldung.com:9000/guidelines.txt", url.toString()); + } + +} diff --git a/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java b/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java index d1ac6df5e4..cb7ecefc81 100644 --- a/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java +++ b/core-java/src/test/java/com/baeldung/java/nio/selector/EchoTest.java @@ -16,6 +16,7 @@ public class EchoTest { String resp2 = client.sendMessage("world"); assertEquals("hello", resp1); assertEquals("world", resp2); + process.destroy(); } } diff --git a/play-framework/student-api/test/ApplicationTest.java b/play-framework/student-api/test/ApplicationTest.java new file mode 100644 index 0000000000..1133978e9a --- /dev/null +++ b/play-framework/student-api/test/ApplicationTest.java @@ -0,0 +1,172 @@ + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Arrays; + +import org.json.JSONArray; +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Test; +import model.Student; +import play.test.*; +import static play.test.Helpers.*; + +public class ApplicationTest{ + private static final String BASE_URL = "http://localhost:9000"; + + @Test +public void testInServer() throws Exception { + TestServer server = testServer(3333); + running(server, () -> { + try { + WSClient ws = play.libs.ws.WS.newClient(3333); + CompletionStage completionStage = ws.url("/").get(); + WSResponse response = completionStage.toCompletableFuture().get(); + ws.close(); + assertEquals(OK, response.getStatus()); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + }); +} + @Test + public void whenCreatesRecord_thenCorrect() { + Student student = new Student("jody", "west", 50); + JSONObject obj = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))); + assertTrue(obj.getBoolean("isSuccessfull")); + JSONObject body = obj.getJSONObject("body"); + assertEquals(student.getAge(), body.getInt("age")); + assertEquals(student.getFirstName(), body.getString("firstName")); + assertEquals(student.getLastName(), body.getString("lastName")); + } + + @Test + public void whenDeletesCreatedRecord_thenCorrect() { + Student student = new Student("Usain", "Bolt", 25); + JSONObject ob1 = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))).getJSONObject("body"); + int id = ob1.getInt("id"); + JSONObject obj1 = new JSONObject(makeRequest(BASE_URL + "/" + id, "POST", new JSONObject())); + assertTrue(obj1.getBoolean("isSuccessfull")); + makeRequest(BASE_URL + "/" + id, "DELETE", null); + JSONObject obj2 = new JSONObject(makeRequest(BASE_URL + "/" + id, "POST", new JSONObject())); + assertFalse(obj2.getBoolean("isSuccessfull")); + } + + @Test + public void whenUpdatesCreatedRecord_thenCorrect() { + Student student = new Student("john", "doe", 50); + JSONObject body1 = new JSONObject(makeRequest(BASE_URL, "POST", new JSONObject(student))).getJSONObject("body"); + assertEquals(student.getAge(), body1.getInt("age")); + int newAge = 60; + body1.put("age", newAge); + JSONObject body2 = new JSONObject(makeRequest(BASE_URL, "PUT", body1)).getJSONObject("body"); + assertFalse(student.getAge() == body2.getInt("age")); + assertTrue(newAge == body2.getInt("age")); + } + + @Test + public void whenGetsAllRecords_thenCorrect() { + Student student1 = new Student("jane", "daisy", 50); + Student student2 = new Student("john", "daniel", 60); + Student student3 = new Student("don", "mason", 55); + Student student4 = new Student("scarlet", "ohara", 90); + + makeRequest(BASE_URL, "POST", new JSONObject(student1)); + makeRequest(BASE_URL, "POST", new JSONObject(student2)); + makeRequest(BASE_URL, "POST", new JSONObject(student3)); + makeRequest(BASE_URL, "POST", new JSONObject(student4)); + + JSONObject objects = new JSONObject(makeRequest(BASE_URL, "GET", null)); + assertTrue(objects.getBoolean("isSuccessfull")); + JSONArray array = objects.getJSONArray("body"); + assertTrue(array.length() >= 4); + } + + public static String makeRequest(String myUrl, String httpMethod, JSONObject parameters) { + + URL url = null; + try { + url = new URL(myUrl); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + HttpURLConnection conn = null; + try { + + conn = (HttpURLConnection) url.openConnection(); + } catch (IOException e) { + e.printStackTrace(); + } + conn.setDoInput(true); + + conn.setReadTimeout(10000); + + conn.setRequestProperty("Content-Type", "application/json"); + DataOutputStream dos = null; + int respCode = 0; + String inputString = null; + try { + conn.setRequestMethod(httpMethod); + + if (Arrays.asList("POST", "PUT").contains(httpMethod)) { + String params = parameters.toString(); + + conn.setDoOutput(true); + + dos = new DataOutputStream(conn.getOutputStream()); + dos.writeBytes(params); + dos.flush(); + dos.close(); + } + respCode = conn.getResponseCode(); + if (respCode != 200 && respCode != 201) { + String error = inputStreamToString(conn.getErrorStream()); + return error; + } + inputString = inputStreamToString(conn.getInputStream()); + + } catch (IOException e) { + + e.printStackTrace(); + } + return inputString; + } + + public static String inputStreamToString(InputStream is) { + BufferedReader br = null; + StringBuilder sb = new StringBuilder(); + + String line; + try { + + br = new BufferedReader(new InputStreamReader(is)); + while ((line = br.readLine()) != null) { + sb.append(line); + } + + } catch (IOException e) { + e.printStackTrace(); + } finally { + if (br != null) { + try { + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + return sb.toString(); + + } +} From c9f858ca32fc46348e371ad3d80302c38349ae41 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 25 Oct 2016 17:11:25 +0200 Subject: [PATCH 286/309] Move UDPTest --- .../com/baeldung/java/networking/url}/UDPTest.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) rename core-java/src/{main/java/com/baeldung/java/networking/udp => test/java/com/baeldung/java/networking/url}/UDPTest.java (70%) diff --git a/core-java/src/main/java/com/baeldung/java/networking/udp/UDPTest.java b/core-java/src/test/java/com/baeldung/java/networking/url/UDPTest.java similarity index 70% rename from core-java/src/main/java/com/baeldung/java/networking/udp/UDPTest.java rename to core-java/src/test/java/com/baeldung/java/networking/url/UDPTest.java index ee93936230..91ab8063b2 100644 --- a/core-java/src/main/java/com/baeldung/java/networking/udp/UDPTest.java +++ b/core-java/src/test/java/com/baeldung/java/networking/url/UDPTest.java @@ -1,15 +1,19 @@ -package com.baeldung.java.networking.udp; +package com.baeldung.java.networking.url; -import static org.junit.Assert.*; - -import java.io.IOException; +import com.baeldung.java.networking.udp.EchoClient; +import com.baeldung.java.networking.udp.EchoServer; import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.io.IOException; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + public class UDPTest { - EchoClient client = null; + private EchoClient client; @Before public void setup() throws IOException { From 93b49176724efc6740ee7596ae70627a66b88bd2 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 25 Oct 2016 17:12:12 +0200 Subject: [PATCH 287/309] Move UDPTest --- .../com/baeldung/java/networking/{url => udp}/UDPTest.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) rename core-java/src/test/java/com/baeldung/java/networking/{url => udp}/UDPTest.java (83%) diff --git a/core-java/src/test/java/com/baeldung/java/networking/url/UDPTest.java b/core-java/src/test/java/com/baeldung/java/networking/udp/UDPTest.java similarity index 83% rename from core-java/src/test/java/com/baeldung/java/networking/url/UDPTest.java rename to core-java/src/test/java/com/baeldung/java/networking/udp/UDPTest.java index 91ab8063b2..fb8e1eb366 100644 --- a/core-java/src/test/java/com/baeldung/java/networking/url/UDPTest.java +++ b/core-java/src/test/java/com/baeldung/java/networking/udp/UDPTest.java @@ -1,8 +1,6 @@ -package com.baeldung.java.networking.url; +package com.baeldung.java.networking.udp; -import com.baeldung.java.networking.udp.EchoClient; -import com.baeldung.java.networking.udp.EchoServer; import org.junit.After; import org.junit.Before; import org.junit.Test; From 54572b9c9d00fc4c01f1f04a71cd182394a3ea6c Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 25 Oct 2016 17:16:10 +0200 Subject: [PATCH 288/309] Rename mutation-testing -> testing --- pom.xml | 2 +- {mutation-testing => testing}/README.md | 0 {mutation-testing => testing}/pom.xml | 154 +++++++++--------- .../baeldung/testing/mutation/Palindrome.java | 30 ++-- .../mutation/test/TestPalindrome.java | 68 ++++---- 5 files changed, 127 insertions(+), 127 deletions(-) rename {mutation-testing => testing}/README.md (100%) rename {mutation-testing => testing}/pom.xml (97%) rename {mutation-testing => testing}/src/main/java/com/baeldung/testing/mutation/Palindrome.java (97%) rename {mutation-testing => testing}/src/test/java/com/baeldung/mutation/test/TestPalindrome.java (96%) diff --git a/pom.xml b/pom.xml index e97093b7f7..514d066844 100644 --- a/pom.xml +++ b/pom.xml @@ -58,7 +58,7 @@ mockito mocks - mutation-testing + testing orika diff --git a/mutation-testing/README.md b/testing/README.md similarity index 100% rename from mutation-testing/README.md rename to testing/README.md diff --git a/mutation-testing/pom.xml b/testing/pom.xml similarity index 97% rename from mutation-testing/pom.xml rename to testing/pom.xml index cdee59fcb4..aa523d95ef 100644 --- a/mutation-testing/pom.xml +++ b/testing/pom.xml @@ -1,77 +1,77 @@ - - 4.0.0 - com.baeldung - mutation-testing - 0.1-SNAPSHOT - mutation-testing - - - org.pitest - pitest-parent - 1.1.10 - pom - - - junit - junit - 4.9 - - - - - - org.pitest - pitest-maven - 1.1.10 - - - com.baeldung.testing.mutation.* - - - com.baeldung.mutation.test.* - - - - - org.jacoco - jacoco-maven-plugin - 0.7.7.201606060606 - - - - prepare-agent - - - - report - prepare-package - - report - - - - jacoco-check - - check - - - - - PACKAGE - - - LINE - COVEREDRATIO - 0.50 - - - - - - - - - - - + + 4.0.0 + com.baeldung + mutation-testing + 0.1-SNAPSHOT + mutation-testing + + + org.pitest + pitest-parent + 1.1.10 + pom + + + junit + junit + 4.9 + + + + + + org.pitest + pitest-maven + 1.1.10 + + + com.baeldung.testing.mutation.* + + + com.baeldung.mutation.test.* + + + + + org.jacoco + jacoco-maven-plugin + 0.7.7.201606060606 + + + + prepare-agent + + + + report + prepare-package + + report + + + + jacoco-check + + check + + + + + PACKAGE + + + LINE + COVEREDRATIO + 0.50 + + + + + + + + + + + diff --git a/mutation-testing/src/main/java/com/baeldung/testing/mutation/Palindrome.java b/testing/src/main/java/com/baeldung/testing/mutation/Palindrome.java similarity index 97% rename from mutation-testing/src/main/java/com/baeldung/testing/mutation/Palindrome.java rename to testing/src/main/java/com/baeldung/testing/mutation/Palindrome.java index 0b166f1557..e264a4c759 100644 --- a/mutation-testing/src/main/java/com/baeldung/testing/mutation/Palindrome.java +++ b/testing/src/main/java/com/baeldung/testing/mutation/Palindrome.java @@ -1,15 +1,15 @@ -package com.baeldung.testing.mutation; - -public class Palindrome { - - public boolean isPalindrome(String inputString) { - if (inputString.length() == 0) { - return true; - } else { - char firstChar = inputString.charAt(0); - char lastChar = inputString.charAt(inputString.length() - 1); - String mid = inputString.substring(1, inputString.length() - 1); - return (firstChar == lastChar) && isPalindrome(mid); - } - } -} +package com.baeldung.testing.mutation; + +public class Palindrome { + + public boolean isPalindrome(String inputString) { + if (inputString.length() == 0) { + return true; + } else { + char firstChar = inputString.charAt(0); + char lastChar = inputString.charAt(inputString.length() - 1); + String mid = inputString.substring(1, inputString.length() - 1); + return (firstChar == lastChar) && isPalindrome(mid); + } + } +} diff --git a/mutation-testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java b/testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java similarity index 96% rename from mutation-testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java rename to testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java index 3add6290f6..11ed966b16 100644 --- a/mutation-testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java +++ b/testing/src/test/java/com/baeldung/mutation/test/TestPalindrome.java @@ -1,34 +1,34 @@ -package com.baeldung.mutation.test; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; - -import com.baeldung.testing.mutation.Palindrome; - -public class TestPalindrome { - @Test - public void whenEmptyString_thanAccept() { - Palindrome palindromeTester = new Palindrome(); - assertTrue(palindromeTester.isPalindrome("noon")); - } - - @Test - public void whenPalindrom_thanAccept() { - Palindrome palindromeTester = new Palindrome(); - assertTrue(palindromeTester.isPalindrome("noon")); - } - - @Test - public void whenNotPalindrom_thanReject(){ - Palindrome palindromeTester = new Palindrome(); - assertFalse(palindromeTester.isPalindrome("box")); - } - - @Test - public void whenNearPalindrom_thanReject(){ - Palindrome palindromeTester = new Palindrome(); - assertFalse(palindromeTester.isPalindrome("neon")); - } -} +package com.baeldung.mutation.test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +import com.baeldung.testing.mutation.Palindrome; + +public class TestPalindrome { + @Test + public void whenEmptyString_thanAccept() { + Palindrome palindromeTester = new Palindrome(); + assertTrue(palindromeTester.isPalindrome("noon")); + } + + @Test + public void whenPalindrom_thanAccept() { + Palindrome palindromeTester = new Palindrome(); + assertTrue(palindromeTester.isPalindrome("noon")); + } + + @Test + public void whenNotPalindrom_thanReject(){ + Palindrome palindromeTester = new Palindrome(); + assertFalse(palindromeTester.isPalindrome("box")); + } + + @Test + public void whenNearPalindrom_thanReject(){ + Palindrome palindromeTester = new Palindrome(); + assertFalse(palindromeTester.isPalindrome("neon")); + } +} From 084d772bbd457887770f59b061a7291ae35b91b5 Mon Sep 17 00:00:00 2001 From: Zeger Hendrikse Date: Tue, 25 Oct 2016 17:50:33 +0200 Subject: [PATCH 289/309] Renamed Baeldung class to CourseRepository class --- .../cxf/jaxrs/implementation/Baeldung.java | 72 ------------------- .../jaxrs/implementation/RestfulServer.java | 6 +- 2 files changed, 3 insertions(+), 75 deletions(-) delete mode 100644 apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java deleted file mode 100644 index 9dd63cf3ac..0000000000 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/Baeldung.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.baeldung.cxf.jaxrs.implementation; - -import javax.ws.rs.*; -import javax.ws.rs.core.Response; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@Path("baeldung") -@Produces("text/xml") -public class Baeldung { - private Map courses = new HashMap<>(); - - { - Student student1 = new Student(); - Student student2 = new Student(); - student1.setId(1); - student1.setName("Student A"); - student2.setId(2); - student2.setName("Student B"); - - List course1Students = new ArrayList<>(); - course1Students.add(student1); - course1Students.add(student2); - - Course course1 = new Course(); - Course course2 = new Course(); - course1.setId(1); - course1.setName("REST with Spring"); - course1.setStudents(course1Students); - course2.setId(2); - course2.setName("Learn Spring Security"); - - courses.put(1, course1); - courses.put(2, course2); - } - - @GET - @Path("courses/{courseId}") - public Course getCourse(@PathParam("courseId") int courseId) { - return findById(courseId); - } - - @PUT - @Path("courses/{courseId}") - public Response updateCourse(@PathParam("courseId") int courseId, Course course) { - Course existingCourse = findById(courseId); - if (existingCourse == null) { - return Response.status(Response.Status.NOT_FOUND).build(); - } - if (existingCourse.equals(course)) { - return Response.notModified().build(); - } - courses.put(courseId, course); - return Response.ok().build(); - } - - @Path("courses/{courseId}/students") - public Course pathToStudent(@PathParam("courseId") int courseId) { - return findById(courseId); - } - - private Course findById(int id) { - for (Map.Entry course : courses.entrySet()) { - if (course.getKey() == id) { - return course.getValue(); - } - } - return null; - } -} \ No newline at end of file diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java index bb35bab3f8..d3ed2eb70e 100644 --- a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/RestfulServer.java @@ -7,8 +7,8 @@ import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; public class RestfulServer { public static void main(String args[]) throws Exception { JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean(); - factoryBean.setResourceClasses(Baeldung.class); - factoryBean.setResourceProvider(new SingletonResourceProvider(new Baeldung())); + factoryBean.setResourceClasses(CourseRepository.class); + factoryBean.setResourceProvider(new SingletonResourceProvider(new CourseRepository())); factoryBean.setAddress("http://localhost:8080/"); Server server = factoryBean.create(); @@ -18,4 +18,4 @@ public class RestfulServer { server.destroy(); System.exit(0); } -} \ No newline at end of file +} From 99f2ae6a32016d5061892773e075e9f3394af790 Mon Sep 17 00:00:00 2001 From: Zeger Hendrikse Date: Tue, 25 Oct 2016 17:51:03 +0200 Subject: [PATCH 290/309] Renamed Baeldung class to CourseRepository class --- .../implementation/CourseRepository.java | 72 +++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/CourseRepository.java diff --git a/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/CourseRepository.java b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/CourseRepository.java new file mode 100644 index 0000000000..a2fd6be435 --- /dev/null +++ b/apache-cxf/cxf-jaxrs-implementation/src/main/java/com/baeldung/cxf/jaxrs/implementation/CourseRepository.java @@ -0,0 +1,72 @@ +package com.baeldung.cxf.jaxrs.implementation; + +import javax.ws.rs.*; +import javax.ws.rs.core.Response; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Path("baeldung") +@Produces("text/xml") +public class CourseRepository { + private Map courses = new HashMap<>(); + + { + Student student1 = new Student(); + Student student2 = new Student(); + student1.setId(1); + student1.setName("Student A"); + student2.setId(2); + student2.setName("Student B"); + + List course1Students = new ArrayList<>(); + course1Students.add(student1); + course1Students.add(student2); + + Course course1 = new Course(); + Course course2 = new Course(); + course1.setId(1); + course1.setName("REST with Spring"); + course1.setStudents(course1Students); + course2.setId(2); + course2.setName("Learn Spring Security"); + + courses.put(1, course1); + courses.put(2, course2); + } + + @GET + @Path("courses/{courseId}") + public Course getCourse(@PathParam("courseId") int courseId) { + return findById(courseId); + } + + @PUT + @Path("courses/{courseId}") + public Response updateCourse(@PathParam("courseId") int courseId, Course course) { + Course existingCourse = findById(courseId); + if (existingCourse == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + if (existingCourse.equals(course)) { + return Response.notModified().build(); + } + courses.put(courseId, course); + return Response.ok().build(); + } + + @Path("courses/{courseId}/students") + public Course pathToStudent(@PathParam("courseId") int courseId) { + return findById(courseId); + } + + private Course findById(int id) { + for (Map.Entry course : courses.entrySet()) { + if (course.getKey() == id) { + return course.getValue(); + } + } + return null; + } +} From 24ee4fb35c9fd870d02d8f79d78d97f255e90dad Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 26 Oct 2016 07:09:21 +0200 Subject: [PATCH 291/309] Refactor UDPTest --- .../test/java/com/baeldung/java/networking/udp/UDPTest.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core-java/src/test/java/com/baeldung/java/networking/udp/UDPTest.java b/core-java/src/test/java/com/baeldung/java/networking/udp/UDPTest.java index fb8e1eb366..cf35c07ab3 100644 --- a/core-java/src/test/java/com/baeldung/java/networking/udp/UDPTest.java +++ b/core-java/src/test/java/com/baeldung/java/networking/udp/UDPTest.java @@ -29,7 +29,11 @@ public class UDPTest { @After public void tearDown() { - client.sendEcho("end"); + stopEchoServer(); client.close(); } + + private void stopEchoServer() { + client.sendEcho("end"); + } } From 3bbb7c89451473ad2ca900c98fb22e8022259307 Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 26 Oct 2016 09:20:26 +0200 Subject: [PATCH 292/309] BAEL-80 - removing an obsolete file (cherry picked from commit 5f6912f) --- spring-integration/pom.xml | 133 ++++++++++++++++++ .../spring-integration-context.backup | 80 +++++++++++ 2 files changed, 213 insertions(+) create mode 100644 spring-integration/pom.xml create mode 100644 spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.backup diff --git a/spring-integration/pom.xml b/spring-integration/pom.xml new file mode 100644 index 0000000000..251322295f --- /dev/null +++ b/spring-integration/pom.xml @@ -0,0 +1,133 @@ + + 4.0.0 + + com.baeldung.samples.spring.integration + baeldungSIsample + 1.0.0.BUILD-SNAPSHOT + jar + + Baeldung Spring Intro + http://www.springsource.org/spring-integration + + + 2.2.1 + + + + UTF-8 + 2.2.4.RELEASE + 1.2.17 + 4.11 + + + + + repo.springsource.org.milestone + Spring Framework Maven Milestone Repository + https://repo.springsource.org/milestone + + + + + + + maven-eclipse-plugin + 2.9 + + + org.springframework.ide.eclipse.core.springnature + + + org.springframework.ide.eclipse.core.springbuilder + + true + true + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.6 + 1.6 + -Xlint:all + true + true + + + + org.codehaus.mojo + exec-maven-plugin + 1.2.1 + + com.baeldung.samples.Main + + + + + + + + + + + junit + junit + ${junit.version} + test + + + org.springframework.integration + spring-integration-core + 4.3.4.RELEASE + + + javax.activation + activation + 1.1.1 + true + + + javax.mail + mail + 1.4.7 + + + log4j + log4j + ${log4j.version} + + + org.springframework.integration + spring-integration-twitter + 4.3.4.RELEASE + + + org.springframework.integration + spring-integration-mail + 4.3.4.RELEASE + + + org.springframework.integration + spring-integration-ftp + 4.3.4.RELEASE + + + org.springframework.social + spring-social-core + 1.1.4.RELEASE + + + org.springframework.integration + spring-integration-file + 4.3.4.RELEASE + + + junit + junit + 4.12 + + + diff --git a/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.backup b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.backup new file mode 100644 index 0000000000..5687a15f02 --- /dev/null +++ b/spring-integration/src/main/resources/META-INF/spring/integration/spring-integration-context.backup @@ -0,0 +1,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 4906adb2ad15c402d9a94dc35c425b3d1dfae28b Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 26 Oct 2016 15:07:34 +0200 Subject: [PATCH 293/309] minor fix --- .../jackson/entities/ActorJackson.java | 10 +++++- .../JacksonDeserializeTest.java | 27 ++++++++-------- .../serialization/JacksonSerializeTest.java | 32 ++++++++----------- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/jackson/src/main/java/org/baeldung/jackson/entities/ActorJackson.java b/jackson/src/main/java/org/baeldung/jackson/entities/ActorJackson.java index 68cd6117d6..375b2204ff 100644 --- a/jackson/src/main/java/org/baeldung/jackson/entities/ActorJackson.java +++ b/jackson/src/main/java/org/baeldung/jackson/entities/ActorJackson.java @@ -1,7 +1,10 @@ package org.baeldung.jackson.entities; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; +import java.util.TimeZone; public class ActorJackson { @@ -22,7 +25,7 @@ public class ActorJackson { @Override public String toString() { - return "ActorJackson [imdbId=" + imdbId + ", dateOfBirth=" + dateOfBirth + ", filmography=" + filmography + "]"; + return "ActorJackson [imdbId=" + imdbId + ", dateOfBirth=" + formatDateOfBirth() + ", filmography=" + filmography + "]"; } public String getImdbId() { @@ -49,4 +52,9 @@ public class ActorJackson { this.filmography = filmography; } + private String formatDateOfBirth() { + final DateFormat formatter = new SimpleDateFormat("EEE MMM dd hh:mm:ss zzz yyyy"); + formatter.setTimeZone(TimeZone.getTimeZone("GMT")); + return formatter.format(dateOfBirth); + } } diff --git a/jackson/src/test/java/org/baeldung/jackson/deserialization/JacksonDeserializeTest.java b/jackson/src/test/java/org/baeldung/jackson/deserialization/JacksonDeserializeTest.java index 71d5ad3d81..31a6ae8ef9 100644 --- a/jackson/src/test/java/org/baeldung/jackson/deserialization/JacksonDeserializeTest.java +++ b/jackson/src/test/java/org/baeldung/jackson/deserialization/JacksonDeserializeTest.java @@ -1,39 +1,40 @@ package org.baeldung.jackson.deserialization; -import com.fasterxml.jackson.databind.ObjectMapper; -import org.baeldung.jackson.entities.Movie; -import org.junit.Assert; -import org.junit.Test; - import java.io.IOException; import java.text.DateFormat; import java.text.SimpleDateFormat; +import org.baeldung.jackson.entities.Movie; +import org.junit.Assert; +import org.junit.Test; + +import com.fasterxml.jackson.databind.ObjectMapper; + public class JacksonDeserializeTest { @Test public void whenSimpleDeserialize_thenCorrect() throws IOException { - String jsonInput = "{\"imdbId\":\"tt0472043\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"1982-09-21T12:00:00+01:00\",\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; - ObjectMapper mapper = new ObjectMapper(); - Movie movie = mapper.readValue(jsonInput, Movie.class); + final String jsonInput = "{\"imdbId\":\"tt0472043\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"1982-09-21T12:00:00+01:00\",\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; + final ObjectMapper mapper = new ObjectMapper(); + final Movie movie = mapper.readValue(jsonInput, Movie.class); - String expectedOutput = "Movie [imdbId=tt0472043, director=null, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 04:00:00 PDT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; + final String expectedOutput = "Movie [imdbId=tt0472043, director=null, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; Assert.assertEquals(movie.toString(), expectedOutput); } @Test public void whenCustomDeserialize_thenCorrect() throws IOException { - String jsonInput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"1982-09-21T12:00:00+01:00\",\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; + final String jsonInput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"1982-09-21T12:00:00+01:00\",\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; - ObjectMapper mapper = new ObjectMapper(); + final ObjectMapper mapper = new ObjectMapper(); final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); mapper.setDateFormat(df); - Movie movie = mapper.readValue(jsonInput, Movie.class); + final Movie movie = mapper.readValue(jsonInput, Movie.class); - String expectedOutput = "Movie [imdbId=tt0472043, director=Mel Gibson, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 12:00:00 PDT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; + final String expectedOutput = "Movie [imdbId=tt0472043, director=Mel Gibson, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 09:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; Assert.assertEquals(movie.toString(), expectedOutput); } diff --git a/jackson/src/test/java/org/baeldung/jackson/serialization/JacksonSerializeTest.java b/jackson/src/test/java/org/baeldung/jackson/serialization/JacksonSerializeTest.java index 6c8aa90fae..fcf19fcfad 100644 --- a/jackson/src/test/java/org/baeldung/jackson/serialization/JacksonSerializeTest.java +++ b/jackson/src/test/java/org/baeldung/jackson/serialization/JacksonSerializeTest.java @@ -1,7 +1,6 @@ package org.baeldung.jackson.serialization; import java.io.IOException; -import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; @@ -9,14 +8,11 @@ import java.util.Arrays; import org.baeldung.jackson.entities.ActorJackson; import org.baeldung.jackson.entities.Movie; import org.baeldung.jackson.entities.MovieWithNullValue; -import org.baeldung.jackson.serialization.ActorJacksonSerializer; import org.junit.Assert; import org.junit.Test; -import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.util.DefaultPrettyPrinter; -import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; @@ -26,34 +22,34 @@ public class JacksonSerializeTest { @Test public void whenSimpleSerialize_thenCorrect() throws JsonProcessingException, ParseException { - SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); + final SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); - ActorJackson rudyYoungblood = new ActorJackson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); - Movie movie = new Movie("tt0472043", "Mel Gibson", Arrays.asList(rudyYoungblood)); + final ActorJackson rudyYoungblood = new ActorJackson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); + final Movie movie = new Movie("tt0472043", "Mel Gibson", Arrays.asList(rudyYoungblood)); - ObjectMapper mapper = new ObjectMapper(); - String jsonResult = mapper.writeValueAsString(movie); + final ObjectMapper mapper = new ObjectMapper(); + final String jsonResult = mapper.writeValueAsString(movie); - String expectedOutput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":401439600000,\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; + final String expectedOutput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":401403600000,\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; Assert.assertEquals(jsonResult, expectedOutput); } @Test public void whenCustomSerialize_thenCorrect() throws ParseException, IOException { - SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); + final SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); - ActorJackson rudyYoungblood = new ActorJackson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); - MovieWithNullValue movieWithNullValue = new MovieWithNullValue(null, "Mel Gibson", Arrays.asList(rudyYoungblood)); + final ActorJackson rudyYoungblood = new ActorJackson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); + final MovieWithNullValue movieWithNullValue = new MovieWithNullValue(null, "Mel Gibson", Arrays.asList(rudyYoungblood)); - SimpleModule module = new SimpleModule(); + final SimpleModule module = new SimpleModule(); module.addSerializer(new ActorJacksonSerializer(ActorJackson.class)); - ObjectMapper mapper = new ObjectMapper(); + final ObjectMapper mapper = new ObjectMapper(); - String jsonResult = mapper.registerModule(module).writer(new DefaultPrettyPrinter()).writeValueAsString(movieWithNullValue); + final String jsonResult = mapper.registerModule(module).writer(new DefaultPrettyPrinter()).writeValueAsString(movieWithNullValue); - Object json = mapper.readValue("{\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"21-09-1982\",\"N° Film: \":3,\"filmography\":\"Apocalypto-Beatdown-Wind Walkers\"}],\"imdbID\":null}", Object.class); - String expectedOutput = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(json); + final Object json = mapper.readValue("{\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"21-09-1982\",\"N° Film: \":3,\"filmography\":\"Apocalypto-Beatdown-Wind Walkers\"}],\"imdbID\":null}", Object.class); + final String expectedOutput = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT).writeValueAsString(json); Assert.assertEquals(jsonResult, expectedOutput); } From 11440cd673cfd9a9d647ed271726c2f2a4dd4fcc Mon Sep 17 00:00:00 2001 From: eugenp Date: Wed, 26 Oct 2016 21:21:51 +0300 Subject: [PATCH 294/309] example of a module with 2 boot apps --- .../baeldung/example/spring/AnotherBootApp.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 spring-security-rest-full/src/main/java/org/baeldung/example/spring/AnotherBootApp.java diff --git a/spring-security-rest-full/src/main/java/org/baeldung/example/spring/AnotherBootApp.java b/spring-security-rest-full/src/main/java/org/baeldung/example/spring/AnotherBootApp.java new file mode 100644 index 0000000000..445a70f29c --- /dev/null +++ b/spring-security-rest-full/src/main/java/org/baeldung/example/spring/AnotherBootApp.java @@ -0,0 +1,17 @@ +package org.baeldung.example.spring; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; + +@EnableScheduling +@EnableAutoConfiguration +@ComponentScan("org.baeldung") +public class AnotherBootApp extends WebMvcConfigurerAdapter { + + public static void main(final String[] args) { + SpringApplication.run(AnotherBootApp.class, args); + } +} \ No newline at end of file From 49a44be4416a9a87dce2fdd6a63df3e394ac26cc Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 26 Oct 2016 23:11:07 +0200 Subject: [PATCH 295/309] Fix pom --- pom.xml | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 89b377a214..514d066844 100644 --- a/pom.xml +++ b/pom.xml @@ -17,22 +17,22 @@ assertj apache-cxf - autovalue-tutorial - + autovalue + cdi core-java - core-java-8 couchbase-sdk dozer - dependency-injection deltaspike patterns - feign-client + feign + flyway + gson guava guava18 @@ -46,12 +46,12 @@ jackson javaxval jjwt - jooq-spring + jpa-storedprocedure json json-path junit5 - jee7schedule + jee7 log4j @@ -68,7 +68,6 @@ rest-assured rest-testing resteasy - okhttp spring-all spring-akka @@ -76,6 +75,7 @@ spring-autowire spring-batch spring-boot + spring-core spring-cucumber spring-data-cassandra spring-data-couchbase-2 @@ -84,13 +84,14 @@ spring-data-mongodb spring-data-redis spring-data-rest + spring-exceptions spring-freemarker spring-hibernate3 spring-hibernate4 - spring-integration - spring-jpa spring-jms + spring-jooq + spring-jpa spring-katharsis spring-mockito spring-mvc-java @@ -109,6 +110,7 @@ spring-security-basic-auth spring-security-custom-permission + spring-security-custom-voter spring-security-mvc-custom spring-security-mvc-digest-auth spring-security-mvc-ldap @@ -127,6 +129,7 @@ jsf xml + xmlunit2 lombok redis From 2b9470eed0483df88f3aa77811f3fc6b4541d437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sun, 4 Sep 2016 12:07:13 +0200 Subject: [PATCH 296/309] BAEL-325: Implemented various filter examples. --- .../intercepting-filter-pattern/pom.xml | 49 +++++++++++++++++ .../controller/FrontControllerServlet.java | 55 +++++++++++++++++++ .../controller/commands/FrontCommand.java | 43 +++++++++++++++ .../controller/commands/LoginCommand.java | 20 +++++++ .../controller/commands/SearchCommand.java | 22 ++++++++ .../controller/commands/UnknownCommand.java | 11 ++++ .../patterns/front/controller/data/Book.java | 15 +++++ .../front/controller/data/BookImpl.java | 46 ++++++++++++++++ .../front/controller/data/Bookshelf.java | 16 ++++++ .../front/controller/data/BookshelfImpl.java | 24 ++++++++ .../front/controller/filters/AuditFilter.java | 25 +++++++++ .../filters/AuthenticationFilter.java | 40 ++++++++++++++ .../front/controller/filters/BaseFilter.java | 25 +++++++++ .../controller/filters/EncodingFilter.java | 30 ++++++++++ .../controller/filters/FilterChainImpl.java | 28 ++++++++++ .../controller/filters/FilterManager.java | 21 +++++++ .../controller/filters/LoggingFilter.java | 39 +++++++++++++ .../front/controller/filters/OnIntercept.java | 5 ++ .../filters/VisitorCounterFilter.java | 23 ++++++++ .../main/webapp/WEB-INF/jsp/book-found.jsp | 13 +++++ .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 11 ++++ .../src/main/webapp/WEB-INF/jsp/login.jsp | 15 +++++ .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 10 ++++ .../webapp/WEB-INF/jsp/visitor-counter.jsp | 2 + 24 files changed, 588 insertions(+) create mode 100644 enterprise-patterns/intercepting-filter-pattern/pom.xml create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuditFilter.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/BaseFilter.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/EncodingFilter.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterChainImpl.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/OnIntercept.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/VisitorCounterFilter.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp diff --git a/enterprise-patterns/intercepting-filter-pattern/pom.xml b/enterprise-patterns/intercepting-filter-pattern/pom.xml new file mode 100644 index 0000000000..ffe597a813 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + intercepting-filter-pattern + war + + + enterprise-patterns-parent + com.baeldung.enterprise.patterns + 1.0.0-SNAPSHOT + + + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + org.slf4j + slf4j-api + 1.7.21 + provided + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.eclipse.jetty + jetty-maven-plugin + 9.3.11.v20160721 + + + /intercepting-filter + + + + + + diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java new file mode 100644 index 0000000000..728caca27e --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java @@ -0,0 +1,55 @@ +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.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "front-controller", urlPatterns = "/") +public class FrontControllerServlet extends HttpServlet { + @Override + protected void doGet( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + doCommand(request, response); + } + + @Override + protected void doPost( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + doCommand(request, response); + } + + private void doCommand( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + FrontCommand command = getCommand(request); + command.init(request, response); + command.process(); + } + + private FrontCommand getCommand(HttpServletRequest request) { + try { + Class type = Class.forName( + String.format( + "com.baeldung.enterprise.patterns.front.controller.commands.%sCommand", + request.getParameter("command") + ) + ); + return (FrontCommand) type + .asSubclass(FrontCommand.class) + .newInstance(); + } catch (Exception e) { + return new UnknownCommand(); + } + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java new file mode 100644 index 0000000000..370127b7f7 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java @@ -0,0 +1,43 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import com.baeldung.enterprise.patterns.front.controller.filters.FilterManager; +import com.baeldung.enterprise.patterns.front.controller.filters.OnIntercept; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public abstract class FrontCommand implements OnIntercept { + protected HttpServletRequest request; + protected HttpServletResponse response; + private boolean intercept; + + public FrontCommand() { + } + + public void init(HttpServletRequest request, HttpServletResponse response) { + this.request = request; + this.response = response; + } + + public void process() throws ServletException, IOException { + FilterManager.process(request, response, this); + } + + public void forward(String target) throws ServletException, IOException { + if (intercept) { + return; + } + String path = String.format("/WEB-INF/jsp/%s.jsp", target); + RequestDispatcher dispatcher = request.getServletContext() + .getRequestDispatcher(path); + dispatcher.forward(request, response); + } + + @Override + public void intercept() { + intercept = true; + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java new file mode 100644 index 0000000000..719605108e --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java @@ -0,0 +1,20 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class LoginCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + if (request.getMethod().equals("GET")) { + request.setAttribute("redirect", request.getRequestURL() + .append("?").append(request.getQueryString()).toString()); + forward("login"); + } else { + HttpSession session = request.getSession(true); + session.setAttribute("username", request.getParameter("username")); + response.sendRedirect(request.getParameter("redirect")); + } + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java new file mode 100644 index 0000000000..93dac4b363 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.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.BookshelfImpl; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class SearchCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + Book book = new BookshelfImpl().getInstance() + .findByTitle(request.getParameter("title")); + if (book != null) { + request.setAttribute("book", book); + forward("book-found"); + } else { + forward("book-notfound"); + } + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java b/enterprise-patterns/intercepting-filter-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/intercepting-filter-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/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java new file mode 100644 index 0000000000..abadcc0d76 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java @@ -0,0 +1,15 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +public interface Book { + String getAuthor(); + + void setAuthor(String author); + + String getTitle(); + + void setTitle(String title); + + Double getPrice(); + + void setPrice(Double price); +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java b/enterprise-patterns/intercepting-filter-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/intercepting-filter-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/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java new file mode 100644 index 0000000000..8def45cb69 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -0,0 +1,16 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +public interface Bookshelf { + + 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)); + add(new BookImpl("Unknown", "Something about German Umlauts (äüö) and ß", 5.49)); + } + + Bookshelf getInstance(); + + boolean add(E book); + + Book findByTitle(String title); +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java b/enterprise-patterns/intercepting-filter-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/intercepting-filter-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); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuditFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuditFilter.java new file mode 100644 index 0000000000..d24c0a94b3 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuditFilter.java @@ -0,0 +1,25 @@ +package com.baeldung.enterprise.patterns.front.controller.filters; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class AuditFilter extends BaseFilter { + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpSession session = httpServletRequest.getSession(false); + if (session != null && session.getAttribute("username") != null) { + request.setAttribute("username", session.getAttribute("username")); + } + chain.doFilter(request, response); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java new file mode 100644 index 0000000000..66f9887980 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java @@ -0,0 +1,40 @@ +package com.baeldung.enterprise.patterns.front.controller.filters; + +import com.baeldung.enterprise.patterns.front.controller.commands.FrontCommand; +import com.baeldung.enterprise.patterns.front.controller.commands.LoginCommand; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class AuthenticationFilter extends BaseFilter { + private OnIntercept callback; + + public AuthenticationFilter(OnIntercept callback) { + this.callback = callback; + } + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + HttpSession session = httpServletRequest.getSession(false); + if (session == null || session.getAttribute("username") == null) { + FrontCommand command = new LoginCommand(); + command.init(httpServletRequest, httpServletResponse); + command.process(); + callback.intercept(); + } else { + chain.doFilter(request, response); + } + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/BaseFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/BaseFilter.java new file mode 100644 index 0000000000..81b5027187 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/BaseFilter.java @@ -0,0 +1,25 @@ +package com.baeldung.enterprise.patterns.front.controller.filters; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.Filter; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; + +public abstract class BaseFilter implements Filter { + private static final Logger log = LoggerFactory.getLogger(BaseFilter.class); + + protected FilterConfig filterConfig; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + log.info("Initialize filter: {}", getClass().getSimpleName()); + this.filterConfig = filterConfig; + } + + @Override + public void destroy() { + log.info("Destroy filter: {}", getClass().getSimpleName()); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/EncodingFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/EncodingFilter.java new file mode 100644 index 0000000000..d36e204dd5 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/EncodingFilter.java @@ -0,0 +1,30 @@ +package com.baeldung.enterprise.patterns.front.controller.filters; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import java.io.IOException; + +@WebFilter(servletNames = "front-controller") +public class EncodingFilter extends BaseFilter { + private String encoding; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + super.init(filterConfig); + this.encoding = filterConfig.getInitParameter("encoding"); + } + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + String encoding = request.getParameter("encoding"); + if (encoding == null) { + encoding = this.encoding; + } + response.setCharacterEncoding(encoding); + chain.doFilter(request, response); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterChainImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterChainImpl.java new file mode 100644 index 0000000000..dd92759e8b --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterChainImpl.java @@ -0,0 +1,28 @@ +package com.baeldung.enterprise.patterns.front.controller.filters; + +import javax.servlet.Filter; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.Iterator; + +public class FilterChainImpl implements javax.servlet.FilterChain { + private Iterator filters; + + public FilterChainImpl(Filter... filters) { + this.filters = Arrays.asList(filters).iterator(); + } + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response + ) throws IOException, ServletException { + if (filters.hasNext()) { + Filter filter = filters.next(); + filter.doFilter(request, response, this); + } + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java new file mode 100644 index 0000000000..efa8511f2a --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java @@ -0,0 +1,21 @@ +package com.baeldung.enterprise.patterns.front.controller.filters; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class FilterManager { + public static void process( + HttpServletRequest request, + HttpServletResponse response, + OnIntercept callback + ) throws ServletException, IOException { + FilterChain filterChain = new FilterChainImpl( + new AuthenticationFilter(callback), + new AuditFilter() + ); + filterChain.doFilter(request, response); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java new file mode 100644 index 0000000000..089a7807cf --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java @@ -0,0 +1,39 @@ +package com.baeldung.enterprise.patterns.front.controller.filters; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +@WebFilter(servletNames = "front-controller") +public class LoggingFilter extends BaseFilter { + private static final Logger log = LoggerFactory.getLogger(LoggingFilter.class); + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + chain.doFilter(request, response); + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + String username = (String) httpServletRequest.getAttribute("username"); + if (username != null && username.length() > 0) { + username = username.concat("@"); + } else { + username = ""; + } + String intro = "Request"; + if (username.length() > 0) { + intro = "Authenticated request"; + } + log.info("{} from '{}{}': {}?{}", intro, username, request.getRemoteAddr(), + httpServletRequest.getRequestURI(), request.getParameterMap()); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/OnIntercept.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/OnIntercept.java new file mode 100644 index 0000000000..54da744e78 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/OnIntercept.java @@ -0,0 +1,5 @@ +package com.baeldung.enterprise.patterns.front.controller.filters; + +public interface OnIntercept { + void intercept(); +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/VisitorCounterFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/VisitorCounterFilter.java new file mode 100644 index 0000000000..0ae7cd73fd --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/VisitorCounterFilter.java @@ -0,0 +1,23 @@ +package com.baeldung.enterprise.patterns.front.controller.filters; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.annotation.WebFilter; +import java.io.IOException; + +@WebFilter(servletNames = "front-controller") +public class VisitorCounterFilter extends BaseFilter { + private int counter; + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + request.setAttribute("counter", ++counter); + chain.doFilter(request, response); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp new file mode 100644 index 0000000000..36f94b0933 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -0,0 +1,13 @@ + + + + Bookshelf: Title found + + +

    Our Bookshelf contains this title:

    +

    ${book.getTitle()}

    +

    Author: ${book.getAuthor()}

    + + <%@include file="visitor-counter.jsp"%> + + diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp new file mode 100644 index 0000000000..02d1307e00 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -0,0 +1,11 @@ + + + + Bookshelf: Title not found + + +

    Our Bookshelf doesn't contains this title:

    +

    ${param.get("title")}

    + <%@include file="visitor-counter.jsp"%> + + diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp new file mode 100644 index 0000000000..a1609ecaff --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp @@ -0,0 +1,15 @@ + + + + Bookshelf: Login + + +

    Please input a username:

    +

    Login

    +
    + + + +
    + + diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp new file mode 100644 index 0000000000..010cb7ffb4 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -0,0 +1,10 @@ + + + + Bookshelf: Command unknown + + +

    Sorry, this command is not known!

    + <%@include file="visitor-counter.jsp"%> + + diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp new file mode 100644 index 0000000000..7dc1d78196 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp @@ -0,0 +1,2 @@ +
    +

    You are visitor #${counter}!

    From ae3d9760c903ddf8d5c2a2f2168c7555e9c3e983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sun, 4 Sep 2016 23:12:18 +0200 Subject: [PATCH 297/309] BAEL-325: Massive extensions to the example from BAEL-305. --- .../intercepting-filter-pattern/pom.xml | 2 +- .../controller/FrontControllerServlet.java | 13 +++++- .../controller/commands/CheckoutCommand.java | 27 +++++++++++++ .../controller/commands/HomeCommand.java | 17 ++++++++ .../controller/commands/LoginCommand.java | 10 ++--- .../controller/commands/LogoutCommand.java | 16 ++++++++ .../controller/commands/OrderCommand.java | 33 +++++++++++++++ .../controller/commands/SearchCommand.java | 13 +++--- .../controller/commands/ShowCommand.java | 21 ++++++++++ .../controller/commands/UnknownCommand.java | 1 + .../patterns/front/controller/data/Book.java | 4 ++ .../front/controller/data/BookImpl.java | 14 ++++++- .../front/controller/data/Bookshelf.java | 14 ++++--- .../front/controller/data/BookshelfImpl.java | 25 ++++++------ .../patterns/front/controller/data/Order.java | 11 +++++ .../front/controller/data/OrderImpl.java | 40 +++++++++++++++++++ .../filters/AuthenticationFilter.java | 2 +- .../controller/filters/FilterManager.java | 2 +- .../controller/filters/LoggingFilter.java | 12 ++---- .../main/webapp/WEB-INF/jsp/book-found.jsp | 21 +++++++--- .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 10 ++--- .../src/main/webapp/WEB-INF/jsp/home.jsp | 27 +++++++++++++ .../src/main/webapp/WEB-INF/jsp/login.jsp | 5 ++- .../webapp/WEB-INF/jsp/shopping-cart-hint.jsp | 16 ++++++++ .../main/webapp/WEB-INF/jsp/shopping-cart.jsp | 29 ++++++++++++++ .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 1 - .../webapp/WEB-INF/jsp/visitor-counter.jsp | 7 +++- 27 files changed, 335 insertions(+), 58 deletions(-) create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/CheckoutCommand.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/HomeCommand.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LogoutCommand.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/OrderCommand.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/ShowCommand.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Order.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/OrderImpl.java create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/home.jsp create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp create mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp diff --git a/enterprise-patterns/intercepting-filter-pattern/pom.xml b/enterprise-patterns/intercepting-filter-pattern/pom.xml index ffe597a813..0e1008657a 100644 --- a/enterprise-patterns/intercepting-filter-pattern/pom.xml +++ b/enterprise-patterns/intercepting-filter-pattern/pom.xml @@ -37,7 +37,7 @@ org.eclipse.jetty jetty-maven-plugin - 9.3.11.v20160721 + 9.4.0.M1 /intercepting-filter diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java index 728caca27e..67400897c4 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java @@ -2,7 +2,10 @@ 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 com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; +import com.baeldung.enterprise.patterns.front.controller.data.BookshelfImpl; +import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; @@ -10,8 +13,16 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -@WebServlet(name = "front-controller", urlPatterns = "/") +@WebServlet(name = "front-controller", urlPatterns = "/index") public class FrontControllerServlet extends HttpServlet { + @Override + public void init(ServletConfig config) throws ServletException { + super.init(config); + Bookshelf bookshelf = new BookshelfImpl(); + bookshelf.init(); + getServletContext().setAttribute("bookshelf", bookshelf); + } + @Override protected void doGet( HttpServletRequest request, diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/CheckoutCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/CheckoutCommand.java new file mode 100644 index 0000000000..876e439139 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/CheckoutCommand.java @@ -0,0 +1,27 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import com.baeldung.enterprise.patterns.front.controller.data.Order; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class CheckoutCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + HttpSession session = request.getSession(false); + if (request.getMethod().equals("POST")) { + session.removeAttribute("order"); + response.sendRedirect("index?command=Home&message=Thank you for buying!"); + } else { + Order order = (Order) session.getAttribute("order"); + Double total = order.getItems().entrySet().stream() + .map(entry -> entry.getKey().getPrice() * entry.getValue()) + .reduce((p1, p2) -> p1 + p2) + .orElse(0.00); + request.setAttribute("total", total); + forward("shopping-cart"); + } + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/HomeCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/HomeCommand.java new file mode 100644 index 0000000000..49b62a29bd --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/HomeCommand.java @@ -0,0 +1,17 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class HomeCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + Bookshelf bookshelf = (Bookshelf) request.getServletContext() + .getAttribute("bookshelf"); + request.setAttribute("books", bookshelf); + forward("home"); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java index 719605108e..beef42d269 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java @@ -7,14 +7,14 @@ import java.io.IOException; public class LoginCommand extends FrontCommand { @Override public void process() throws ServletException, IOException { - if (request.getMethod().equals("GET")) { - request.setAttribute("redirect", request.getRequestURL() - .append("?").append(request.getQueryString()).toString()); - forward("login"); - } else { + if (request.getMethod().equals("POST")) { HttpSession session = request.getSession(true); session.setAttribute("username", request.getParameter("username")); response.sendRedirect(request.getParameter("redirect")); + } else { + request.setAttribute("redirect", request.getRequestURL() + .append("?").append(request.getQueryString()).toString()); + forward("login"); } } } diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LogoutCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LogoutCommand.java new file mode 100644 index 0000000000..b502112558 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LogoutCommand.java @@ -0,0 +1,16 @@ +package com.baeldung.enterprise.patterns.front.controller.commands; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class LogoutCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + HttpSession session = request.getSession(false); + session.removeAttribute("username"); + session.removeAttribute("order"); + response.sendRedirect("index?command=Home"); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/OrderCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/OrderCommand.java new file mode 100644 index 0000000000..91ed909a77 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/OrderCommand.java @@ -0,0 +1,33 @@ +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.Order; +import com.baeldung.enterprise.patterns.front.controller.data.OrderImpl; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class OrderCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + if (request.getMethod().equals("POST")) { + HttpSession session = request.getSession(false); + Order order = (Order) session.getAttribute("order"); + if (order == null) { + String username = (String) session.getAttribute("username"); + order = new OrderImpl(username); + } + Bookshelf bookshelf = (Bookshelf) request.getServletContext() + .getAttribute("bookshelf"); + String isbn = request.getParameter("isbn"); + Integer quantity = Integer.parseInt(request.getParameter("quantity")); + Book book = bookshelf.get(isbn); + order.add(book, quantity); + session.setAttribute("order", order); + response.sendRedirect(String.format("index?command=Show&isbn=%s", isbn)); + } + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java index 93dac4b363..517092508a 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java @@ -1,19 +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.BookshelfImpl; +import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; import javax.servlet.ServletException; import java.io.IOException; +import java.util.List; public class SearchCommand extends FrontCommand { @Override public void process() throws ServletException, IOException { super.process(); - Book book = new BookshelfImpl().getInstance() - .findByTitle(request.getParameter("title")); - if (book != null) { - request.setAttribute("book", book); + Bookshelf bookshelf = (Bookshelf) request.getServletContext() + .getAttribute("bookshelf"); + String q = request.getParameter("q"); + List books = bookshelf.find(q); + if (books.size() > 0) { + request.setAttribute("books", books); forward("book-found"); } else { forward("book-notfound"); diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/ShowCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/ShowCommand.java new file mode 100644 index 0000000000..eb615f075d --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/ShowCommand.java @@ -0,0 +1,21 @@ +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; +import java.util.Collections; + +public class ShowCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + Bookshelf bookshelf = (Bookshelf) request.getServletContext() + .getAttribute("bookshelf"); + String title = request.getParameter("isbn"); + Book book = bookshelf.get(title); + request.setAttribute("books", Collections.singletonList(book)); + forward("book-found"); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java index 90103c8f42..439ae0c8da 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java @@ -6,6 +6,7 @@ import java.io.IOException; public class UnknownCommand extends FrontCommand { @Override public void process() throws ServletException, IOException { + super.process(); forward("unknown"); } } diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java index abadcc0d76..472ba4c2fa 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java @@ -1,6 +1,10 @@ package com.baeldung.enterprise.patterns.front.controller.data; public interface Book { + String getIsbn(); + + void setIsbn(String isbn); + String getAuthor(); void setAuthor(String author); diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java index b270bc7985..c633607f41 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java @@ -1,6 +1,7 @@ package com.baeldung.enterprise.patterns.front.controller.data; public class BookImpl implements Book { + private String isbn; private String author; private String title; private Double price; @@ -8,12 +9,23 @@ public class BookImpl implements Book { public BookImpl() { } - public BookImpl(String author, String title, Double price) { + public BookImpl(String isbn, String author, String title, Double price) { + this.isbn = isbn; this.author = author; this.title = title; this.price = price; } + @Override + public String getIsbn() { + return isbn; + } + + @Override + public void setIsbn(String isbn) { + this.isbn = isbn; + } + @Override public String getAuthor() { return author; diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java index 8def45cb69..e479d27d0e 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java @@ -1,16 +1,18 @@ package com.baeldung.enterprise.patterns.front.controller.data; +import java.util.List; + public interface Bookshelf { 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)); - add(new BookImpl("Unknown", "Something about German Umlauts (äüö) and ß", 5.49)); + add(new BookImpl("001", "Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); + add(new BookImpl("002", "Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); + add(new BookImpl("003", "Unknown", "Something about German Umlauts (äüö) and ß", 5.49)); } - Bookshelf getInstance(); - boolean add(E book); - Book findByTitle(String title); + Book get(String isbn); + + List find(String q); } diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java index 3862418857..26090acf74 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java @@ -1,24 +1,23 @@ package com.baeldung.enterprise.patterns.front.controller.data; import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; 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) { + public Book get(String isbn) { return this.stream() - .filter(book -> book.getTitle().toLowerCase().contains(title.toLowerCase())) + .filter(book -> book.getIsbn().equals(isbn)) .findFirst() .orElse(null); } + + @Override + public List find(String q) { + return this.stream() + .filter(book -> book.getTitle().toLowerCase().contains(q.toLowerCase()) + || book.getAuthor().toLowerCase().contains(q.toLowerCase())) + .collect(Collectors.toList()); + } } diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Order.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Order.java new file mode 100644 index 0000000000..2b6b36568a --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Order.java @@ -0,0 +1,11 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +import java.util.Map; + +public interface Order { + String getUsername(); + + Map getItems(); + + void add(Book item, Integer quantity); +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/OrderImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/OrderImpl.java new file mode 100644 index 0000000000..eb4a6674cc --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/OrderImpl.java @@ -0,0 +1,40 @@ +package com.baeldung.enterprise.patterns.front.controller.data; + +import java.util.HashMap; +import java.util.Map; + +public class OrderImpl implements Order { + private String username; + private Map items = new HashMap<>(); + + public OrderImpl(String username) { + this.username = username; + } + + @Override + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + @Override + public Map getItems() { + return items; + } + + public void setItems(Map items) { + this.items = items; + } + + @Override + public void add(Book item, Integer quantity) { + Integer q = 0; + if (this.items.containsKey(item)) { + q = this.items.get(item); + } + this.items.put(item, quantity + q); + } +} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java index 66f9887980..2d43116faa 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java @@ -29,10 +29,10 @@ public class AuthenticationFilter extends BaseFilter { HttpServletResponse httpServletResponse = (HttpServletResponse) response; HttpSession session = httpServletRequest.getSession(false); if (session == null || session.getAttribute("username") == null) { + callback.intercept(); FrontCommand command = new LoginCommand(); command.init(httpServletRequest, httpServletResponse); command.process(); - callback.intercept(); } else { chain.doFilter(request, response); } diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java index efa8511f2a..e374b241c4 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java @@ -14,7 +14,7 @@ public class FilterManager { ) throws ServletException, IOException { FilterChain filterChain = new FilterChainImpl( new AuthenticationFilter(callback), - new AuditFilter() + new VisitorCounterFilter() ); filterChain.doFilter(request, response); } diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java index 089a7807cf..8617fba581 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java @@ -24,16 +24,10 @@ public class LoggingFilter extends BaseFilter { chain.doFilter(request, response); HttpServletRequest httpServletRequest = (HttpServletRequest) request; String username = (String) httpServletRequest.getAttribute("username"); - if (username != null && username.length() > 0) { - username = username.concat("@"); - } else { - username = ""; + if (username == null) { + username = "guest"; } - String intro = "Request"; - if (username.length() > 0) { - intro = "Authenticated request"; - } - log.info("{} from '{}{}': {}?{}", intro, username, request.getRemoteAddr(), + log.info("Request from '{}@{}': {}?{}", username, request.getRemoteAddr(), httpServletRequest.getRequestURI(), request.getParameterMap()); } } diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp index 36f94b0933..5a03fe92ad 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -1,13 +1,24 @@ +<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Book" %> +<%@ page import="java.util.List" %> Bookshelf: Title found -

    Our Bookshelf contains this title:

    -

    ${book.getTitle()}

    -

    Author: ${book.getAuthor()}

    - - <%@include file="visitor-counter.jsp"%> +

    Our Bookshelf contains following titles:

    + <% for (Book book : (List) request.getAttribute("books")) { %> +

    <%= book.getTitle() %>

    +

    Author: <%= book.getAuthor() %>

    +
    + <% } %> + <%@ include file="shopping-cart-hint.jsp"%> + <%@ include file="visitor-counter.jsp"%> diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp index 02d1307e00..284b1e4759 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -1,11 +1,11 @@ - - Bookshelf: Title not found - + + Bookshelf: Title not found +

    Our Bookshelf doesn't contains this title:

    -

    ${param.get("title")}

    - <%@include file="visitor-counter.jsp"%> +

    <%= request.getParameter("q") %>

    + <%@ include file="visitor-counter.jsp"%> diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/home.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/home.jsp new file mode 100644 index 0000000000..f892738c63 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/home.jsp @@ -0,0 +1,27 @@ +<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Book" %> +<%@ page import="java.util.List" %> + + + + Bookshelf: Home + + +
    + + +
    + <% if (request.getParameter("message") != null) { %> +

    <%= request.getParameter("message") %>

    + <% } else { %> +

    Welcome to the Bookshelf!

    + <% } %> + <% for (Book book : (List) request.getAttribute("books")) { %> +
    +

    <%= book.getAuthor() %>:

    +

    <%= book.getTitle() %>

    + More... + <% } %> + <%@ include file="shopping-cart-hint.jsp"%> + <%@ include file="visitor-counter.jsp"%> + + diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp index a1609ecaff..6983fba949 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp @@ -6,10 +6,11 @@

    Please input a username:

    Login

    -
    + - + ">
    + <%@ include file="visitor-counter.jsp" %> diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp new file mode 100644 index 0000000000..5b7c1d9849 --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp @@ -0,0 +1,16 @@ +<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Order" %> +<% if (session != null && session.getAttribute("order") != null) { %> + <% Order order = ((Order) session.getAttribute("order")); %> + <% if (order != null && order.getItems().size() > 0) { %> +
    +

    + Your shopping cart is holding + <% if (order.getItems().size() == 1) { %> + 1 item. + <% } else { %> + <%= (order.getItems().size()) %> items. + <% } %> + Checkout +

    + <% } %> +<% } %> diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp new file mode 100644 index 0000000000..31b25968ee --- /dev/null +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp @@ -0,0 +1,29 @@ +<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Book" %> +<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Order" %> +<%@ page import="java.util.Map" %> + + + + Bookshelf: Checkout + + +

    You are about to buy the following books:

    +

    Shopping Cart

    + <% Order order = (Order) session.getAttribute("order"); %> +
      + <% for (Map.Entry entry : order.getItems().entrySet()) { %> +
    • + <%= entry.getValue() %> x <%= entry.getKey().getPrice() %> +

      <%= entry.getKey().getTitle() %>

      + by <%= entry.getKey().getAuthor()%> +
    • + <% } %> +
    +

    + Total: <%= request.getAttribute("total") %> +

    +
    + +
    + + diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp index 010cb7ffb4..b52b2de8d5 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -5,6 +5,5 @@

    Sorry, this command is not known!

    - <%@include file="visitor-counter.jsp"%> diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp index 7dc1d78196..397364e2b3 100644 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp +++ b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp @@ -1,2 +1,5 @@ -
    -

    You are visitor #${counter}!

    +<% Integer counter = (Integer) request.getAttribute("counter"); %> +<% if (counter != null && counter > 0) { %> +
    +

    You are visitor #<%= counter %>. Logout

    +<% } %> From dcc1889909506442a064a578405da4fe55ba5144 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sat, 1 Oct 2016 04:29:36 +0200 Subject: [PATCH 298/309] BAEL-325: Added intercepting filters. --- .../FrontControllerServlet.java | 0 .../commands/CheckoutCommand.java | 0 .../commands/FrontCommand.java | 0 .../commands/HomeCommand.java | 0 .../commands/LoginCommand.java | 0 .../commands/LogoutCommand.java | 0 .../commands/OrderCommand.java | 0 .../commands/SearchCommand.java | 0 .../commands/ShowCommand.java | 0 .../commands/UnknownCommand.java | 0 .../controller => patterns}/data/Book.java | 0 .../data/BookImpl.java | 0 .../data/Bookshelf.java | 0 .../data/BookshelfImpl.java | 0 .../controller => patterns}/data/Order.java | 0 .../data/OrderImpl.java | 0 .../filters/AuthenticationFilter.java | 0 .../filters/BaseFilter.java | 0 .../filters/EncodingFilter.java | 0 .../filters/FilterChainImpl.java | 0 .../filters/FilterManager.java | 0 .../filters/LoggingFilter.java | 0 .../filters/OnIntercept.java | 0 patterns/pom.xml | 32 ++++++--- .../controller/FrontControllerServlet.java | 38 ----------- .../controller/commands/FrontCommand.java | 32 --------- .../controller/commands/SearchCommand.java | 21 ------ .../front/controller/data/Bookshelf.java | 15 ----- .../front/controller/data/BookshelfImpl.java | 24 ------- .../patterns/FrontControllerServlet.java | 66 +++++++++++++++++++ .../patterns/commands/CheckoutCommand.java | 27 ++++++++ .../patterns/commands/FrontCommand.java | 43 ++++++++++++ .../patterns/commands/HomeCommand.java | 17 +++++ .../patterns/commands/LoginCommand.java | 24 +++++++ .../patterns/commands/LogoutCommand.java | 16 +++++ .../patterns/commands/OrderCommand.java | 33 ++++++++++ .../patterns/commands/SearchCommand.java | 25 +++++++ .../patterns/commands/ShowCommand.java | 21 ++++++ .../commands/UnknownCommand.java | 3 +- .../java/com/baeldung/patterns/data/Book.java | 19 ++++++ .../Book.java => patterns/data/BookImpl.java} | 26 ++++++-- .../com/baeldung/patterns/data/Bookshelf.java | 18 +++++ .../baeldung/patterns/data/BookshelfImpl.java | 23 +++++++ .../com/baeldung/patterns/data/Order.java | 11 ++++ .../com/baeldung/patterns/data/OrderImpl.java | 40 +++++++++++ .../filters/AuthenticationFilter.java | 40 +++++++++++ .../baeldung/patterns/filters/BaseFilter.java | 25 +++++++ .../patterns/filters/EncodingFilter.java | 30 +++++++++ .../patterns/filters/FilterChainImpl.java | 28 ++++++++ .../patterns/filters/FilterManager.java | 21 ++++++ .../patterns/filters/LoggingFilter.java | 33 ++++++++++ .../patterns/filters/OnIntercept.java | 5 ++ .../filters/VisitorCounterFilter.java | 30 +++++++++ .../main/webapp/WEB-INF/jsp/book-found.jsp | 20 ++++-- .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 9 +-- patterns/src/main/webapp/WEB-INF/jsp/home.jsp | 27 ++++++++ .../src/main/webapp/WEB-INF/jsp/login.jsp | 16 +++++ .../webapp/WEB-INF/jsp/shopping-cart-hint.jsp | 16 +++++ .../main/webapp/WEB-INF/jsp/shopping-cart.jsp | 29 ++++++++ .../webapp/WEB-INF/jsp/visitor-counter.jsp | 5 ++ patterns/src/main/webapp/WEB-INF/web.xml | 15 ----- 61 files changed, 756 insertions(+), 167 deletions(-) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/FrontControllerServlet.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/CheckoutCommand.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/FrontCommand.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/HomeCommand.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/LoginCommand.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/LogoutCommand.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/OrderCommand.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/SearchCommand.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/ShowCommand.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/UnknownCommand.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/data/Book.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/data/BookImpl.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/data/Bookshelf.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/data/BookshelfImpl.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/data/Order.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/data/OrderImpl.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/filters/AuthenticationFilter.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/filters/BaseFilter.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/filters/EncodingFilter.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/filters/FilterChainImpl.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/filters/FilterManager.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/filters/LoggingFilter.java (100%) rename enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/filters/OnIntercept.java (100%) delete mode 100644 patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java delete mode 100644 patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java delete mode 100644 patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java delete mode 100644 patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java delete mode 100644 patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java rename patterns/src/main/java/com/baeldung/{enterprise/patterns/front/controller => patterns}/commands/UnknownCommand.java (77%) create mode 100644 patterns/src/main/java/com/baeldung/patterns/data/Book.java rename patterns/src/main/java/com/baeldung/{enterprise/patterns/front/controller/data/Book.java => patterns/data/BookImpl.java} (55%) create mode 100644 patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/data/Order.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java create mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java create mode 100644 patterns/src/main/webapp/WEB-INF/jsp/home.jsp create mode 100644 patterns/src/main/webapp/WEB-INF/jsp/login.jsp create mode 100644 patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp create mode 100644 patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp create mode 100644 patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp delete mode 100644 patterns/src/main/webapp/WEB-INF/web.xml diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/FrontControllerServlet.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/FrontControllerServlet.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/CheckoutCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/CheckoutCommand.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/FrontCommand.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/FrontCommand.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/HomeCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/HomeCommand.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/HomeCommand.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/HomeCommand.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LoginCommand.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LoginCommand.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LoginCommand.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LogoutCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/LogoutCommand.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/OrderCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/OrderCommand.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/OrderCommand.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/OrderCommand.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/SearchCommand.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/SearchCommand.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/ShowCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/ShowCommand.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/ShowCommand.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/ShowCommand.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Book.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Book.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookImpl.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookImpl.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookImpl.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Bookshelf.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Bookshelf.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Order.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Order.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Order.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Order.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/OrderImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/OrderImpl.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/OrderImpl.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/OrderImpl.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/AuthenticationFilter.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/BaseFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/BaseFilter.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/BaseFilter.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/BaseFilter.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/EncodingFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/EncodingFilter.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterChainImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterChainImpl.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterManager.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/FilterManager.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterManager.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/LoggingFilter.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/OnIntercept.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/OnIntercept.java similarity index 100% rename from enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/enterprise/patterns/front/controller/filters/OnIntercept.java rename to enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/OnIntercept.java diff --git a/patterns/pom.xml b/patterns/pom.xml index 7c23b6f55d..1b7340304b 100644 --- a/patterns/pom.xml +++ b/patterns/pom.xml @@ -4,7 +4,13 @@ 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.enterprise.patterns + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + + + com.baeldung.patterns patterns war @@ -15,14 +21,14 @@ 3.1.0 provided + + org.slf4j + slf4j-api + 1.7.21 + provided + - - com.baeldung - parent-modules - 1.0.0-SNAPSHOT - - @@ -34,13 +40,21 @@ 1.8 + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + false + + org.eclipse.jetty jetty-maven-plugin - 9.4.0.M1 + 9.3.11.v20160721 - /front-controller + / diff --git a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java deleted file mode 100644 index a8962f5108..0000000000 --- a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/FrontControllerServlet.java +++ /dev/null @@ -1,38 +0,0 @@ -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 { - Class type = Class.forName( - String.format( - "com.baeldung.enterprise.patterns.front.controller.commands.%sCommand", - request.getParameter("command") - ) - ); - return (FrontCommand) type - .asSubclass(FrontCommand.class) - .newInstance(); - } catch (Exception e) { - return new UnknownCommand(); - } - } -} diff --git a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java deleted file mode 100644 index 12a008faeb..0000000000 --- a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/FrontCommand.java +++ /dev/null @@ -1,32 +0,0 @@ -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/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java deleted file mode 100644 index 0c5bd64bbc..0000000000 --- a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/SearchCommand.java +++ /dev/null @@ -1,21 +0,0 @@ -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.BookshelfImpl; - -import javax.servlet.ServletException; -import java.io.IOException; - -public class SearchCommand extends FrontCommand { - @Override - public void process() throws ServletException, IOException { - Book book = new BookshelfImpl().getInstance() - .findByTitle(request.getParameter("title")); - if (book != null) { - request.setAttribute("book", book); - forward("book-found"); - } else { - forward("book-notfound"); - } - } -} diff --git a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java deleted file mode 100644 index 524e000bd9..0000000000 --- a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Bookshelf.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.data; - -public interface Bookshelf { - - default void init() { - add(new Book("Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); - add(new Book("Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); - } - - Bookshelf getInstance(); - - boolean add(E book); - - Book findByTitle(String title); -} diff --git a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java b/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java deleted file mode 100644 index 3862418857..0000000000 --- a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/BookshelfImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -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); - } -} diff --git a/patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java b/patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java new file mode 100644 index 0000000000..beba1d66e5 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java @@ -0,0 +1,66 @@ +package com.baeldung.patterns; + +import com.baeldung.patterns.commands.FrontCommand; +import com.baeldung.patterns.commands.UnknownCommand; +import com.baeldung.patterns.data.Bookshelf; +import com.baeldung.patterns.data.BookshelfImpl; + +import javax.servlet.ServletConfig; +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(name = "front-controller", urlPatterns = "/index") +public class FrontControllerServlet extends HttpServlet { + @Override + public void init(ServletConfig config) throws ServletException { + super.init(config); + Bookshelf bookshelf = new BookshelfImpl(); + bookshelf.init(); + getServletContext().setAttribute("bookshelf", bookshelf); + } + + @Override + protected void doGet( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + doCommand(request, response); + } + + @Override + protected void doPost( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + doCommand(request, response); + } + + private void doCommand( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + FrontCommand command = getCommand(request); + command.init(request, response); + command.process(); + } + + private FrontCommand getCommand(HttpServletRequest request) { + try { + Class type = Class.forName( + String.format( + "com.baeldung.patterns.commands.%sCommand", + request.getParameter("command") + ) + ); + return (FrontCommand) type + .asSubclass(FrontCommand.class) + .newInstance(); + } catch (Exception e) { + return new UnknownCommand(); + } + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java b/patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java new file mode 100644 index 0000000000..be6dbe84bd --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java @@ -0,0 +1,27 @@ +package com.baeldung.patterns.commands; + +import com.baeldung.patterns.data.Order; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class CheckoutCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + HttpSession session = request.getSession(false); + if (request.getMethod().equals("POST")) { + session.removeAttribute("order"); + response.sendRedirect("index?command=Home&message=Thank you for buying!"); + } else { + Order order = (Order) session.getAttribute("order"); + Double total = order.getItems().entrySet().stream() + .map(entry -> entry.getKey().getPrice() * entry.getValue()) + .reduce((p1, p2) -> p1 + p2) + .orElse(0.00); + request.setAttribute("total", total); + forward("shopping-cart"); + } + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java b/patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java new file mode 100644 index 0000000000..efc0ee4612 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java @@ -0,0 +1,43 @@ +package com.baeldung.patterns.commands; + +import com.baeldung.patterns.filters.FilterManager; +import com.baeldung.patterns.filters.OnIntercept; + +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public abstract class FrontCommand implements OnIntercept { + protected HttpServletRequest request; + protected HttpServletResponse response; + private boolean intercept; + + public FrontCommand() { + } + + public void init(HttpServletRequest request, HttpServletResponse response) { + this.request = request; + this.response = response; + } + + public void process() throws ServletException, IOException { + FilterManager.process(request, response, this); + } + + public void forward(String target) throws ServletException, IOException { + if (intercept) { + return; + } + String path = String.format("/WEB-INF/jsp/%s.jsp", target); + RequestDispatcher dispatcher = request.getServletContext() + .getRequestDispatcher(path); + dispatcher.forward(request, response); + } + + @Override + public void intercept() { + intercept = true; + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java b/patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java new file mode 100644 index 0000000000..f2358400b9 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java @@ -0,0 +1,17 @@ +package com.baeldung.patterns.commands; + +import com.baeldung.patterns.data.Bookshelf; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class HomeCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + Bookshelf bookshelf = (Bookshelf) request.getServletContext() + .getAttribute("bookshelf"); + request.setAttribute("books", bookshelf); + forward("home"); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java b/patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java new file mode 100644 index 0000000000..1a7795eb3c --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java @@ -0,0 +1,24 @@ +package com.baeldung.patterns.commands; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class LoginCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + if (request.getMethod().equals("POST")) { + HttpSession session = request.getSession(true); + session.setAttribute("username", request.getParameter("username")); + response.sendRedirect(request.getParameter("redirect")); + } else { + String queryString = request.getQueryString(); + if (queryString == null) { + queryString = "command=Home"; + } + request.setAttribute("redirect", request.getRequestURL() + .append("?").append(queryString).toString()); + forward("login"); + } + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java b/patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java new file mode 100644 index 0000000000..82f4e753c9 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java @@ -0,0 +1,16 @@ +package com.baeldung.patterns.commands; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class LogoutCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + HttpSession session = request.getSession(false); + session.removeAttribute("username"); + session.removeAttribute("order"); + response.sendRedirect("index?command=Home"); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java b/patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java new file mode 100644 index 0000000000..5926dfddb5 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java @@ -0,0 +1,33 @@ +package com.baeldung.patterns.commands; + +import com.baeldung.patterns.data.Book; +import com.baeldung.patterns.data.Bookshelf; +import com.baeldung.patterns.data.Order; +import com.baeldung.patterns.data.OrderImpl; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class OrderCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + if (request.getMethod().equals("POST")) { + HttpSession session = request.getSession(false); + Order order = (Order) session.getAttribute("order"); + if (order == null) { + String username = (String) session.getAttribute("username"); + order = new OrderImpl(username); + } + Bookshelf bookshelf = (Bookshelf) request.getServletContext() + .getAttribute("bookshelf"); + String isbn = request.getParameter("isbn"); + Integer quantity = Integer.parseInt(request.getParameter("quantity")); + Book book = bookshelf.get(isbn); + order.add(book, quantity); + session.setAttribute("order", order); + response.sendRedirect(String.format("index?command=Show&isbn=%s", isbn)); + } + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java b/patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java new file mode 100644 index 0000000000..30e401e83a --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java @@ -0,0 +1,25 @@ +package com.baeldung.patterns.commands; + +import com.baeldung.patterns.data.Book; +import com.baeldung.patterns.data.Bookshelf; + +import javax.servlet.ServletException; +import java.io.IOException; +import java.util.List; + +public class SearchCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + Bookshelf bookshelf = (Bookshelf) request.getServletContext() + .getAttribute("bookshelf"); + String q = request.getParameter("q"); + List books = bookshelf.find(q); + if (books.size() > 0) { + request.setAttribute("books", books); + forward("book-found"); + } else { + forward("book-notfound"); + } + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java b/patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java new file mode 100644 index 0000000000..3226d9969f --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java @@ -0,0 +1,21 @@ +package com.baeldung.patterns.commands; + +import com.baeldung.patterns.data.Book; +import com.baeldung.patterns.data.Bookshelf; + +import javax.servlet.ServletException; +import java.io.IOException; +import java.util.Collections; + +public class ShowCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + super.process(); + Bookshelf bookshelf = (Bookshelf) request.getServletContext() + .getAttribute("bookshelf"); + String title = request.getParameter("isbn"); + Book book = bookshelf.get(title); + request.setAttribute("books", Collections.singletonList(book)); + forward("book-found"); + } +} diff --git a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java b/patterns/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java similarity index 77% rename from patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java rename to patterns/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java index 90103c8f42..71634e5263 100644 --- a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/commands/UnknownCommand.java +++ b/patterns/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java @@ -1,4 +1,4 @@ -package com.baeldung.enterprise.patterns.front.controller.commands; +package com.baeldung.patterns.commands; import javax.servlet.ServletException; import java.io.IOException; @@ -6,6 +6,7 @@ import java.io.IOException; public class UnknownCommand extends FrontCommand { @Override public void process() throws ServletException, IOException { + super.process(); forward("unknown"); } } diff --git a/patterns/src/main/java/com/baeldung/patterns/data/Book.java b/patterns/src/main/java/com/baeldung/patterns/data/Book.java new file mode 100644 index 0000000000..ab417aa93b --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/data/Book.java @@ -0,0 +1,19 @@ +package com.baeldung.patterns.data; + +public interface Book { + String getIsbn(); + + void setIsbn(String isbn); + + String getAuthor(); + + void setAuthor(String author); + + String getTitle(); + + void setTitle(String title); + + Double getPrice(); + + void setPrice(Double price); +} diff --git a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java b/patterns/src/main/java/com/baeldung/patterns/data/BookImpl.java similarity index 55% rename from patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java rename to patterns/src/main/java/com/baeldung/patterns/data/BookImpl.java index 634e05c3a0..adecfd1d3a 100644 --- a/patterns/src/main/java/com/baeldung/enterprise/patterns/front/controller/data/Book.java +++ b/patterns/src/main/java/com/baeldung/patterns/data/BookImpl.java @@ -1,39 +1,57 @@ -package com.baeldung.enterprise.patterns.front.controller.data; +package com.baeldung.patterns.data; -public class Book { +public class BookImpl implements Book { + private String isbn; private String author; private String title; private Double price; - public Book() { + public BookImpl() { } - public Book(String author, String title, Double price) { + public BookImpl(String isbn, String author, String title, Double price) { + this.isbn = isbn; this.author = author; this.title = title; this.price = price; } + @Override + public String getIsbn() { + return isbn; + } + + @Override + public void setIsbn(String isbn) { + this.isbn = isbn; + } + + @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/patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java b/patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java new file mode 100644 index 0000000000..66a1da9272 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java @@ -0,0 +1,18 @@ +package com.baeldung.patterns.data; + +import java.util.List; + +public interface Bookshelf { + + default void init() { + add(new BookImpl("001", "Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); + add(new BookImpl("002", "Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); + add(new BookImpl("003", "Unknown", "Something about German Umlauts (äüö) and ß", 5.49)); + } + + boolean add(E book); + + Book get(String isbn); + + List find(String q); +} diff --git a/patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java b/patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java new file mode 100644 index 0000000000..a7cbda140d --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java @@ -0,0 +1,23 @@ +package com.baeldung.patterns.data; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +public class BookshelfImpl extends ArrayList implements Bookshelf { + @Override + public Book get(String isbn) { + return this.stream() + .filter(book -> book.getIsbn().equals(isbn)) + .findFirst() + .orElse(null); + } + + @Override + public List find(String q) { + return this.stream() + .filter(book -> book.getTitle().toLowerCase().contains(q.toLowerCase()) + || book.getAuthor().toLowerCase().contains(q.toLowerCase())) + .collect(Collectors.toList()); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/data/Order.java b/patterns/src/main/java/com/baeldung/patterns/data/Order.java new file mode 100644 index 0000000000..6dc67e4e58 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/data/Order.java @@ -0,0 +1,11 @@ +package com.baeldung.patterns.data; + +import java.util.Map; + +public interface Order { + String getUsername(); + + Map getItems(); + + void add(Book item, Integer quantity); +} diff --git a/patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java b/patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java new file mode 100644 index 0000000000..73232ab11c --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java @@ -0,0 +1,40 @@ +package com.baeldung.patterns.data; + +import java.util.HashMap; +import java.util.Map; + +public class OrderImpl implements Order { + private String username; + private Map items = new HashMap<>(); + + public OrderImpl(String username) { + this.username = username; + } + + @Override + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + @Override + public Map getItems() { + return items; + } + + public void setItems(Map items) { + this.items = items; + } + + @Override + public void add(Book item, Integer quantity) { + Integer q = 0; + if (this.items.containsKey(item)) { + q = this.items.get(item); + } + this.items.put(item, quantity + q); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java new file mode 100644 index 0000000000..fa7655434e --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java @@ -0,0 +1,40 @@ +package com.baeldung.patterns.filters; + +import com.baeldung.patterns.commands.FrontCommand; +import com.baeldung.patterns.commands.LoginCommand; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; + +public class AuthenticationFilter extends BaseFilter { + private OnIntercept callback; + + public AuthenticationFilter(OnIntercept callback) { + this.callback = callback; + } + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + HttpSession session = httpServletRequest.getSession(false); + if (session == null || session.getAttribute("username") == null) { + callback.intercept(); + FrontCommand command = new LoginCommand(); + command.init(httpServletRequest, httpServletResponse); + command.process(); + } else { + chain.doFilter(request, response); + } + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java new file mode 100644 index 0000000000..670039a62c --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java @@ -0,0 +1,25 @@ +package com.baeldung.patterns.filters; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.Filter; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; + +public abstract class BaseFilter implements Filter { + private static final Logger log = LoggerFactory.getLogger(BaseFilter.class); + + protected FilterConfig filterConfig; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + log.info("Initialize filter: {}", getClass().getSimpleName()); + this.filterConfig = filterConfig; + } + + @Override + public void destroy() { + log.info("Destroy filter: {}", getClass().getSimpleName()); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java new file mode 100644 index 0000000000..1277ca726d --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java @@ -0,0 +1,30 @@ +package com.baeldung.patterns.filters; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import java.io.IOException; + +@WebFilter(servletNames = "front-controller") +public class EncodingFilter extends BaseFilter { + private String encoding; + + @Override + public void init(FilterConfig filterConfig) throws ServletException { + super.init(filterConfig); + this.encoding = filterConfig.getInitParameter("encoding"); + } + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + String encoding = request.getParameter("encoding"); + if (encoding == null) { + encoding = this.encoding; + } + response.setCharacterEncoding(encoding); + chain.doFilter(request, response); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java b/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java new file mode 100644 index 0000000000..d2b64c7d06 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java @@ -0,0 +1,28 @@ +package com.baeldung.patterns.filters; + +import javax.servlet.Filter; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import java.io.IOException; +import java.util.Arrays; +import java.util.Iterator; + +public class FilterChainImpl implements javax.servlet.FilterChain { + private Iterator filters; + + public FilterChainImpl(Filter... filters) { + this.filters = Arrays.asList(filters).iterator(); + } + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response + ) throws IOException, ServletException { + if (filters.hasNext()) { + Filter filter = filters.next(); + filter.doFilter(request, response, this); + } + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java b/patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java new file mode 100644 index 0000000000..ae945107fd --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java @@ -0,0 +1,21 @@ +package com.baeldung.patterns.filters; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public class FilterManager { + public static void process( + HttpServletRequest request, + HttpServletResponse response, + OnIntercept callback + ) throws ServletException, IOException { + FilterChain filterChain = new FilterChainImpl( + new AuthenticationFilter(callback), + new VisitorCounterFilter() + ); + filterChain.doFilter(request, response); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java new file mode 100644 index 0000000000..f6ffc20585 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java @@ -0,0 +1,33 @@ +package com.baeldung.patterns.filters; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +@WebFilter(servletNames = "front-controller") +public class LoggingFilter extends BaseFilter { + private static final Logger log = LoggerFactory.getLogger(LoggingFilter.class); + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + chain.doFilter(request, response); + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + String username = (String) httpServletRequest.getAttribute("username"); + if (username == null) { + username = "guest"; + } + log.info("Request from '{}@{}': {}?{}", username, request.getRemoteAddr(), + httpServletRequest.getRequestURI(), request.getParameterMap()); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java b/patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java new file mode 100644 index 0000000000..73be3509f0 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java @@ -0,0 +1,5 @@ +package com.baeldung.patterns.filters; + +public interface OnIntercept { + void intercept(); +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java new file mode 100644 index 0000000000..0abfac7cd6 --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java @@ -0,0 +1,30 @@ +package com.baeldung.patterns.filters; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; + +public class VisitorCounterFilter extends BaseFilter { + private static Set users = new HashSet<>(); + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + HttpSession session = ((HttpServletRequest) request).getSession(false); + String username = (String) session.getAttribute("username"); + if (!users.contains(username)) { + users.add(username); + } + request.setAttribute("counter", users.size()); + chain.doFilter(request, response); + } +} diff --git a/patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp b/patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp index 42e08b4a46..95a74b9e2e 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp +++ b/patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -1,12 +1,24 @@ +<%@ page import="com.baeldung.patterns.data.Book" %> +<%@ page import="java.util.List" %> Bookshelf: Title found -

    Our Bookshelf contains this title:

    -

    ${book.getTitle()}

    -

    Author: ${book.getAuthor()}

    - +

    Our Bookshelf contains following titles:

    + <% for (Book book : (List) request.getAttribute("books")) { %> +

    <%= book.getTitle() %>

    +

    Author: <%= book.getAuthor() %>

    +
    + + + + + Go back... +
    + <% } %> + <%@ include file="shopping-cart-hint.jsp"%> + <%@ include file="visitor-counter.jsp"%> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp index 2f8ac01755..284b1e4759 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp +++ b/patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -1,10 +1,11 @@ - - Bookshelf: Title not found - + + Bookshelf: Title not found +

    Our Bookshelf doesn't contains this title:

    -

    ${param.get("title")}

    +

    <%= request.getParameter("q") %>

    + <%@ include file="visitor-counter.jsp"%> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/home.jsp b/patterns/src/main/webapp/WEB-INF/jsp/home.jsp new file mode 100644 index 0000000000..e7bf1562ea --- /dev/null +++ b/patterns/src/main/webapp/WEB-INF/jsp/home.jsp @@ -0,0 +1,27 @@ +<%@ page import="com.baeldung.patterns.data.Book" %> +<%@ page import="java.util.List" %> + + + + Bookshelf: Home + + +
    + + +
    + <% if (request.getParameter("message") != null) { %> +

    <%= request.getParameter("message") %>

    + <% } else { %> +

    Welcome to the Bookshelf!

    + <% } %> + <% for (Book book : (List) request.getAttribute("books")) { %> +
    +

    <%= book.getAuthor() %>:

    +

    <%= book.getTitle() %>

    + More... + <% } %> + <%@ include file="shopping-cart-hint.jsp"%> + <%@ include file="visitor-counter.jsp"%> + + diff --git a/patterns/src/main/webapp/WEB-INF/jsp/login.jsp b/patterns/src/main/webapp/WEB-INF/jsp/login.jsp new file mode 100644 index 0000000000..6983fba949 --- /dev/null +++ b/patterns/src/main/webapp/WEB-INF/jsp/login.jsp @@ -0,0 +1,16 @@ + + + + Bookshelf: Login + + +

    Please input a username:

    +

    Login

    +
    + + "> + +
    + <%@ include file="visitor-counter.jsp" %> + + diff --git a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp b/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp new file mode 100644 index 0000000000..9173c35711 --- /dev/null +++ b/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp @@ -0,0 +1,16 @@ +<%@ page import="com.baeldung.patterns.data.Order" %> +<% if (session != null && session.getAttribute("order") != null) { %> + <% Order order = ((Order) session.getAttribute("order")); %> + <% if (order != null && order.getItems().size() > 0) { %> +
    +

    + Your shopping cart is holding + <% if (order.getItems().size() == 1) { %> + 1 item. + <% } else { %> + <%= (order.getItems().size()) %> items. + <% } %> + Checkout +

    + <% } %> +<% } %> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp b/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp new file mode 100644 index 0000000000..024a3bac3e --- /dev/null +++ b/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp @@ -0,0 +1,29 @@ +<%@ page import="com.baeldung.patterns.data.Book" %> +<%@ page import="com.baeldung.patterns.data.Order" %> +<%@ page import="java.util.Map" %> + + + + Bookshelf: Checkout + + +

    You are about to buy the following books:

    +

    Shopping Cart

    + <% Order order = (Order) session.getAttribute("order"); %> +
      + <% for (Map.Entry entry : order.getItems().entrySet()) { %> +
    • + <%= entry.getValue() %> x <%= entry.getKey().getPrice() %> +

      <%= entry.getKey().getTitle() %>

      + by <%= entry.getKey().getAuthor()%> +
    • + <% } %> +
    +

    + Total: <%= request.getAttribute("total") %> +

    +
    + +
    + + diff --git a/patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp b/patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp new file mode 100644 index 0000000000..397364e2b3 --- /dev/null +++ b/patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp @@ -0,0 +1,5 @@ +<% Integer counter = (Integer) request.getAttribute("counter"); %> +<% if (counter != null && counter > 0) { %> +
    +

    You are visitor #<%= counter %>. Logout

    +<% } %> diff --git a/patterns/src/main/webapp/WEB-INF/web.xml b/patterns/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 77113db09b..0000000000 --- a/patterns/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - front-controller - com.baeldung.enterprise.patterns.front.controller.FrontControllerServlet - - - front-controller - / - - From 67e4090b578770b80113ee6ab3b83f43f3043dc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sat, 1 Oct 2016 04:37:07 +0200 Subject: [PATCH 299/309] BAEL-325: Removed old project folder. --- .../intercepting-filter-pattern/pom.xml | 49 -------------- .../patterns/FrontControllerServlet.java | 66 ------------------- .../patterns/commands/CheckoutCommand.java | 27 -------- .../patterns/commands/FrontCommand.java | 43 ------------ .../patterns/commands/HomeCommand.java | 17 ----- .../patterns/commands/LoginCommand.java | 20 ------ .../patterns/commands/LogoutCommand.java | 16 ----- .../patterns/commands/OrderCommand.java | 33 ---------- .../patterns/commands/SearchCommand.java | 25 ------- .../patterns/commands/ShowCommand.java | 21 ------ .../patterns/commands/UnknownCommand.java | 12 ---- .../java/com/baeldung/patterns/data/Book.java | 19 ------ .../com/baeldung/patterns/data/BookImpl.java | 58 ---------------- .../com/baeldung/patterns/data/Bookshelf.java | 18 ----- .../baeldung/patterns/data/BookshelfImpl.java | 23 ------- .../com/baeldung/patterns/data/Order.java | 11 ---- .../com/baeldung/patterns/data/OrderImpl.java | 40 ----------- .../filters/AuthenticationFilter.java | 40 ----------- .../baeldung/patterns/filters/BaseFilter.java | 25 ------- .../patterns/filters/EncodingFilter.java | 30 --------- .../patterns/filters/FilterChainImpl.java | 28 -------- .../patterns/filters/FilterManager.java | 21 ------ .../patterns/filters/LoggingFilter.java | 33 ---------- .../patterns/filters/OnIntercept.java | 5 -- .../main/webapp/WEB-INF/jsp/book-found.jsp | 24 ------- .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 11 ---- .../src/main/webapp/WEB-INF/jsp/home.jsp | 27 -------- .../src/main/webapp/WEB-INF/jsp/login.jsp | 16 ----- .../webapp/WEB-INF/jsp/shopping-cart-hint.jsp | 16 ----- .../main/webapp/WEB-INF/jsp/shopping-cart.jsp | 29 -------- .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 9 --- .../webapp/WEB-INF/jsp/visitor-counter.jsp | 5 -- 32 files changed, 817 deletions(-) delete mode 100644 enterprise-patterns/intercepting-filter-pattern/pom.xml delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/FrontControllerServlet.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/FrontCommand.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/HomeCommand.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LoginCommand.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/OrderCommand.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/SearchCommand.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/ShowCommand.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Book.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookImpl.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Bookshelf.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Order.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/OrderImpl.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/BaseFilter.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterManager.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/OnIntercept.java delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/home.jsp delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp delete mode 100644 enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp diff --git a/enterprise-patterns/intercepting-filter-pattern/pom.xml b/enterprise-patterns/intercepting-filter-pattern/pom.xml deleted file mode 100644 index 0e1008657a..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/pom.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - 4.0.0 - - intercepting-filter-pattern - war - - - enterprise-patterns-parent - com.baeldung.enterprise.patterns - 1.0.0-SNAPSHOT - - - - - javax.servlet - javax.servlet-api - 3.1.0 - provided - - - org.slf4j - slf4j-api - 1.7.21 - provided - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - - org.eclipse.jetty - jetty-maven-plugin - 9.4.0.M1 - - - /intercepting-filter - - - - - - diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/FrontControllerServlet.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/FrontControllerServlet.java deleted file mode 100644 index 67400897c4..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/FrontControllerServlet.java +++ /dev/null @@ -1,66 +0,0 @@ -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 com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; -import com.baeldung.enterprise.patterns.front.controller.data.BookshelfImpl; - -import javax.servlet.ServletConfig; -import javax.servlet.ServletException; -import javax.servlet.annotation.WebServlet; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -@WebServlet(name = "front-controller", urlPatterns = "/index") -public class FrontControllerServlet extends HttpServlet { - @Override - public void init(ServletConfig config) throws ServletException { - super.init(config); - Bookshelf bookshelf = new BookshelfImpl(); - bookshelf.init(); - getServletContext().setAttribute("bookshelf", bookshelf); - } - - @Override - protected void doGet( - HttpServletRequest request, - HttpServletResponse response - ) throws ServletException, IOException { - doCommand(request, response); - } - - @Override - protected void doPost( - HttpServletRequest request, - HttpServletResponse response - ) throws ServletException, IOException { - doCommand(request, response); - } - - private void doCommand( - HttpServletRequest request, - HttpServletResponse response - ) throws ServletException, IOException { - FrontCommand command = getCommand(request); - command.init(request, response); - command.process(); - } - - private FrontCommand getCommand(HttpServletRequest request) { - try { - Class type = Class.forName( - String.format( - "com.baeldung.enterprise.patterns.front.controller.commands.%sCommand", - request.getParameter("command") - ) - ); - return (FrontCommand) type - .asSubclass(FrontCommand.class) - .newInstance(); - } catch (Exception e) { - return new UnknownCommand(); - } - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java deleted file mode 100644 index 876e439139..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.commands; - -import com.baeldung.enterprise.patterns.front.controller.data.Order; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpSession; -import java.io.IOException; - -public class CheckoutCommand extends FrontCommand { - @Override - public void process() throws ServletException, IOException { - super.process(); - HttpSession session = request.getSession(false); - if (request.getMethod().equals("POST")) { - session.removeAttribute("order"); - response.sendRedirect("index?command=Home&message=Thank you for buying!"); - } else { - Order order = (Order) session.getAttribute("order"); - Double total = order.getItems().entrySet().stream() - .map(entry -> entry.getKey().getPrice() * entry.getValue()) - .reduce((p1, p2) -> p1 + p2) - .orElse(0.00); - request.setAttribute("total", total); - forward("shopping-cart"); - } - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/FrontCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/FrontCommand.java deleted file mode 100644 index 370127b7f7..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/FrontCommand.java +++ /dev/null @@ -1,43 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.commands; - -import com.baeldung.enterprise.patterns.front.controller.filters.FilterManager; -import com.baeldung.enterprise.patterns.front.controller.filters.OnIntercept; - -import javax.servlet.RequestDispatcher; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -public abstract class FrontCommand implements OnIntercept { - protected HttpServletRequest request; - protected HttpServletResponse response; - private boolean intercept; - - public FrontCommand() { - } - - public void init(HttpServletRequest request, HttpServletResponse response) { - this.request = request; - this.response = response; - } - - public void process() throws ServletException, IOException { - FilterManager.process(request, response, this); - } - - public void forward(String target) throws ServletException, IOException { - if (intercept) { - return; - } - String path = String.format("/WEB-INF/jsp/%s.jsp", target); - RequestDispatcher dispatcher = request.getServletContext() - .getRequestDispatcher(path); - dispatcher.forward(request, response); - } - - @Override - public void intercept() { - intercept = true; - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/HomeCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/HomeCommand.java deleted file mode 100644 index 49b62a29bd..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/HomeCommand.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.commands; - -import com.baeldung.enterprise.patterns.front.controller.data.Bookshelf; - -import javax.servlet.ServletException; -import java.io.IOException; - -public class HomeCommand extends FrontCommand { - @Override - public void process() throws ServletException, IOException { - super.process(); - Bookshelf bookshelf = (Bookshelf) request.getServletContext() - .getAttribute("bookshelf"); - request.setAttribute("books", bookshelf); - forward("home"); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LoginCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LoginCommand.java deleted file mode 100644 index beef42d269..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LoginCommand.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.commands; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpSession; -import java.io.IOException; - -public class LoginCommand extends FrontCommand { - @Override - public void process() throws ServletException, IOException { - if (request.getMethod().equals("POST")) { - HttpSession session = request.getSession(true); - session.setAttribute("username", request.getParameter("username")); - response.sendRedirect(request.getParameter("redirect")); - } else { - request.setAttribute("redirect", request.getRequestURL() - .append("?").append(request.getQueryString()).toString()); - forward("login"); - } - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java deleted file mode 100644 index b502112558..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.commands; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpSession; -import java.io.IOException; - -public class LogoutCommand extends FrontCommand { - @Override - public void process() throws ServletException, IOException { - super.process(); - HttpSession session = request.getSession(false); - session.removeAttribute("username"); - session.removeAttribute("order"); - response.sendRedirect("index?command=Home"); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/OrderCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/OrderCommand.java deleted file mode 100644 index 91ed909a77..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/OrderCommand.java +++ /dev/null @@ -1,33 +0,0 @@ -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.Order; -import com.baeldung.enterprise.patterns.front.controller.data.OrderImpl; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpSession; -import java.io.IOException; - -public class OrderCommand extends FrontCommand { - @Override - public void process() throws ServletException, IOException { - super.process(); - if (request.getMethod().equals("POST")) { - HttpSession session = request.getSession(false); - Order order = (Order) session.getAttribute("order"); - if (order == null) { - String username = (String) session.getAttribute("username"); - order = new OrderImpl(username); - } - Bookshelf bookshelf = (Bookshelf) request.getServletContext() - .getAttribute("bookshelf"); - String isbn = request.getParameter("isbn"); - Integer quantity = Integer.parseInt(request.getParameter("quantity")); - Book book = bookshelf.get(isbn); - order.add(book, quantity); - session.setAttribute("order", order); - response.sendRedirect(String.format("index?command=Show&isbn=%s", isbn)); - } - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/SearchCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/SearchCommand.java deleted file mode 100644 index 517092508a..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/SearchCommand.java +++ /dev/null @@ -1,25 +0,0 @@ -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; -import java.util.List; - -public class SearchCommand extends FrontCommand { - @Override - public void process() throws ServletException, IOException { - super.process(); - Bookshelf bookshelf = (Bookshelf) request.getServletContext() - .getAttribute("bookshelf"); - String q = request.getParameter("q"); - List books = bookshelf.find(q); - if (books.size() > 0) { - request.setAttribute("books", books); - forward("book-found"); - } else { - forward("book-notfound"); - } - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/ShowCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/ShowCommand.java deleted file mode 100644 index eb615f075d..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/ShowCommand.java +++ /dev/null @@ -1,21 +0,0 @@ -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; -import java.util.Collections; - -public class ShowCommand extends FrontCommand { - @Override - public void process() throws ServletException, IOException { - super.process(); - Bookshelf bookshelf = (Bookshelf) request.getServletContext() - .getAttribute("bookshelf"); - String title = request.getParameter("isbn"); - Book book = bookshelf.get(title); - request.setAttribute("books", Collections.singletonList(book)); - forward("book-found"); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java deleted file mode 100644 index 439ae0c8da..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java +++ /dev/null @@ -1,12 +0,0 @@ -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 { - super.process(); - forward("unknown"); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Book.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Book.java deleted file mode 100644 index 472ba4c2fa..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Book.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.data; - -public interface Book { - String getIsbn(); - - void setIsbn(String isbn); - - String getAuthor(); - - void setAuthor(String author); - - String getTitle(); - - void setTitle(String title); - - Double getPrice(); - - void setPrice(Double price); -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookImpl.java deleted file mode 100644 index c633607f41..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookImpl.java +++ /dev/null @@ -1,58 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.data; - -public class BookImpl implements Book { - private String isbn; - private String author; - private String title; - private Double price; - - public BookImpl() { - } - - public BookImpl(String isbn, String author, String title, Double price) { - this.isbn = isbn; - this.author = author; - this.title = title; - this.price = price; - } - - @Override - public String getIsbn() { - return isbn; - } - - @Override - public void setIsbn(String isbn) { - this.isbn = isbn; - } - - @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/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Bookshelf.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Bookshelf.java deleted file mode 100644 index e479d27d0e..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Bookshelf.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.data; - -import java.util.List; - -public interface Bookshelf { - - default void init() { - add(new BookImpl("001", "Wilson, Robert Anton & Shea, Robert", "Illuminati", 9.99)); - add(new BookImpl("002", "Fowler, Martin", "Patterns of Enterprise Application Architecture", 27.88)); - add(new BookImpl("003", "Unknown", "Something about German Umlauts (äüö) and ß", 5.49)); - } - - boolean add(E book); - - Book get(String isbn); - - List find(String q); -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java deleted file mode 100644 index 26090acf74..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.data; - -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - -public class BookshelfImpl extends ArrayList implements Bookshelf { - @Override - public Book get(String isbn) { - return this.stream() - .filter(book -> book.getIsbn().equals(isbn)) - .findFirst() - .orElse(null); - } - - @Override - public List find(String q) { - return this.stream() - .filter(book -> book.getTitle().toLowerCase().contains(q.toLowerCase()) - || book.getAuthor().toLowerCase().contains(q.toLowerCase())) - .collect(Collectors.toList()); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Order.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Order.java deleted file mode 100644 index 2b6b36568a..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/Order.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.data; - -import java.util.Map; - -public interface Order { - String getUsername(); - - Map getItems(); - - void add(Book item, Integer quantity); -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/OrderImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/OrderImpl.java deleted file mode 100644 index eb4a6674cc..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/data/OrderImpl.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.data; - -import java.util.HashMap; -import java.util.Map; - -public class OrderImpl implements Order { - private String username; - private Map items = new HashMap<>(); - - public OrderImpl(String username) { - this.username = username; - } - - @Override - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } - - @Override - public Map getItems() { - return items; - } - - public void setItems(Map items) { - this.items = items; - } - - @Override - public void add(Book item, Integer quantity) { - Integer q = 0; - if (this.items.containsKey(item)) { - q = this.items.get(item); - } - this.items.put(item, quantity + q); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java deleted file mode 100644 index 2d43116faa..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.filters; - -import com.baeldung.enterprise.patterns.front.controller.commands.FrontCommand; -import com.baeldung.enterprise.patterns.front.controller.commands.LoginCommand; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; -import java.io.IOException; - -public class AuthenticationFilter extends BaseFilter { - private OnIntercept callback; - - public AuthenticationFilter(OnIntercept callback) { - this.callback = callback; - } - - @Override - public void doFilter( - ServletRequest request, - ServletResponse response, - FilterChain chain - ) throws IOException, ServletException { - HttpServletRequest httpServletRequest = (HttpServletRequest) request; - HttpServletResponse httpServletResponse = (HttpServletResponse) response; - HttpSession session = httpServletRequest.getSession(false); - if (session == null || session.getAttribute("username") == null) { - callback.intercept(); - FrontCommand command = new LoginCommand(); - command.init(httpServletRequest, httpServletResponse); - command.process(); - } else { - chain.doFilter(request, response); - } - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/BaseFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/BaseFilter.java deleted file mode 100644 index 81b5027187..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/BaseFilter.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.filters; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.servlet.Filter; -import javax.servlet.FilterConfig; -import javax.servlet.ServletException; - -public abstract class BaseFilter implements Filter { - private static final Logger log = LoggerFactory.getLogger(BaseFilter.class); - - protected FilterConfig filterConfig; - - @Override - public void init(FilterConfig filterConfig) throws ServletException { - log.info("Initialize filter: {}", getClass().getSimpleName()); - this.filterConfig = filterConfig; - } - - @Override - public void destroy() { - log.info("Destroy filter: {}", getClass().getSimpleName()); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java deleted file mode 100644 index d36e204dd5..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.filters; - -import javax.servlet.*; -import javax.servlet.annotation.WebFilter; -import java.io.IOException; - -@WebFilter(servletNames = "front-controller") -public class EncodingFilter extends BaseFilter { - private String encoding; - - @Override - public void init(FilterConfig filterConfig) throws ServletException { - super.init(filterConfig); - this.encoding = filterConfig.getInitParameter("encoding"); - } - - @Override - public void doFilter( - ServletRequest request, - ServletResponse response, - FilterChain chain - ) throws IOException, ServletException { - String encoding = request.getParameter("encoding"); - if (encoding == null) { - encoding = this.encoding; - } - response.setCharacterEncoding(encoding); - chain.doFilter(request, response); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java deleted file mode 100644 index dd92759e8b..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.filters; - -import javax.servlet.Filter; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import java.io.IOException; -import java.util.Arrays; -import java.util.Iterator; - -public class FilterChainImpl implements javax.servlet.FilterChain { - private Iterator filters; - - public FilterChainImpl(Filter... filters) { - this.filters = Arrays.asList(filters).iterator(); - } - - @Override - public void doFilter( - ServletRequest request, - ServletResponse response - ) throws IOException, ServletException { - if (filters.hasNext()) { - Filter filter = filters.next(); - filter.doFilter(request, response, this); - } - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterManager.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterManager.java deleted file mode 100644 index e374b241c4..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/FilterManager.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.filters; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -public class FilterManager { - public static void process( - HttpServletRequest request, - HttpServletResponse response, - OnIntercept callback - ) throws ServletException, IOException { - FilterChain filterChain = new FilterChainImpl( - new AuthenticationFilter(callback), - new VisitorCounterFilter() - ); - filterChain.doFilter(request, response); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java deleted file mode 100644 index 8617fba581..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.filters; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.annotation.WebFilter; -import javax.servlet.http.HttpServletRequest; -import java.io.IOException; - -@WebFilter(servletNames = "front-controller") -public class LoggingFilter extends BaseFilter { - private static final Logger log = LoggerFactory.getLogger(LoggingFilter.class); - - @Override - public void doFilter( - ServletRequest request, - ServletResponse response, - FilterChain chain - ) throws IOException, ServletException { - chain.doFilter(request, response); - HttpServletRequest httpServletRequest = (HttpServletRequest) request; - String username = (String) httpServletRequest.getAttribute("username"); - if (username == null) { - username = "guest"; - } - log.info("Request from '{}@{}': {}?{}", username, request.getRemoteAddr(), - httpServletRequest.getRequestURI(), request.getParameterMap()); - } -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/OnIntercept.java b/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/OnIntercept.java deleted file mode 100644 index 54da744e78..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/java/com/baeldung/patterns/filters/OnIntercept.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.enterprise.patterns.front.controller.filters; - -public interface OnIntercept { - void intercept(); -} diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp deleted file mode 100644 index 5a03fe92ad..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-found.jsp +++ /dev/null @@ -1,24 +0,0 @@ -<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Book" %> -<%@ page import="java.util.List" %> - - - - Bookshelf: Title found - - -

    Our Bookshelf contains following titles:

    - <% for (Book book : (List) request.getAttribute("books")) { %> -

    <%= book.getTitle() %>

    -

    Author: <%= book.getAuthor() %>

    -
    - - - - - Go back... -
    - <% } %> - <%@ include file="shopping-cart-hint.jsp"%> - <%@ include file="visitor-counter.jsp"%> - - diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp deleted file mode 100644 index 284b1e4759..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/book-notfound.jsp +++ /dev/null @@ -1,11 +0,0 @@ - - - - Bookshelf: Title not found - - -

    Our Bookshelf doesn't contains this title:

    -

    <%= request.getParameter("q") %>

    - <%@ include file="visitor-counter.jsp"%> - - diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/home.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/home.jsp deleted file mode 100644 index f892738c63..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/home.jsp +++ /dev/null @@ -1,27 +0,0 @@ -<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Book" %> -<%@ page import="java.util.List" %> - - - - Bookshelf: Home - - -
    - - -
    - <% if (request.getParameter("message") != null) { %> -

    <%= request.getParameter("message") %>

    - <% } else { %> -

    Welcome to the Bookshelf!

    - <% } %> - <% for (Book book : (List) request.getAttribute("books")) { %> -
    -

    <%= book.getAuthor() %>:

    -

    <%= book.getTitle() %>

    - More... - <% } %> - <%@ include file="shopping-cart-hint.jsp"%> - <%@ include file="visitor-counter.jsp"%> - - diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp deleted file mode 100644 index 6983fba949..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/login.jsp +++ /dev/null @@ -1,16 +0,0 @@ - - - - Bookshelf: Login - - -

    Please input a username:

    -

    Login

    -
    - - "> - -
    - <%@ include file="visitor-counter.jsp" %> - - diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp deleted file mode 100644 index 5b7c1d9849..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp +++ /dev/null @@ -1,16 +0,0 @@ -<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Order" %> -<% if (session != null && session.getAttribute("order") != null) { %> - <% Order order = ((Order) session.getAttribute("order")); %> - <% if (order != null && order.getItems().size() > 0) { %> -
    -

    - Your shopping cart is holding - <% if (order.getItems().size() == 1) { %> - 1 item. - <% } else { %> - <%= (order.getItems().size()) %> items. - <% } %> - Checkout -

    - <% } %> -<% } %> diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp deleted file mode 100644 index 31b25968ee..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp +++ /dev/null @@ -1,29 +0,0 @@ -<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Book" %> -<%@ page import="com.baeldung.enterprise.patterns.front.controller.data.Order" %> -<%@ page import="java.util.Map" %> - - - - Bookshelf: Checkout - - -

    You are about to buy the following books:

    -

    Shopping Cart

    - <% Order order = (Order) session.getAttribute("order"); %> -
      - <% for (Map.Entry entry : order.getItems().entrySet()) { %> -
    • - <%= entry.getValue() %> x <%= entry.getKey().getPrice() %> -

      <%= entry.getKey().getTitle() %>

      - by <%= entry.getKey().getAuthor()%> -
    • - <% } %> -
    -

    - Total: <%= request.getAttribute("total") %> -

    -
    - -
    - - diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp deleted file mode 100644 index b52b2de8d5..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/unknown.jsp +++ /dev/null @@ -1,9 +0,0 @@ - - - - Bookshelf: Command unknown - - -

    Sorry, this command is not known!

    - - diff --git a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp b/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp deleted file mode 100644 index 397364e2b3..0000000000 --- a/enterprise-patterns/intercepting-filter-pattern/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp +++ /dev/null @@ -1,5 +0,0 @@ -<% Integer counter = (Integer) request.getAttribute("counter"); %> -<% if (counter != null && counter > 0) { %> -
    -

    You are visitor #<%= counter %>. Logout

    -<% } %> From 2d678d6b3255ad9ff9c7fa013ba39f5124ff5279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Sun, 2 Oct 2016 10:53:24 +0200 Subject: [PATCH 300/309] BAEL-325: Added UML sources. Applied some small improvements. --- .../filters/AuthenticationFilter.java | 15 +++++--- .../patterns/filters/EncodingFilter.java | 6 ++- .../patterns/filters/FilterChainImpl.java | 7 +--- .../patterns/filters/TemplateFilter.java | 35 ++++++++++++++++++ .../filters/VisitorCounterFilter.java | 19 ++++++---- ...nt controller.png => front_controller.png} | Bin ... controller.puml => front_controller.puml} | 0 .../main/resources/intercepting_filter.png | Bin 0 -> 17297 bytes .../main/resources/intercepting_filter.puml | 17 +++++++++ 9 files changed, 80 insertions(+), 19 deletions(-) create mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java rename patterns/src/main/resources/{front controller.png => front_controller.png} (100%) rename patterns/src/main/resources/{front controller.puml => front_controller.puml} (100%) create mode 100644 patterns/src/main/resources/intercepting_filter.png create mode 100644 patterns/src/main/resources/intercepting_filter.puml diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java index fa7655434e..f5e03878ca 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java +++ b/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java @@ -3,22 +3,23 @@ package com.baeldung.patterns.filters; import com.baeldung.patterns.commands.FrontCommand; import com.baeldung.patterns.commands.LoginCommand; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; -public class AuthenticationFilter extends BaseFilter { +public class AuthenticationFilter implements Filter { private OnIntercept callback; public AuthenticationFilter(OnIntercept callback) { this.callback = callback; } + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + @Override public void doFilter( ServletRequest request, @@ -37,4 +38,8 @@ public class AuthenticationFilter extends BaseFilter { chain.doFilter(request, response); } } + + @Override + public void destroy() { + } } diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java index 1277ca726d..2856bb1112 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java +++ b/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java @@ -2,9 +2,13 @@ package com.baeldung.patterns.filters; import javax.servlet.*; import javax.servlet.annotation.WebFilter; +import javax.servlet.annotation.WebInitParam; import java.io.IOException; -@WebFilter(servletNames = "front-controller") +@WebFilter( + servletNames = {"front-controller"}, + initParams = {@WebInitParam(name = "encoding", value = "UTF-8")} +) public class EncodingFilter extends BaseFilter { private String encoding; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java b/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java index d2b64c7d06..789fc003a0 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java +++ b/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java @@ -1,14 +1,11 @@ package com.baeldung.patterns.filters; -import javax.servlet.Filter; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import java.io.IOException; import java.util.Arrays; import java.util.Iterator; -public class FilterChainImpl implements javax.servlet.FilterChain { +public class FilterChainImpl implements FilterChain { private Iterator filters; public FilterChainImpl(Filter... filters) { diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java new file mode 100644 index 0000000000..939d9ad84d --- /dev/null +++ b/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java @@ -0,0 +1,35 @@ +package com.baeldung.patterns.filters; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public abstract class TemplateFilter extends BaseFilter { + + protected abstract void preFilter( + HttpServletRequest request, + HttpServletResponse response + ) throws IOException, ServletException; + + protected abstract void postFilter( + HttpServletRequest request, + HttpServletResponse response + ) throws IOException, ServletException; + + @Override + public void doFilter( + ServletRequest request, + ServletResponse response, + FilterChain chain + ) throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + preFilter(httpServletRequest, httpServletResponse); + chain.doFilter(request, response); + postFilter(httpServletRequest, httpServletResponse); + } +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java b/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java index 0abfac7cd6..5c2358686b 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java +++ b/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java @@ -1,18 +1,19 @@ package com.baeldung.patterns.filters; -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; +import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.io.IOException; import java.util.HashSet; import java.util.Set; -public class VisitorCounterFilter extends BaseFilter { +public class VisitorCounterFilter implements Filter { private static Set users = new HashSet<>(); + @Override + public void init(FilterConfig filterConfig) throws ServletException { + } + @Override public void doFilter( ServletRequest request, @@ -21,10 +22,12 @@ public class VisitorCounterFilter extends BaseFilter { ) throws IOException, ServletException { HttpSession session = ((HttpServletRequest) request).getSession(false); String username = (String) session.getAttribute("username"); - if (!users.contains(username)) { - users.add(username); - } + users.add(username); request.setAttribute("counter", users.size()); chain.doFilter(request, response); } + + @Override + public void destroy() { + } } diff --git a/patterns/src/main/resources/front controller.png b/patterns/src/main/resources/front_controller.png similarity index 100% rename from patterns/src/main/resources/front controller.png rename to patterns/src/main/resources/front_controller.png diff --git a/patterns/src/main/resources/front controller.puml b/patterns/src/main/resources/front_controller.puml similarity index 100% rename from patterns/src/main/resources/front controller.puml rename to patterns/src/main/resources/front_controller.puml diff --git a/patterns/src/main/resources/intercepting_filter.png b/patterns/src/main/resources/intercepting_filter.png new file mode 100644 index 0000000000000000000000000000000000000000..9ccacc80812c9d857475472fbf82751aafc6b01e GIT binary patch literal 17297 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 Date: Mon, 24 Oct 2016 03:45:07 +0200 Subject: [PATCH 301/309] BAEL-325: Refactored to use multi-module structure. --- patterns/front-controller/pom.xml | 45 +++++++++ .../controller/FrontControllerServlet.java | 38 ++++++++ .../controller/commands/FrontCommand.java | 32 +++++++ .../controller/commands/SearchCommand.java | 21 +++++ .../controller/commands/UnknownCommand.java | 11 +++ .../patterns/front/controller/data/Book.java | 15 +++ .../front/controller/data/BookImpl.java | 46 +++++++++ .../front/controller/data/Bookshelf.java | 15 +++ .../front/controller/data/BookshelfImpl.java | 24 +++++ .../src/main/resources/front controller.png | Bin 0 -> 9492 bytes .../src/main/resources/front controller.puml | 22 +++++ .../main/webapp/WEB-INF/jsp/book-found.jsp | 12 +++ .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 10 ++ .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 9 ++ .../src/main/webapp/WEB-INF/web.xml | 15 +++ .../filter}/FrontControllerServlet.java | 14 +-- .../filter}/commands/CheckoutCommand.java | 6 +- .../filter}/commands/FrontCommand.java | 6 +- .../filter}/commands/HomeCommand.java | 4 +- .../filter}/commands/LoginCommand.java | 2 +- .../filter}/commands/LogoutCommand.java | 4 +- .../filter}/commands/OrderCommand.java | 12 +-- .../filter}/commands/SearchCommand.java | 6 +- .../filter}/commands/ShowCommand.java | 6 +- .../filter}/commands/UnknownCommand.java | 2 +- .../intercepting/filter}/data/Book.java | 2 +- .../intercepting/filter}/data/BookImpl.java | 2 +- .../intercepting/filter}/data/Bookshelf.java | 2 +- .../filter}/data/BookshelfImpl.java | 2 +- .../intercepting/filter}/data/Order.java | 2 +- .../intercepting/filter}/data/OrderImpl.java | 2 +- .../filter}/filters/AuthenticationFilter.java | 6 +- .../filter}/filters/BaseFilter.java | 2 +- .../filter}/filters/EncodingFilter.java | 4 +- .../filter}/filters/FilterChainImpl.java | 2 +- .../filter}/filters/FilterManager.java | 2 +- .../filter}/filters/LoggingFilter.java | 4 +- .../filter/filters/OnIntercept.java | 5 + .../filter}/filters/TemplateFilter.java | 2 +- .../filter}/filters/VisitorCounterFilter.java | 2 +- .../src/main/resources/front_controller.png | Bin .../src/main/resources/front_controller.puml | 0 .../main/resources/intercepting_filter.png | Bin .../main/resources/intercepting_filter.puml | 0 .../main/webapp/WEB-INF/jsp/book-found.jsp | 6 +- .../main/webapp/WEB-INF/jsp/book-notfound.jsp | 0 .../src/main/webapp/WEB-INF/jsp/home.jsp | 6 +- .../src/main/webapp/WEB-INF/jsp/login.jsp | 2 +- .../webapp/WEB-INF/jsp/shopping-cart-hint.jsp | 4 +- .../main/webapp/WEB-INF/jsp/shopping-cart.jsp | 6 +- .../src/main/webapp/WEB-INF/jsp/unknown.jsp | 9 ++ .../webapp/WEB-INF/jsp/visitor-counter.jsp | 2 +- patterns/pom.xml | 89 +++++++++--------- .../patterns/filters/OnIntercept.java | 5 - 54 files changed, 433 insertions(+), 114 deletions(-) create mode 100644 patterns/front-controller/pom.xml create mode 100644 patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/FrontControllerServlet.java create mode 100644 patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/FrontCommand.java create mode 100644 patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/SearchCommand.java create mode 100644 patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/UnknownCommand.java create mode 100644 patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Book.java create mode 100644 patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookImpl.java create mode 100644 patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Bookshelf.java create mode 100644 patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookshelfImpl.java create mode 100644 patterns/front-controller/src/main/resources/front controller.png create mode 100644 patterns/front-controller/src/main/resources/front controller.puml create mode 100644 patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-found.jsp create mode 100644 patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-notfound.jsp create mode 100644 patterns/front-controller/src/main/webapp/WEB-INF/jsp/unknown.jsp create mode 100644 patterns/front-controller/src/main/webapp/WEB-INF/web.xml rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/FrontControllerServlet.java (78%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/commands/CheckoutCommand.java (80%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/commands/FrontCommand.java (84%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/commands/HomeCommand.java (76%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/commands/LoginCommand.java (93%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/commands/LogoutCommand.java (79%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/commands/OrderCommand.java (72%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/commands/SearchCommand.java (77%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/commands/ShowCommand.java (75%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/commands/UnknownCommand.java (81%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/data/Book.java (82%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/data/BookImpl.java (94%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/data/Bookshelf.java (89%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/data/BookshelfImpl.java (91%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/data/Order.java (73%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/data/OrderImpl.java (93%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/filters/AuthenticationFilter.java (86%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/filters/BaseFilter.java (91%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/filters/EncodingFilter.java (90%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/filters/FilterChainImpl.java (91%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/filters/FilterManager.java (91%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/filters/LoggingFilter.java (90%) create mode 100644 patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/OnIntercept.java rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/filters/TemplateFilter.java (95%) rename patterns/{src/main/java/com/baeldung/patterns => intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter}/filters/VisitorCounterFilter.java (93%) rename patterns/{ => intercepting-filter}/src/main/resources/front_controller.png (100%) rename patterns/{ => intercepting-filter}/src/main/resources/front_controller.puml (100%) rename patterns/{ => intercepting-filter}/src/main/resources/intercepting_filter.png (100%) rename patterns/{ => intercepting-filter}/src/main/resources/intercepting_filter.puml (100%) rename patterns/{ => intercepting-filter}/src/main/webapp/WEB-INF/jsp/book-found.jsp (81%) rename patterns/{ => intercepting-filter}/src/main/webapp/WEB-INF/jsp/book-notfound.jsp (100%) rename patterns/{ => intercepting-filter}/src/main/webapp/WEB-INF/jsp/home.jsp (79%) rename patterns/{ => intercepting-filter}/src/main/webapp/WEB-INF/jsp/login.jsp (89%) rename patterns/{ => intercepting-filter}/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp (78%) rename patterns/{ => intercepting-filter}/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp (80%) create mode 100644 patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/unknown.jsp rename patterns/{ => intercepting-filter}/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp (60%) delete mode 100644 patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java diff --git a/patterns/front-controller/pom.xml b/patterns/front-controller/pom.xml new file mode 100644 index 0000000000..2dabf484e1 --- /dev/null +++ b/patterns/front-controller/pom.xml @@ -0,0 +1,45 @@ + + + 4.0.0 + + front-controller + war + + + patterns-parent + com.baeldung.patterns + 1.0.0-SNAPSHOT + .. + + + + + javax.servlet + javax.servlet-api + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.maven.plugins + maven-war-plugin + + + org.eclipse.jetty + jetty-maven-plugin + + + /front-controller + + + + + + diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/FrontControllerServlet.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/FrontControllerServlet.java new file mode 100644 index 0000000000..9fb120399c --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/FrontControllerServlet.java @@ -0,0 +1,38 @@ +package com.baeldung.patterns.front.controller; + +import com.baeldung.patterns.front.controller.commands.FrontCommand; +import com.baeldung.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 { + Class type = Class.forName( + String.format( + "com.baeldung.patterns.front.controller.commands.%sCommand", + request.getParameter("command") + ) + ); + return (FrontCommand) type + .asSubclass(FrontCommand.class) + .newInstance(); + } catch (Exception e) { + return new UnknownCommand(); + } + } +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/FrontCommand.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/FrontCommand.java new file mode 100644 index 0000000000..cc92731050 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/FrontCommand.java @@ -0,0 +1,32 @@ +package com.baeldung.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/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/SearchCommand.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/SearchCommand.java new file mode 100644 index 0000000000..21028b07f0 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/SearchCommand.java @@ -0,0 +1,21 @@ +package com.baeldung.patterns.front.controller.commands; + +import com.baeldung.patterns.front.controller.data.Book; +import com.baeldung.patterns.front.controller.data.BookshelfImpl; + +import javax.servlet.ServletException; +import java.io.IOException; + +public class SearchCommand extends FrontCommand { + @Override + public void process() throws ServletException, IOException { + Book book = new BookshelfImpl().getInstance() + .findByTitle(request.getParameter("title")); + if (book != null) { + request.setAttribute("book", book); + forward("book-found"); + } else { + forward("book-notfound"); + } + } +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/UnknownCommand.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/UnknownCommand.java new file mode 100644 index 0000000000..9f24746598 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/commands/UnknownCommand.java @@ -0,0 +1,11 @@ +package com.baeldung.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/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Book.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Book.java new file mode 100644 index 0000000000..5a15df92c4 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Book.java @@ -0,0 +1,15 @@ +package com.baeldung.patterns.front.controller.data; + +public interface Book { + String getAuthor(); + + void setAuthor(String author); + + String getTitle(); + + void setTitle(String title); + + Double getPrice(); + + void setPrice(Double price); +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookImpl.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookImpl.java new file mode 100644 index 0000000000..0421ff5623 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookImpl.java @@ -0,0 +1,46 @@ +package com.baeldung.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/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Bookshelf.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Bookshelf.java new file mode 100644 index 0000000000..21e3067133 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/Bookshelf.java @@ -0,0 +1,15 @@ +package com.baeldung.patterns.front.controller.data; + +public interface Bookshelf { + + 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)); + } + + Bookshelf getInstance(); + + boolean add(E book); + + Book findByTitle(String title); +} diff --git a/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookshelfImpl.java b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookshelfImpl.java new file mode 100644 index 0000000000..dd1fa4e523 --- /dev/null +++ b/patterns/front-controller/src/main/java/com/baeldung/patterns/front/controller/data/BookshelfImpl.java @@ -0,0 +1,24 @@ +package com.baeldung.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); + } +} diff --git a/patterns/front-controller/src/main/resources/front controller.png b/patterns/front-controller/src/main/resources/front controller.png new file mode 100644 index 0000000000000000000000000000000000000000..bd475bf3f32a2a82cc0d5d31acc3e09344109f1f GIT binary patch literal 9492 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 AbstractCommand +AbstractCommand <|-- ConcreteCommand1 +AbstractCommand <|-- ConcreteCommand2 + +@enduml \ No newline at end of file diff --git a/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-found.jsp b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-found.jsp new file mode 100644 index 0000000000..42e08b4a46 --- /dev/null +++ b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -0,0 +1,12 @@ + + + + Bookshelf: Title found + + +

    Our Bookshelf contains this title:

    +

    ${book.getTitle()}

    +

    Author: ${book.getAuthor()}

    + + + diff --git a/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-notfound.jsp new file mode 100644 index 0000000000..2f8ac01755 --- /dev/null +++ b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/book-notfound.jsp @@ -0,0 +1,10 @@ + + + + Bookshelf: Title not found + + +

    Our Bookshelf doesn't contains this title:

    +

    ${param.get("title")}

    + + diff --git a/patterns/front-controller/src/main/webapp/WEB-INF/jsp/unknown.jsp b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/unknown.jsp new file mode 100644 index 0000000000..b52b2de8d5 --- /dev/null +++ b/patterns/front-controller/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -0,0 +1,9 @@ + + + + Bookshelf: Command unknown + + +

    Sorry, this command is not known!

    + + diff --git a/patterns/front-controller/src/main/webapp/WEB-INF/web.xml b/patterns/front-controller/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..4abca2bb97 --- /dev/null +++ b/patterns/front-controller/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,15 @@ + + + + front-controller + com.baeldung.patterns.front.controller.FrontControllerServlet + + + front-controller + / + + diff --git a/patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/FrontControllerServlet.java similarity index 78% rename from patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/FrontControllerServlet.java index beba1d66e5..9d8a004265 100644 --- a/patterns/src/main/java/com/baeldung/patterns/FrontControllerServlet.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/FrontControllerServlet.java @@ -1,9 +1,9 @@ -package com.baeldung.patterns; +package com.baeldung.patterns.intercepting.filter; -import com.baeldung.patterns.commands.FrontCommand; -import com.baeldung.patterns.commands.UnknownCommand; -import com.baeldung.patterns.data.Bookshelf; -import com.baeldung.patterns.data.BookshelfImpl; +import com.baeldung.patterns.intercepting.filter.commands.FrontCommand; +import com.baeldung.patterns.intercepting.filter.commands.UnknownCommand; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.BookshelfImpl; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -13,7 +13,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -@WebServlet(name = "front-controller", urlPatterns = "/index") +@WebServlet(name = "intercepting-filter", urlPatterns = "/") public class FrontControllerServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { @@ -52,7 +52,7 @@ public class FrontControllerServlet extends HttpServlet { try { Class type = Class.forName( String.format( - "com.baeldung.patterns.commands.%sCommand", + "com.baeldung.patterns.intercepting.filter.commands.%sCommand", request.getParameter("command") ) ); diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/CheckoutCommand.java similarity index 80% rename from patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/CheckoutCommand.java index be6dbe84bd..fda88c741e 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/CheckoutCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/CheckoutCommand.java @@ -1,6 +1,6 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Order; +import com.baeldung.patterns.intercepting.filter.data.Order; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; @@ -13,7 +13,7 @@ public class CheckoutCommand extends FrontCommand { HttpSession session = request.getSession(false); if (request.getMethod().equals("POST")) { session.removeAttribute("order"); - response.sendRedirect("index?command=Home&message=Thank you for buying!"); + response.sendRedirect("/?command=Home&message=Thank you for buying!"); } else { Order order = (Order) session.getAttribute("order"); Double total = order.getItems().entrySet().stream() diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/FrontCommand.java similarity index 84% rename from patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/FrontCommand.java index efc0ee4612..a3c545703b 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/FrontCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/FrontCommand.java @@ -1,7 +1,7 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.filters.FilterManager; -import com.baeldung.patterns.filters.OnIntercept; +import com.baeldung.patterns.intercepting.filter.filters.FilterManager; +import com.baeldung.patterns.intercepting.filter.filters.OnIntercept; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/HomeCommand.java similarity index 76% rename from patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/HomeCommand.java index f2358400b9..33e60b44b5 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/HomeCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/HomeCommand.java @@ -1,6 +1,6 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; import javax.servlet.ServletException; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LoginCommand.java similarity index 93% rename from patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LoginCommand.java index 1a7795eb3c..cbc8ad9498 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/LoginCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LoginCommand.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LogoutCommand.java similarity index 79% rename from patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LogoutCommand.java index 82f4e753c9..3c9475d6af 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/LogoutCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/LogoutCommand.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; @@ -11,6 +11,6 @@ public class LogoutCommand extends FrontCommand { HttpSession session = request.getSession(false); session.removeAttribute("username"); session.removeAttribute("order"); - response.sendRedirect("index?command=Home"); + response.sendRedirect("/?command=Home"); } } diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/OrderCommand.java similarity index 72% rename from patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/OrderCommand.java index 5926dfddb5..e53fcf78dd 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/OrderCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/OrderCommand.java @@ -1,9 +1,9 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Book; -import com.baeldung.patterns.data.Bookshelf; -import com.baeldung.patterns.data.Order; -import com.baeldung.patterns.data.OrderImpl; +import com.baeldung.patterns.intercepting.filter.data.Book; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.Order; +import com.baeldung.patterns.intercepting.filter.data.OrderImpl; import javax.servlet.ServletException; import javax.servlet.http.HttpSession; @@ -27,7 +27,7 @@ public class OrderCommand extends FrontCommand { Book book = bookshelf.get(isbn); order.add(book, quantity); session.setAttribute("order", order); - response.sendRedirect(String.format("index?command=Show&isbn=%s", isbn)); + response.sendRedirect(String.format("/?command=Show&isbn=%s", isbn)); } } } diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/SearchCommand.java similarity index 77% rename from patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/SearchCommand.java index 30e401e83a..6c52f4f5a9 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/SearchCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/SearchCommand.java @@ -1,7 +1,7 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Book; -import com.baeldung.patterns.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.Book; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; import javax.servlet.ServletException; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/ShowCommand.java similarity index 75% rename from patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/ShowCommand.java index 3226d9969f..1ea5ca6edb 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/ShowCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/ShowCommand.java @@ -1,7 +1,7 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; -import com.baeldung.patterns.data.Book; -import com.baeldung.patterns.data.Bookshelf; +import com.baeldung.patterns.intercepting.filter.data.Book; +import com.baeldung.patterns.intercepting.filter.data.Bookshelf; import javax.servlet.ServletException; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/UnknownCommand.java similarity index 81% rename from patterns/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/UnknownCommand.java index 71634e5263..427efe5aba 100644 --- a/patterns/src/main/java/com/baeldung/patterns/commands/UnknownCommand.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/commands/UnknownCommand.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.commands; +package com.baeldung.patterns.intercepting.filter.commands; import javax.servlet.ServletException; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/Book.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Book.java similarity index 82% rename from patterns/src/main/java/com/baeldung/patterns/data/Book.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Book.java index ab417aa93b..4e98095c2c 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/Book.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Book.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; public interface Book { String getIsbn(); diff --git a/patterns/src/main/java/com/baeldung/patterns/data/BookImpl.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookImpl.java similarity index 94% rename from patterns/src/main/java/com/baeldung/patterns/data/BookImpl.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookImpl.java index adecfd1d3a..cd0c0924e2 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/BookImpl.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; public class BookImpl implements Book { private String isbn; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Bookshelf.java similarity index 89% rename from patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Bookshelf.java index 66a1da9272..26541de8e0 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/Bookshelf.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Bookshelf.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; import java.util.List; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookshelfImpl.java similarity index 91% rename from patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookshelfImpl.java index a7cbda140d..5767af8e50 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/BookshelfImpl.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/BookshelfImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; import java.util.ArrayList; import java.util.List; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/Order.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Order.java similarity index 73% rename from patterns/src/main/java/com/baeldung/patterns/data/Order.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Order.java index 6dc67e4e58..f4a32002d7 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/Order.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/Order.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; import java.util.Map; diff --git a/patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/OrderImpl.java similarity index 93% rename from patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/OrderImpl.java index 73232ab11c..9f50e45082 100644 --- a/patterns/src/main/java/com/baeldung/patterns/data/OrderImpl.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/data/OrderImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.data; +package com.baeldung.patterns.intercepting.filter.data; import java.util.HashMap; import java.util.Map; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/AuthenticationFilter.java similarity index 86% rename from patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/AuthenticationFilter.java index f5e03878ca..a2cac9d84c 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/AuthenticationFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/AuthenticationFilter.java @@ -1,7 +1,7 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; -import com.baeldung.patterns.commands.FrontCommand; -import com.baeldung.patterns.commands.LoginCommand; +import com.baeldung.patterns.intercepting.filter.commands.FrontCommand; +import com.baeldung.patterns.intercepting.filter.commands.LoginCommand; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/BaseFilter.java similarity index 91% rename from patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/BaseFilter.java index 670039a62c..90d13a6eda 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/BaseFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/BaseFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/EncodingFilter.java similarity index 90% rename from patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/EncodingFilter.java index 2856bb1112..ef3f95382e 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/EncodingFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/EncodingFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.*; import javax.servlet.annotation.WebFilter; @@ -6,7 +6,7 @@ import javax.servlet.annotation.WebInitParam; import java.io.IOException; @WebFilter( - servletNames = {"front-controller"}, + servletNames = {"intercepting-filter"}, initParams = {@WebInitParam(name = "encoding", value = "UTF-8")} ) public class EncodingFilter extends BaseFilter { diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterChainImpl.java similarity index 91% rename from patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterChainImpl.java index 789fc003a0..80ddef785c 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/FilterChainImpl.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterChainImpl.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.*; import java.io.IOException; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterManager.java similarity index 91% rename from patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterManager.java index ae945107fd..2f7b7ac703 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/FilterManager.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/FilterManager.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.FilterChain; import javax.servlet.ServletException; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/LoggingFilter.java similarity index 90% rename from patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/LoggingFilter.java index f6ffc20585..0ebb397938 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/LoggingFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/LoggingFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,7 +11,7 @@ import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; -@WebFilter(servletNames = "front-controller") +@WebFilter(servletNames = "intercepting-filter") public class LoggingFilter extends BaseFilter { private static final Logger log = LoggerFactory.getLogger(LoggingFilter.class); diff --git a/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/OnIntercept.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/OnIntercept.java new file mode 100644 index 0000000000..1a138f1e1c --- /dev/null +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/OnIntercept.java @@ -0,0 +1,5 @@ +package com.baeldung.patterns.intercepting.filter.filters; + +public interface OnIntercept { + void intercept(); +} diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java similarity index 95% rename from patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java index 939d9ad84d..69c613fffe 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/TemplateFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.FilterChain; import javax.servlet.ServletException; diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/VisitorCounterFilter.java similarity index 93% rename from patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java rename to patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/VisitorCounterFilter.java index 5c2358686b..5521b9faee 100644 --- a/patterns/src/main/java/com/baeldung/patterns/filters/VisitorCounterFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/VisitorCounterFilter.java @@ -1,4 +1,4 @@ -package com.baeldung.patterns.filters; +package com.baeldung.patterns.intercepting.filter.filters; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; diff --git a/patterns/src/main/resources/front_controller.png b/patterns/intercepting-filter/src/main/resources/front_controller.png similarity index 100% rename from patterns/src/main/resources/front_controller.png rename to patterns/intercepting-filter/src/main/resources/front_controller.png diff --git a/patterns/src/main/resources/front_controller.puml b/patterns/intercepting-filter/src/main/resources/front_controller.puml similarity index 100% rename from patterns/src/main/resources/front_controller.puml rename to patterns/intercepting-filter/src/main/resources/front_controller.puml diff --git a/patterns/src/main/resources/intercepting_filter.png b/patterns/intercepting-filter/src/main/resources/intercepting_filter.png similarity index 100% rename from patterns/src/main/resources/intercepting_filter.png rename to patterns/intercepting-filter/src/main/resources/intercepting_filter.png diff --git a/patterns/src/main/resources/intercepting_filter.puml b/patterns/intercepting-filter/src/main/resources/intercepting_filter.puml similarity index 100% rename from patterns/src/main/resources/intercepting_filter.puml rename to patterns/intercepting-filter/src/main/resources/intercepting_filter.puml diff --git a/patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-found.jsp similarity index 81% rename from patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-found.jsp index 95a74b9e2e..4de1d3ca23 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/book-found.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-found.jsp @@ -1,4 +1,4 @@ -<%@ page import="com.baeldung.patterns.data.Book" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Book" %> <%@ page import="java.util.List" %> @@ -10,12 +10,12 @@ <% for (Book book : (List) request.getAttribute("books")) { %>

    <%= book.getTitle() %>

    Author: <%= book.getAuthor() %>

    -
    + - Go back... + Go back...
    <% } %> <%@ include file="shopping-cart-hint.jsp"%> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-notfound.jsp similarity index 100% rename from patterns/src/main/webapp/WEB-INF/jsp/book-notfound.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/book-notfound.jsp diff --git a/patterns/src/main/webapp/WEB-INF/jsp/home.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/home.jsp similarity index 79% rename from patterns/src/main/webapp/WEB-INF/jsp/home.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/home.jsp index e7bf1562ea..2c2d7c2f22 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/home.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/home.jsp @@ -1,4 +1,4 @@ -<%@ page import="com.baeldung.patterns.data.Book" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Book" %> <%@ page import="java.util.List" %> @@ -6,7 +6,7 @@ Bookshelf: Home -
    +
    @@ -19,7 +19,7 @@

    <%= book.getAuthor() %>:

    <%= book.getTitle() %>

    - More... + More... <% } %> <%@ include file="shopping-cart-hint.jsp"%> <%@ include file="visitor-counter.jsp"%> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/login.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/login.jsp similarity index 89% rename from patterns/src/main/webapp/WEB-INF/jsp/login.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/login.jsp index 6983fba949..619068bcae 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/login.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/login.jsp @@ -6,7 +6,7 @@

    Please input a username:

    Login

    -
    + "> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp similarity index 78% rename from patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp index 9173c35711..7e0c051540 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart-hint.jsp @@ -1,4 +1,4 @@ -<%@ page import="com.baeldung.patterns.data.Order" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Order" %> <% if (session != null && session.getAttribute("order") != null) { %> <% Order order = ((Order) session.getAttribute("order")); %> <% if (order != null && order.getItems().size() > 0) { %> @@ -10,7 +10,7 @@ <% } else { %> <%= (order.getItems().size()) %> items. <% } %> - Checkout + Checkout

    <% } %> <% } %> diff --git a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp similarity index 80% rename from patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp index 024a3bac3e..5f71d2e54e 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/shopping-cart.jsp @@ -1,5 +1,5 @@ -<%@ page import="com.baeldung.patterns.data.Book" %> -<%@ page import="com.baeldung.patterns.data.Order" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Book" %> +<%@ page import="com.baeldung.patterns.intercepting.filter.data.Order" %> <%@ page import="java.util.Map" %> @@ -22,7 +22,7 @@

    Total: <%= request.getAttribute("total") %>

    - +
    diff --git a/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/unknown.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/unknown.jsp new file mode 100644 index 0000000000..b52b2de8d5 --- /dev/null +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/unknown.jsp @@ -0,0 +1,9 @@ + + + + Bookshelf: Command unknown + + +

    Sorry, this command is not known!

    + + diff --git a/patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp similarity index 60% rename from patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp rename to patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp index 397364e2b3..de1c741fb1 100644 --- a/patterns/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp +++ b/patterns/intercepting-filter/src/main/webapp/WEB-INF/jsp/visitor-counter.jsp @@ -1,5 +1,5 @@ <% Integer counter = (Integer) request.getAttribute("counter"); %> <% if (counter != null && counter > 0) { %>
    -

    You are visitor #<%= counter %>. Logout

    +

    You are visitor #<%= counter %>. Logout

    <% } %> diff --git a/patterns/pom.xml b/patterns/pom.xml index 1b7340304b..6797891353 100644 --- a/patterns/pom.xml +++ b/patterns/pom.xml @@ -4,60 +4,55 @@ 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.patterns + patterns-parent + pom + + front-controller + intercepting-filter + + com.baeldung parent-modules 1.0.0-SNAPSHOT + .. - com.baeldung.patterns - patterns - war - - - - javax.servlet - javax.servlet-api - 3.1.0 - provided - - - org.slf4j - slf4j-api - 1.7.21 - provided - - + + + + javax.servlet + javax.servlet-api + 3.1.0 + provided + + + - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-war-plugin - 3.0.0 - - false - - - - org.eclipse.jetty - jetty-maven-plugin - 9.3.11.v20160721 - - - / - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-war-plugin + 3.0.0 + + + org.eclipse.jetty + jetty-maven-plugin + 9.3.12.v20160915 + + + diff --git a/patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java b/patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java deleted file mode 100644 index 73be3509f0..0000000000 --- a/patterns/src/main/java/com/baeldung/patterns/filters/OnIntercept.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.baeldung.patterns.filters; - -public interface OnIntercept { - void intercept(); -} From 669ba5ef094cbf4f17871608e01a35c3b5fe361a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Mon, 24 Oct 2016 03:47:40 +0200 Subject: [PATCH 302/309] BAEL-325: Something forgotten. --- patterns/src/main/webapp/WEB-INF/jsp/unknown.jsp | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 patterns/src/main/webapp/WEB-INF/jsp/unknown.jsp diff --git a/patterns/src/main/webapp/WEB-INF/jsp/unknown.jsp b/patterns/src/main/webapp/WEB-INF/jsp/unknown.jsp deleted file mode 100644 index b52b2de8d5..0000000000 --- a/patterns/src/main/webapp/WEB-INF/jsp/unknown.jsp +++ /dev/null @@ -1,9 +0,0 @@ - - - - Bookshelf: Command unknown - - -

    Sorry, this command is not known!

    - - From 5e5b0c9ce3142dbe7ef121f860f9288307afe82f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20R=C3=A4del?= Date: Mon, 24 Oct 2016 15:38:31 +0200 Subject: [PATCH 303/309] BAEL-325: Added UML diagrams reflecting the different filter strategies. --- .../filter/filters/TemplateFilter.java | 1 - .../intercepting_filter-custom_strategy.png | Bin 0 -> 26613 bytes .../intercepting_filter-custom_strategy.puml | 29 ++++++++++++++++++ .../intercepting_filter-standard_strategy.png | Bin 0 -> 25680 bytes ...intercepting_filter-standard_strategy.puml | 26 ++++++++++++++++ .../intercepting_filter-template_strategy.png | Bin 0 -> 25981 bytes ...intercepting_filter-template_strategy.puml | 25 +++++++++++++++ 7 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 patterns/intercepting-filter/src/main/resources/intercepting_filter-custom_strategy.png create mode 100644 patterns/intercepting-filter/src/main/resources/intercepting_filter-custom_strategy.puml create mode 100644 patterns/intercepting-filter/src/main/resources/intercepting_filter-standard_strategy.png create mode 100644 patterns/intercepting-filter/src/main/resources/intercepting_filter-standard_strategy.puml create mode 100644 patterns/intercepting-filter/src/main/resources/intercepting_filter-template_strategy.png create mode 100644 patterns/intercepting-filter/src/main/resources/intercepting_filter-template_strategy.puml diff --git a/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java index 69c613fffe..64396ef931 100644 --- a/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java +++ b/patterns/intercepting-filter/src/main/java/com/baeldung/patterns/intercepting/filter/filters/TemplateFilter.java @@ -9,7 +9,6 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; public abstract class TemplateFilter extends BaseFilter { - protected abstract void preFilter( HttpServletRequest request, HttpServletResponse response diff --git a/patterns/intercepting-filter/src/main/resources/intercepting_filter-custom_strategy.png b/patterns/intercepting-filter/src/main/resources/intercepting_filter-custom_strategy.png new file mode 100644 index 0000000000000000000000000000000000000000..2f025fad5e2dfcd47253b39c7c50ddcbf47afc33 GIT binary patch literal 26613 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 literal 0 HcmV?d00001 diff --git a/patterns/intercepting-filter/src/main/resources/intercepting_filter-custom_strategy.puml b/patterns/intercepting-filter/src/main/resources/intercepting_filter-custom_strategy.puml new file mode 100644 index 0000000000..4090085d85 --- /dev/null +++ b/patterns/intercepting-filter/src/main/resources/intercepting_filter-custom_strategy.puml @@ -0,0 +1,29 @@ +@startuml +scale 1.5 + +class FrontControllerServlet { + void doGet() + void doPost() +} +class FilterManager { + {static} void process() +} +class FilterChainImpl { + void doFilter() +} +class AuthenticationFilter { + void doFilter() +} +class VisitorCounterFilter { + void doFilter() +} +class FrontCommand { + void process() +} + +FrontControllerServlet -- FrontCommand +FrontCommand .right.-- FilterManager +FilterManager -- FilterChainImpl +FilterChainImpl .right.-- AuthenticationFilter +AuthenticationFilter .right.-- VisitorCounterFilter +@enduml diff --git a/patterns/intercepting-filter/src/main/resources/intercepting_filter-standard_strategy.png b/patterns/intercepting-filter/src/main/resources/intercepting_filter-standard_strategy.png new file mode 100644 index 0000000000000000000000000000000000000000..0d8db711a7f22026db8313c9a1c16ce77b797dee GIT binary patch literal 25680 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 Ur7w>JuL!|`sp_g!D%pnpA1S+;3jhEB literal 0 HcmV?d00001 diff --git a/patterns/intercepting-filter/src/main/resources/intercepting_filter-standard_strategy.puml b/patterns/intercepting-filter/src/main/resources/intercepting_filter-standard_strategy.puml new file mode 100644 index 0000000000..1261d9ee4b --- /dev/null +++ b/patterns/intercepting-filter/src/main/resources/intercepting_filter-standard_strategy.puml @@ -0,0 +1,26 @@ +@startuml +scale 1.5 + +class FrontControllerServlet { + void doGet() + void doPost() +} +abstract class BaseFilter { + void init() + void destroy() +} +class LoggingFilter { + void doFilter() +} +class EncodingFilter { + void doFilter() +} +class FrontCommand { + void process() +} + +FrontControllerServlet .right.-- FrontCommand +FrontControllerServlet -- BaseFilter +BaseFilter <|-- LoggingFilter +BaseFilter <|-- EncodingFilter +@enduml diff --git a/patterns/intercepting-filter/src/main/resources/intercepting_filter-template_strategy.png b/patterns/intercepting-filter/src/main/resources/intercepting_filter-template_strategy.png new file mode 100644 index 0000000000000000000000000000000000000000..5c37aa2937914acce20739d697117c6cc5eb233c GIT binary patch literal 25981 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 Date: Thu, 27 Oct 2016 00:09:16 +0200 Subject: [PATCH 304/309] BAEL-325: Adding missing pom --- patterns/intercepting-filter/pom.xml | 54 ++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 patterns/intercepting-filter/pom.xml diff --git a/patterns/intercepting-filter/pom.xml b/patterns/intercepting-filter/pom.xml new file mode 100644 index 0000000000..2cf89246f9 --- /dev/null +++ b/patterns/intercepting-filter/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + + intercepting-filter + war + + + com.baeldung.patterns + patterns-parent + 1.0.0-SNAPSHOT + .. + + + + + javax.servlet + javax.servlet-api + + + org.slf4j + slf4j-api + 1.7.21 + provided + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.maven.plugins + maven-war-plugin + + false + + + + org.eclipse.jetty + jetty-maven-plugin + + + / + + + + + + From b2800b7e8ef9426bb22c1fcf2f8b297cba077a40 Mon Sep 17 00:00:00 2001 From: eugenp Date: Thu, 27 Oct 2016 09:42:00 +0300 Subject: [PATCH 305/309] small testign work --- .../{TestInterceptor.java => InterceptorIntegrationTest.java} | 2 +- .../com/baeldung/test/SpringInterceptorIntegrationTest.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) rename cdi/src/test/java/com/baeldung/test/{TestInterceptor.java => InterceptorIntegrationTest.java} (95%) diff --git a/cdi/src/test/java/com/baeldung/test/TestInterceptor.java b/cdi/src/test/java/com/baeldung/test/InterceptorIntegrationTest.java similarity index 95% rename from cdi/src/test/java/com/baeldung/test/TestInterceptor.java rename to cdi/src/test/java/com/baeldung/test/InterceptorIntegrationTest.java index 3529a796d2..cca8cb7495 100644 --- a/cdi/src/test/java/com/baeldung/test/TestInterceptor.java +++ b/cdi/src/test/java/com/baeldung/test/InterceptorIntegrationTest.java @@ -10,7 +10,7 @@ import org.junit.Test; import com.baeldung.interceptor.AuditedInterceptor; import com.baeldung.service.SuperService; -public class TestInterceptor { +public class InterceptorIntegrationTest { Weld weld; WeldContainer container; diff --git a/cdi/src/test/java/com/baeldung/test/SpringInterceptorIntegrationTest.java b/cdi/src/test/java/com/baeldung/test/SpringInterceptorIntegrationTest.java index cffa2256ca..f711b0c8ce 100644 --- a/cdi/src/test/java/com/baeldung/test/SpringInterceptorIntegrationTest.java +++ b/cdi/src/test/java/com/baeldung/test/SpringInterceptorIntegrationTest.java @@ -23,12 +23,16 @@ public class SpringInterceptorIntegrationTest { @Autowired private List accumulator; + // + @Test public void givenService_whenServiceAndAspectExecuted_thenOk() { String code = "123456"; String result = springSuperService.getInfoFromService(code); + Assert.assertThat(accumulator.size(), is(2)); Assert.assertThat(accumulator.get(0), is("Call to getInfoFromService")); Assert.assertThat(accumulator.get(1), is("Method called successfully: getInfoFromService")); } + } From 8260747f5016c24d0c5f3837a9d33bc1ba2dabca Mon Sep 17 00:00:00 2001 From: Ambrus Adrian-Zoltan Date: Thu, 27 Oct 2016 12:21:50 +0300 Subject: [PATCH 306/309] Removed the spring-security-custom-voter module altogether. Integrated the custom voter example into the spring-security-custom-permission module. --- spring-security-custom-permission/pom.xml | 4 + .../main/java/org/baeldung/Application.java | 11 ++- .../org/baeldung/voter}/MinuteBasedVoter.java | 2 +- .../org/baeldung/voter/VoterApplication.java | 17 ++++ .../org/baeldung/voter/VoterMvcConfig.java | 4 +- .../baeldung/voter}/WebSecurityConfig.java | 6 +- .../baeldung/voter}/XmlSecurityConfig.java | 4 +- .../src/main/resources/spring-security.xml | 6 +- .../src/main/resources/templates/private.html | 0 spring-security-custom-voter/pom.xml | 96 ------------------- .../main/java/org/baeldung/Application.java | 12 --- .../src/main/webapp/WEB-INF/web.xml | 47 --------- .../test/java/org/baeldung/web/LiveTest.java | 42 -------- 13 files changed, 40 insertions(+), 211 deletions(-) rename {spring-security-custom-voter/src/main/java/org/baeldung/security => spring-security-custom-permission/src/main/java/org/baeldung/voter}/MinuteBasedVoter.java (97%) create mode 100644 spring-security-custom-permission/src/main/java/org/baeldung/voter/VoterApplication.java rename spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java => spring-security-custom-permission/src/main/java/org/baeldung/voter/VoterMvcConfig.java (85%) rename {spring-security-custom-voter/src/main/java/org/baeldung/security => spring-security-custom-permission/src/main/java/org/baeldung/voter}/WebSecurityConfig.java (97%) rename {spring-security-custom-voter/src/main/java/org/baeldung/security => spring-security-custom-permission/src/main/java/org/baeldung/voter}/XmlSecurityConfig.java (77%) rename {spring-security-custom-voter => spring-security-custom-permission}/src/main/resources/spring-security.xml (90%) rename {spring-security-custom-voter => spring-security-custom-permission}/src/main/resources/templates/private.html (100%) delete mode 100644 spring-security-custom-voter/pom.xml delete mode 100644 spring-security-custom-voter/src/main/java/org/baeldung/Application.java delete mode 100644 spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml delete mode 100644 spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java diff --git a/spring-security-custom-permission/pom.xml b/spring-security-custom-permission/pom.xml index 94f6006dc8..288cc3d6ba 100644 --- a/spring-security-custom-permission/pom.xml +++ b/spring-security-custom-permission/pom.xml @@ -128,6 +128,7 @@ spring-security-taglibs 4.1.3.RELEASE + javax.servlet.jsp.jstl jstl-api @@ -239,6 +240,9 @@ + org.baeldung.Application + + UTF-8 1.8 2.4.0 diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/Application.java b/spring-security-custom-permission/src/main/java/org/baeldung/Application.java index b4e8d04b49..2d59fab6be 100644 --- a/spring-security-custom-permission/src/main/java/org/baeldung/Application.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/Application.java @@ -1,12 +1,17 @@ package org.baeldung; import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.context.web.SpringBootServletInitializer; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; -@SpringBootApplication +@Configuration +@EnableAutoConfiguration +@ComponentScan(excludeFilters = + @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.voter.*")) public class Application extends SpringBootServletInitializer { - public static void main(String[] args) { SpringApplication.run(Application.class, args); } diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java b/spring-security-custom-permission/src/main/java/org/baeldung/voter/MinuteBasedVoter.java similarity index 97% rename from spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java rename to spring-security-custom-permission/src/main/java/org/baeldung/voter/MinuteBasedVoter.java index a08079fcff..ca9072bcac 100644 --- a/spring-security-custom-voter/src/main/java/org/baeldung/security/MinuteBasedVoter.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/voter/MinuteBasedVoter.java @@ -1,4 +1,4 @@ -package org.baeldung.security; +package org.baeldung.voter; import java.time.LocalDateTime; import java.util.Collection; diff --git a/spring-security-custom-permission/src/main/java/org/baeldung/voter/VoterApplication.java b/spring-security-custom-permission/src/main/java/org/baeldung/voter/VoterApplication.java new file mode 100644 index 0000000000..046eca9be7 --- /dev/null +++ b/spring-security-custom-permission/src/main/java/org/baeldung/voter/VoterApplication.java @@ -0,0 +1,17 @@ +package org.baeldung.voter; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; + +@Configuration +@EnableAutoConfiguration +@ComponentScan(basePackages = {"org.baeldung.voter"}) +public class VoterApplication { + + public static void main(String[] args) { + SpringApplication.run(VoterApplication.class, args); + } +} diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/voter/VoterMvcConfig.java similarity index 85% rename from spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java rename to spring-security-custom-permission/src/main/java/org/baeldung/voter/VoterMvcConfig.java index 5d38dca1ff..e282c794d0 100644 --- a/spring-security-custom-voter/src/main/java/org/baeldung/web/MvcConfig.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/voter/VoterMvcConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.web; +package org.baeldung.voter; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; @@ -10,7 +10,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter */ @Configuration -public class MvcConfig extends WebMvcConfigurerAdapter { +public class VoterMvcConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("private"); diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/voter/WebSecurityConfig.java similarity index 97% rename from spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java rename to spring-security-custom-permission/src/main/java/org/baeldung/voter/WebSecurityConfig.java index b3fb196424..3330fda7ec 100644 --- a/spring-security-custom-voter/src/main/java/org/baeldung/security/WebSecurityConfig.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/voter/WebSecurityConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.security; +package org.baeldung.voter; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; @@ -18,8 +18,8 @@ import org.springframework.security.web.util.matcher.AntPathRequestMatcher; import java.util.Arrays; import java.util.List; -@Configuration -@EnableWebSecurity +//@Configuration +//@EnableWebSecurity public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java b/spring-security-custom-permission/src/main/java/org/baeldung/voter/XmlSecurityConfig.java similarity index 77% rename from spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java rename to spring-security-custom-permission/src/main/java/org/baeldung/voter/XmlSecurityConfig.java index 45e095c66e..c206df7d1f 100644 --- a/spring-security-custom-voter/src/main/java/org/baeldung/security/XmlSecurityConfig.java +++ b/spring-security-custom-permission/src/main/java/org/baeldung/voter/XmlSecurityConfig.java @@ -1,4 +1,4 @@ -package org.baeldung.security; +package org.baeldung.voter; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource; @@ -7,7 +7,7 @@ import org.springframework.context.annotation.ImportResource; * Created by ambrusadrianz on 09/10/2016. */ @Configuration -//@ImportResource({"classpath:spring-security.xml"}) +@ImportResource({"classpath:spring-security.xml"}) public class XmlSecurityConfig { public XmlSecurityConfig() { super(); diff --git a/spring-security-custom-voter/src/main/resources/spring-security.xml b/spring-security-custom-permission/src/main/resources/spring-security.xml similarity index 90% rename from spring-security-custom-voter/src/main/resources/spring-security.xml rename to spring-security-custom-permission/src/main/resources/spring-security.xml index 117638289e..382dbf5dff 100644 --- a/spring-security-custom-voter/src/main/resources/spring-security.xml +++ b/spring-security-custom-permission/src/main/resources/spring-security.xml @@ -4,7 +4,7 @@ xmlns:beans="http://www.springframework.org/schema/beans" xsi:schemaLocation=" http://www.springframework.org/schema/security - http://www.springframework.org/schema/security/spring-security-4.1.xsd + http://www.springframework.org/schema/security/spring-security-4.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> @@ -22,12 +22,12 @@ - + - + diff --git a/spring-security-custom-voter/src/main/resources/templates/private.html b/spring-security-custom-permission/src/main/resources/templates/private.html similarity index 100% rename from spring-security-custom-voter/src/main/resources/templates/private.html rename to spring-security-custom-permission/src/main/resources/templates/private.html diff --git a/spring-security-custom-voter/pom.xml b/spring-security-custom-voter/pom.xml deleted file mode 100644 index 727efa48ab..0000000000 --- a/spring-security-custom-voter/pom.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - 4.0.0 - - org.baeldung - spring-security-custom-voter - 0.0.1-SNAPSHOT - war - - spring-security-custom-voter - Custom AccessDecisionVoter with Spring Security - - - org.springframework.boot - spring-boot-starter-parent - 1.4.1.RELEASE - - - - - UTF-8 - UTF-8 - 3.0.1 - 1.8 - - - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-thymeleaf - - - org.springframework.boot - spring-boot-starter-web - - - - org.springframework.boot - spring-boot-starter-test - test - - - - - - junit - junit - test - - - - org.hamcrest - hamcrest-core - test - - - - org.hamcrest - hamcrest-library - test - - - - org.springframework - spring-test - 4.3.3.RELEASE - - - - org.springframework.security - spring-security-test - 4.1.3.RELEASE - test - - - - org.springframework.security - spring-security-web - 4.1.3.RELEASE - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - diff --git a/spring-security-custom-voter/src/main/java/org/baeldung/Application.java b/spring-security-custom-voter/src/main/java/org/baeldung/Application.java deleted file mode 100644 index a9d6f3b8b1..0000000000 --- a/spring-security-custom-voter/src/main/java/org/baeldung/Application.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.baeldung; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class Application { - - public static void main(String[] args) { - SpringApplication.run(Application.class, args); - } -} diff --git a/spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml b/spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index d69bce35ae..0000000000 --- a/spring-security-custom-voter/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - Spring Secured Application - - - - mvc - org.springframework.web.servlet.DispatcherServlet - 1 - - - mvc - / - - - - contextClass - - org.springframework.web.context.support.AnnotationConfigWebApplicationContext - - - - contextConfigLocation - org.baeldung.spring.web.config - - - - org.springframework.web.context.ContextLoaderListener - - - - - - springSecurityFilterChain - org.springframework.web.filter.DelegatingFilterProxy - - - springSecurityFilterChain - /* - - - \ No newline at end of file diff --git a/spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java b/spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java deleted file mode 100644 index 3ddeab5920..0000000000 --- a/spring-security-custom-voter/src/test/java/org/baeldung/web/LiveTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.baeldung.web; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; -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.setup.MockMvcBuilders; -import org.springframework.web.context.WebApplicationContext; - -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestBuilders.formLogin; -import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; -import static org.springframework.security.test.web.servlet.response.SecurityMockMvcResultMatchers.authenticated; -import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration @WebAppConfiguration @SpringBootTest public class LiveTest { - @Autowired private WebApplicationContext context; - - private MockMvc mvc; - - @Before public void setup() { - mvc = MockMvcBuilders.webAppContextSetup(context).apply(springSecurity()).build(); - } - - @Test public void givenUnauthenticatedUser_whenAccessingMainPage_thenRedirect() throws Exception { - mvc.perform(get("/")).andExpect(status().is3xxRedirection()); - } - - @Test public void givenValidUsernameAndPassword_whenLogin_thenOK() throws Exception { - mvc.perform(formLogin("/login").user("user").password("pass")).andExpect(authenticated()); - } - - @Test public void givenAuthenticatedAdmin_whenAccessingMainPage_thenOK() throws Exception { - mvc.perform(get("/").with(user("admin").password("pass").roles("ADMIN"))).andExpect(status().isOk()); - } -} From 71e23506173ea243039ce813d98874e79af63daa Mon Sep 17 00:00:00 2001 From: DOHA Date: Thu, 27 Oct 2016 14:05:19 +0200 Subject: [PATCH 307/309] minor fix --- .../jackson/deserialization/JacksonDeserializeTest.java | 4 ++-- .../baeldung/jackson/serialization/JacksonSerializeTest.java | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/jackson/src/test/java/org/baeldung/jackson/deserialization/JacksonDeserializeTest.java b/jackson/src/test/java/org/baeldung/jackson/deserialization/JacksonDeserializeTest.java index 31a6ae8ef9..503b6eb99b 100644 --- a/jackson/src/test/java/org/baeldung/jackson/deserialization/JacksonDeserializeTest.java +++ b/jackson/src/test/java/org/baeldung/jackson/deserialization/JacksonDeserializeTest.java @@ -29,12 +29,12 @@ public class JacksonDeserializeTest { final String jsonInput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":\"1982-09-21T12:00:00+01:00\",\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; final ObjectMapper mapper = new ObjectMapper(); - final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); + final DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX"); mapper.setDateFormat(df); final Movie movie = mapper.readValue(jsonInput, Movie.class); - final String expectedOutput = "Movie [imdbId=tt0472043, director=Mel Gibson, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 09:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; + final String expectedOutput = "Movie [imdbId=tt0472043, director=Mel Gibson, actors=[ActorJackson [imdbId=nm2199632, dateOfBirth=Tue Sep 21 11:00:00 GMT 1982, filmography=[Apocalypto, Beatdown, Wind Walkers]]]]"; Assert.assertEquals(movie.toString(), expectedOutput); } diff --git a/jackson/src/test/java/org/baeldung/jackson/serialization/JacksonSerializeTest.java b/jackson/src/test/java/org/baeldung/jackson/serialization/JacksonSerializeTest.java index fcf19fcfad..6d9e378025 100644 --- a/jackson/src/test/java/org/baeldung/jackson/serialization/JacksonSerializeTest.java +++ b/jackson/src/test/java/org/baeldung/jackson/serialization/JacksonSerializeTest.java @@ -4,6 +4,7 @@ import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Arrays; +import java.util.TimeZone; import org.baeldung.jackson.entities.ActorJackson; import org.baeldung.jackson.entities.Movie; @@ -23,6 +24,7 @@ public class JacksonSerializeTest { public void whenSimpleSerialize_thenCorrect() throws JsonProcessingException, ParseException { final SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); + sdf.setTimeZone(TimeZone.getTimeZone("GMT")); final ActorJackson rudyYoungblood = new ActorJackson("nm2199632", sdf.parse("21-09-1982"), Arrays.asList("Apocalypto", "Beatdown", "Wind Walkers")); final Movie movie = new Movie("tt0472043", "Mel Gibson", Arrays.asList(rudyYoungblood)); @@ -30,7 +32,7 @@ public class JacksonSerializeTest { final ObjectMapper mapper = new ObjectMapper(); final String jsonResult = mapper.writeValueAsString(movie); - final String expectedOutput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":401403600000,\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; + final String expectedOutput = "{\"imdbId\":\"tt0472043\",\"director\":\"Mel Gibson\",\"actors\":[{\"imdbId\":\"nm2199632\",\"dateOfBirth\":401414400000,\"filmography\":[\"Apocalypto\",\"Beatdown\",\"Wind Walkers\"]}]}"; Assert.assertEquals(jsonResult, expectedOutput); } From 02dda9995c7bceacfe4249479704934ccfb48f49 Mon Sep 17 00:00:00 2001 From: eugenp Date: Thu, 27 Oct 2016 20:34:47 +0300 Subject: [PATCH 308/309] fixing the extra module in the parent pom --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 514d066844..95182ab63c 100644 --- a/pom.xml +++ b/pom.xml @@ -110,7 +110,6 @@ spring-security-basic-auth spring-security-custom-permission - spring-security-custom-voter spring-security-mvc-custom spring-security-mvc-digest-auth spring-security-mvc-ldap From 4362aab2e1d3b92171423528e0a42b972dd4c15a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Fri, 28 Oct 2016 07:29:07 +0200 Subject: [PATCH 309/309] Add missing files --- core-java/src/main/resources/targetFile.tmp | 2 + .../baeldung/datetime/UseLocalDateTest.java | 54 ++++ .../datetime/UseLocalDateTimeTest.java | 19 ++ .../baeldung/datetime/UseLocalTimeTest.java | 36 +++ .../com/baeldung/datetime/UsePeriodTest.java | 26 ++ .../datetime/UseZonedDateTimeTest.java | 20 ++ .../doublecolon/TestComputerUtils.java | 91 ++++++ .../encoderdecoder/EncoderDecoder.java | 84 ++++++ .../java/com/baeldung/enums/PizzaTest.java | 80 ++++++ .../com/baeldung/file/FileOperationsTest.java | 121 ++++++++ .../java8/Java8CollectionCleanupUnitTest.java | 48 ++++ ...Java8DefaultStaticIntefaceMethodsTest.java | 27 ++ .../java8/Java8ExecutorServiceTest.java | 156 +++++++++++ .../com/baeldung/java8/Java8ForkJoinTest.java | 100 +++++++ .../Java8FunctionalInteracesLambdasTest.java | 94 +++++++ .../java8/Java8MethodReferenceTest.java | 67 +++++ .../com/baeldung/java8/Java8OptionalTest.java | 118 ++++++++ .../com/baeldung/java8/Java8SortUnitTest.java | 115 ++++++++ .../baeldung/java8/Java8StreamApiTest.java | 263 ++++++++++++++++++ .../com/baeldung/java8/Java8StreamsTest.java | 113 ++++++++ .../baeldung/java8/JavaFolderSizeTest.java | 115 ++++++++ .../java8/JavaTryWithResourcesTest.java | 86 ++++++ .../base64/ApacheCommonsEncodeDecodeTest.java | 56 ++++ .../java8/base64/Java8EncodeDecodeTest.java | 109 ++++++++ .../java/com/baeldung/java8/entity/Human.java | 89 ++++++ .../threadpool/CoreThreadPoolTest.java | 146 ++++++++++ .../threadpool/GuavaThreadPoolTest.java | 56 ++++ .../baeldung/util/CurrentDateTimeTest.java | 41 +++ 28 files changed, 2332 insertions(+) create mode 100644 core-java/src/main/resources/targetFile.tmp create mode 100644 core-java/src/test/java/com/baeldung/datetime/UseLocalDateTest.java create mode 100644 core-java/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java create mode 100644 core-java/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java create mode 100644 core-java/src/test/java/com/baeldung/datetime/UsePeriodTest.java create mode 100644 core-java/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java create mode 100644 core-java/src/test/java/com/baeldung/doublecolon/TestComputerUtils.java create mode 100644 core-java/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java create mode 100644 core-java/src/test/java/com/baeldung/enums/PizzaTest.java create mode 100644 core-java/src/test/java/com/baeldung/file/FileOperationsTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8CollectionCleanupUnitTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8ExecutorServiceTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8ForkJoinTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8FunctionalInteracesLambdasTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8OptionalTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8SortUnitTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8StreamApiTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/Java8StreamsTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/JavaTryWithResourcesTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeTest.java create mode 100644 core-java/src/test/java/com/baeldung/java8/entity/Human.java create mode 100644 core-java/src/test/java/com/baeldung/threadpool/CoreThreadPoolTest.java create mode 100644 core-java/src/test/java/com/baeldung/threadpool/GuavaThreadPoolTest.java create mode 100644 core-java/src/test/java/com/baeldung/util/CurrentDateTimeTest.java diff --git a/core-java/src/main/resources/targetFile.tmp b/core-java/src/main/resources/targetFile.tmp new file mode 100644 index 0000000000..20f137b416 --- /dev/null +++ b/core-java/src/main/resources/targetFile.tmp @@ -0,0 +1,2 @@ +line 1 +a second line \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTest.java b/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTest.java new file mode 100644 index 0000000000..0537832586 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTest.java @@ -0,0 +1,54 @@ +package com.baeldung.datetime; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; + +import org.junit.Assert; +import org.junit.Test; + +public class UseLocalDateTest { + + UseLocalDate useLocalDate = new UseLocalDate(); + + @Test + public void givenValues_whenUsingFactoryOf_thenLocalDate(){ + Assert.assertEquals("2016-05-10",useLocalDate.getLocalDateUsingFactoryOfMethod(2016,5,10).toString()); + } + + @Test + public void givenString_whenUsingParse_thenLocalDate(){ + Assert.assertEquals("2016-05-10",useLocalDate.getLocalDateUsingParseMethod("2016-05-10").toString()); + } + + @Test + public void whenUsingClock_thenLocalDate(){ + Assert.assertEquals(LocalDate.now(),useLocalDate.getLocalDateFromClock()); + } + + @Test + public void givenDate_whenUsingPlus_thenNextDay(){ + Assert.assertEquals(LocalDate.now().plusDays(1),useLocalDate.getNextDay(LocalDate.now())); + } + + @Test + public void givenDate_whenUsingMinus_thenPreviousDay(){ + Assert.assertEquals(LocalDate.now().minusDays(1),useLocalDate.getPreviousDay(LocalDate.now())); + } + + @Test + public void givenToday_whenUsingGetDayOfWeek_thenDayOfWeek(){ + Assert.assertEquals(DayOfWeek.SUNDAY,useLocalDate.getDayOfWeek(LocalDate.parse("2016-05-22"))); + } + + @Test + public void givenToday_whenUsingWithTemporalAdjuster_thenFirstDayOfMonth(){ + Assert.assertEquals(1,useLocalDate.getFirstDayOfMonth().getDayOfMonth()); + } + + @Test + public void givenLocalDate_whenUsingAtStartOfDay_thenReturnMidnight(){ + Assert.assertEquals(LocalDateTime.parse("2016-05-22T00:00:00"),useLocalDate.getStartOfDay(LocalDate.parse("2016-05-22"))); + } + +} diff --git a/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java b/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java new file mode 100644 index 0000000000..69a289fd02 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java @@ -0,0 +1,19 @@ +package com.baeldung.datetime; + +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.Month; + +import org.junit.Assert; +import org.junit.Test; + +public class UseLocalDateTimeTest { + + UseLocalDateTime useLocalDateTime = new UseLocalDateTime(); + + @Test + public void givenString_whenUsingParse_thenLocalDateTime(){ + Assert.assertEquals(LocalDate.of(2016, Month.MAY, 10),useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalDate()); + Assert.assertEquals(LocalTime.of(6,30),useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalTime()); + } +} diff --git a/core-java/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java b/core-java/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java new file mode 100644 index 0000000000..7776fad363 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java @@ -0,0 +1,36 @@ +package com.baeldung.datetime; + +import java.time.LocalTime; + +import org.junit.Assert; +import org.junit.Test; + +public class UseLocalTimeTest { + + UseLocalTime useLocalTime = new UseLocalTime(); + + @Test + public void givenValues_whenUsingFactoryOf_thenLocalTime(){ + Assert.assertEquals("07:07:07",useLocalTime.getLocalTimeUsingFactoryOfMethod(7,7,7).toString()); + } + + @Test + public void givenString_whenUsingParse_thenLocalTime(){ + Assert.assertEquals("06:30",useLocalTime.getLocalTimeUsingParseMethod("06:30").toString()); + } + + @Test + public void givenTime_whenAddHour_thenLocalTime(){ + Assert.assertEquals("07:30",useLocalTime.addAnHour(LocalTime.of(6,30)).toString()); + } + + @Test + public void getHourFromLocalTime(){ + Assert.assertEquals(1, useLocalTime.getHourFromLocalTime(LocalTime.of(1,1))); + } + + @Test + public void getLocalTimeWithMinuteSetToValue(){ + Assert.assertEquals(LocalTime.of(10, 20), useLocalTime.getLocalTimeWithMinuteSetToValue(LocalTime.of(10,10), 20)); + } +} diff --git a/core-java/src/test/java/com/baeldung/datetime/UsePeriodTest.java b/core-java/src/test/java/com/baeldung/datetime/UsePeriodTest.java new file mode 100644 index 0000000000..5237270096 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/datetime/UsePeriodTest.java @@ -0,0 +1,26 @@ +package com.baeldung.datetime; + +import java.time.LocalDate; +import java.time.Period; + +import org.junit.Assert; +import org.junit.Test; + +public class UsePeriodTest { + UsePeriod usingPeriod=new UsePeriod(); + + @Test + public void givenPeriodAndLocalDate_thenCalculateModifiedDate(){ + Period period = Period.ofDays(1); + LocalDate localDate = LocalDate.parse("2007-05-10"); + Assert.assertEquals(localDate.plusDays(1),usingPeriod.modifyDates(localDate, period)); + } + + @Test + public void givenDates_thenGetPeriod(){ + LocalDate localDate1 = LocalDate.parse("2007-05-10"); + LocalDate localDate2 = LocalDate.parse("2007-05-15"); + + Assert.assertEquals(Period.ofDays(5), usingPeriod.getDifferenceBetweenDates(localDate1, localDate2)); + } +} diff --git a/core-java/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java b/core-java/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java new file mode 100644 index 0000000000..5af01ad678 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java @@ -0,0 +1,20 @@ +package com.baeldung.datetime; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +import org.junit.Assert; +import org.junit.Test; + +public class UseZonedDateTimeTest { + + UseZonedDateTime zonedDateTime=new UseZonedDateTime(); + + @Test + public void givenZoneId_thenZonedDateTime(){ + ZoneId zoneId=ZoneId.of("Europe/Paris"); + ZonedDateTime zonedDatetime=zonedDateTime.getZonedDateTime(LocalDateTime.parse("2016-05-20T06:30"), zoneId); + Assert.assertEquals(zoneId,ZoneId.from(zonedDatetime)); + } +} diff --git a/core-java/src/test/java/com/baeldung/doublecolon/TestComputerUtils.java b/core-java/src/test/java/com/baeldung/doublecolon/TestComputerUtils.java new file mode 100644 index 0000000000..85194f5aa6 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/doublecolon/TestComputerUtils.java @@ -0,0 +1,91 @@ +package com.baeldung.doublecolon; + +import com.baeldung.doublecolon.function.TriFunction; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.Arrays; +import java.util.Comparator; +import java.util.List; +import java.util.function.BiFunction; + +import static com.baeldung.doublecolon.ComputerUtils.*; + +public class TestComputerUtils { + + @Before + public void setup() { + } + + @After + public void tearDown() { + } + + @Test + public void testConstructorReference() { + + Computer c1 = new Computer(2015, "white"); + Computer c2 = new Computer(2009, "black"); + Computer c3 = new Computer(2014, "black"); + + BiFunction c4Function = Computer::new; + Computer c4 = c4Function.apply(2013, "white"); + BiFunction c5Function = Computer::new; + Computer c5 = c5Function.apply(2010, "black"); + BiFunction c6Function = Computer::new; + Computer c6 = c6Function.apply(2008, "black"); + + List inventory = Arrays.asList(c1, c2, c3, c4, c5, c6); + + List blackComputer = filter(inventory, blackPredicate); + Assert.assertEquals("The black Computers are: ", blackComputer.size(), 4); + + List after2010Computer = filter(inventory, after2010Predicate); + Assert.assertEquals("The Computer bought after 2010 are: ", after2010Computer.size(), 3); + + List before2011Computer = filter(inventory, c -> c.getAge() < 2011); + Assert.assertEquals("The Computer bought before 2011 are: ", before2011Computer.size(), 3); + + inventory.sort(Comparator.comparing(Computer::getAge)); + + Assert.assertEquals("Oldest Computer in inventory", c6, inventory.get(0)); + + } + + @Test + public void testStaticMethodReference() { + + Computer c1 = new Computer(2015, "white", 35); + Computer c2 = new Computer(2009, "black", 65); + TriFunction c6Function = Computer::new; + Computer c3 = c6Function.apply(2008, "black", 90); + + List inventory = Arrays.asList(c1, c2, c3); + inventory.forEach(ComputerUtils::repair); + + Assert.assertEquals("Computer repaired", new Integer(100), c1.getHealty()); + } + + @Test + public void testInstanceMethodArbitraryObjectParticularType() { + + Computer c1 = new Computer(2015, "white", 35); + Computer c2 = new MacbookPro(2009, "black", 65); + List inventory = Arrays.asList(c1, c2); + inventory.forEach(Computer::turnOnPc); + + } + + @Test + public void testSuperMethodReference() { + + final TriFunction integerStringIntegerObjectTriFunction = MacbookPro::new; + final MacbookPro macbookPro = integerStringIntegerObjectTriFunction.apply(2010, "black", 100); + Double initialValue = new Double(999.99); + final Double actualValue = macbookPro.calculateValue(initialValue); + Assert.assertEquals(766.659, actualValue, 0.0); + } + +} diff --git a/core-java/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java b/core-java/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java new file mode 100644 index 0000000000..208a23eb91 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/encoderdecoder/EncoderDecoder.java @@ -0,0 +1,84 @@ +package com.baeldung.encoderdecoder; + +import org.hamcrest.CoreMatchers; +import org.junit.Assert; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLDecoder; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; + +public class EncoderDecoder { + + private static final String URL = "http://www.baeldung.com?key1=value+1&key2=value%40%21%242&key3=value%253"; + private static final Logger LOGGER = LoggerFactory.getLogger(EncoderDecoder.class); + + private String encodeValue(String value) { + String encoded = null; + try { + encoded = URLEncoder.encode(value, StandardCharsets.UTF_8.toString()); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error encoding parameter {}", e.getMessage(), e); + } + return encoded; + } + + + private String decode(String value) { + String decoded = null; + try { + decoded = URLDecoder.decode(value, StandardCharsets.UTF_8.toString()); + } catch (UnsupportedEncodingException e) { + LOGGER.error("Error encoding parameter {}", e.getMessage(), e); + } + return decoded; + } + + @Test + public void givenURL_whenAnalyze_thenCorrect() throws Exception { + URL url = new URL(URL); + + Assert.assertThat(url.getProtocol(), CoreMatchers.is("http")); + Assert.assertThat(url.getHost(), CoreMatchers.is("www.baeldung.com")); + Assert.assertThat(url.getQuery(), CoreMatchers.is("key1=value+1&key2=value%40%21%242&key3=value%253")); + } + + @Test + public void givenRequestParam_whenUTF8Scheme_thenEncode() throws Exception { + Map requestParams = new HashMap<>(); + requestParams.put("key1", "value 1"); + requestParams.put("key2", "value@!$2"); + requestParams.put("key3", "value%3"); + + String encodedQuery = requestParams.keySet().stream() + .map(key -> key + "=" + encodeValue(requestParams.get(key))) + .collect(Collectors.joining("&")); + String encodedURL = "http://www.baeldung.com?" + encodedQuery; + + Assert.assertThat(URL, CoreMatchers.is(encodedURL)); + } + + @Test + public void givenRequestParam_whenUTF8Scheme_thenDecodeRequestParams() throws Exception { + URL url = new URL(URL); + String query = url.getQuery(); + + String decodedQuery = Arrays.stream(query.split("&")) + .map(param -> param.split("=")[0] + "=" + decode(param.split("=")[1])) + .collect(Collectors.joining("&")); + + Assert.assertEquals( + "http://www.baeldung.com?key1=value 1&key2=value@!$2&key3=value%3", url.getProtocol() + "://" + url.getHost() + "?" + decodedQuery); + } + +} diff --git a/core-java/src/test/java/com/baeldung/enums/PizzaTest.java b/core-java/src/test/java/com/baeldung/enums/PizzaTest.java new file mode 100644 index 0000000000..deeebaa240 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/enums/PizzaTest.java @@ -0,0 +1,80 @@ +package com.baeldung.enums; + + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; + +import static junit.framework.TestCase.assertTrue; + +public class PizzaTest { + + @Test + public void givenPizaOrder_whenReady_thenDeliverable() { + Pizza testPz = new Pizza(); + testPz.setStatus(Pizza.PizzaStatusEnum.READY); + assertTrue(testPz.isDeliverable()); + } + + @Test + public void givenPizaOrders_whenRetrievingUnDeliveredPzs_thenCorrectlyRetrieved() { + List pzList = new ArrayList<>(); + Pizza pz1 = new Pizza(); + pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); + + Pizza pz2 = new Pizza(); + pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz3 = new Pizza(); + pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz4 = new Pizza(); + pz4.setStatus(Pizza.PizzaStatusEnum.READY); + + pzList.add(pz1); + pzList.add(pz2); + pzList.add(pz3); + pzList.add(pz4); + + List undeliveredPzs = Pizza.getAllUndeliveredPizzas(pzList); + assertTrue(undeliveredPzs.size() == 3); + } + + @Test + public void givenPizaOrders_whenGroupByStatusCalled_thenCorrectlyGrouped() { + + List pzList = new ArrayList<>(); + Pizza pz1 = new Pizza(); + pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); + + Pizza pz2 = new Pizza(); + pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz3 = new Pizza(); + pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz4 = new Pizza(); + pz4.setStatus(Pizza.PizzaStatusEnum.READY); + + pzList.add(pz1); + pzList.add(pz2); + pzList.add(pz3); + pzList.add(pz4); + + EnumMap> map = Pizza.groupPizzaByStatus(pzList); + assertTrue(map.get(Pizza.PizzaStatusEnum.DELIVERED).size() == 1); + assertTrue(map.get(Pizza.PizzaStatusEnum.ORDERED).size() == 2); + assertTrue(map.get(Pizza.PizzaStatusEnum.READY).size() == 1); + } + + @Test + public void givenPizaOrder_whenDelivered_thenPizzaGetsDeliveredAndStatusChanges() { + Pizza pz = new Pizza(); + pz.setStatus(Pizza.PizzaStatusEnum.READY); + pz.deliver(); + assertTrue(pz.getStatus() == Pizza.PizzaStatusEnum.DELIVERED); + } + +} diff --git a/core-java/src/test/java/com/baeldung/file/FileOperationsTest.java b/core-java/src/test/java/com/baeldung/file/FileOperationsTest.java new file mode 100644 index 0000000000..e21af9552a --- /dev/null +++ b/core-java/src/test/java/com/baeldung/file/FileOperationsTest.java @@ -0,0 +1,121 @@ +package com.baeldung.file; + +import org.apache.commons.io.FileUtils; +import org.hamcrest.CoreMatchers; +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Test; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.URISyntaxException; +import java.net.URL; +import java.net.URLConnection; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.stream.Stream; + +public class FileOperationsTest { + + @Test + public void givenFileName_whenUsingClassloader_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + InputStream inputStream = new FileInputStream(file); + String data = readFromInputStream(inputStream); + + Assert.assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + Class clazz = FileOperationsTest.class; + InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt"); + String data = readFromInputStream(inputStream); + + Assert.assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFileName_whenUsingJarFile_thenFileData() throws IOException { + String expectedData = "BSD License"; + + Class clazz = Matchers.class; + InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt"); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + } + + @Test + public void givenURLName_whenUsingURL_thenFileData() throws IOException { + String expectedData = "Baeldung"; + + URL urlObject = new URL("http://www.baeldung.com/"); + + URLConnection urlConnection = urlObject.openConnection(); + + InputStream inputStream = urlConnection.getInputStream(); + String data = readFromInputStream(inputStream); + + Assert.assertThat(data.trim(), CoreMatchers.containsString(expectedData)); + } + + @Test + public void givenFileName_whenUsingFileUtils_thenFileData() throws IOException { + String expectedData = "Hello World from fileTest.txt!!!"; + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource("fileTest.txt").getFile()); + String data = FileUtils.readFileToString(file); + + Assert.assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFilePath_whenUsingFilesReadAllBytes_thenFileData() throws IOException, URISyntaxException { + String expectedData = "Hello World from fileTest.txt!!!"; + + Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); + + byte[] fileBytes = Files.readAllBytes(path); + String data = new String(fileBytes); + + Assert.assertEquals(expectedData, data.trim()); + } + + @Test + public void givenFilePath_whenUsingFilesLines_thenFileData() throws IOException, URISyntaxException { + String expectedData = "Hello World from fileTest.txt!!!"; + + Path path = Paths.get(getClass().getClassLoader().getResource("fileTest.txt").toURI()); + + StringBuilder data = new StringBuilder(); + Stream lines = Files.lines(path); + lines.forEach(line -> data.append(line).append("\n")); + lines.close(); + + Assert.assertEquals(expectedData, data.toString().trim()); + } + + private String readFromInputStream(InputStream inputStream) throws IOException { + StringBuilder resultStringBuilder = new StringBuilder(); + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream))) { + String line; + while ((line = bufferedReader.readLine()) != null) { + resultStringBuilder.append(line).append("\n"); + } + } + + return resultStringBuilder.toString(); + } +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/java8/Java8CollectionCleanupUnitTest.java b/core-java/src/test/java/com/baeldung/java8/Java8CollectionCleanupUnitTest.java new file mode 100644 index 0000000000..ef4b80c6e8 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8CollectionCleanupUnitTest.java @@ -0,0 +1,48 @@ +package com.baeldung.java8; + +import com.google.common.collect.Lists; +import org.junit.Test; + +import java.util.List; +import java.util.stream.Collectors; + +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; + +public class Java8CollectionCleanupUnitTest { + + // tests - + + @Test + public void givenListContainsNulls_whenFilteringParallel_thenCorrect() { + final List list = Lists.newArrayList(null, 1, 2, null, 3, null); + final List listWithoutNulls = list.parallelStream().filter(i -> i != null).collect(Collectors.toList()); + + assertThat(listWithoutNulls, hasSize(3)); + } + + @Test + public void givenListContainsNulls_whenFilteringSerial_thenCorrect() { + final List list = Lists.newArrayList(null, 1, 2, null, 3, null); + final List listWithoutNulls = list.stream().filter(i -> i != null).collect(Collectors.toList()); + + assertThat(listWithoutNulls, hasSize(3)); + } + + @Test + public void givenListContainsNulls_whenRemovingNullsWithRemoveIf_thenCorrect() { + final List listWithoutNulls = Lists.newArrayList(null, 1, 2, null, 3, null); + listWithoutNulls.removeIf(p -> p == null); + + assertThat(listWithoutNulls, hasSize(3)); + } + + @Test + public void givenListContainsDuplicates_whenRemovingDuplicatesWithJava8_thenCorrect() { + final List listWithDuplicates = Lists.newArrayList(1, 1, 2, 2, 3, 3); + final List listWithoutDuplicates = listWithDuplicates.parallelStream().distinct().collect(Collectors.toList()); + + assertThat(listWithoutDuplicates, hasSize(3)); + } + +} diff --git a/core-java/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java b/core-java/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java new file mode 100644 index 0000000000..21a5e34b9b --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java @@ -0,0 +1,27 @@ +package com.baeldung.java8; + +import com.baeldung.java_8_features.Vehicle; +import com.baeldung.java_8_features.VehicleImpl; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class Java8DefaultStaticIntefaceMethodsTest { + + @Test + public void callStaticInterfaceMethdosMethods_whenExpectedResults_thenCorrect() { + Vehicle vehicle = new VehicleImpl(); + String overview = vehicle.getOverview(); + long[] startPosition = vehicle.startPosition(); + + assertEquals(overview, "ATV made by N&F Vehicles"); + assertEquals(startPosition[0], 23); + assertEquals(startPosition[1], 15); + } + + @Test + public void callDefaultInterfaceMethods_whenExpectedResults_thenCorrect() { + String producer = Vehicle.producer(); + assertEquals(producer, "N&F Vehicles"); + } +} diff --git a/core-java/src/test/java/com/baeldung/java8/Java8ExecutorServiceTest.java b/core-java/src/test/java/com/baeldung/java8/Java8ExecutorServiceTest.java new file mode 100644 index 0000000000..581ccec182 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8ExecutorServiceTest.java @@ -0,0 +1,156 @@ +package com.baeldung.java8; + + +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.*; + +import static org.junit.Assert.*; + + +public class Java8ExecutorServiceTest { + + private Runnable runnableTask; + private Callable callableTask; + private List> callableTasks; + + @Before + public void init() { + + runnableTask = () -> { + try { + TimeUnit.MILLISECONDS.sleep(300); + } catch (InterruptedException e) { + e.printStackTrace(); + } + }; + + callableTask = () -> { + TimeUnit.MILLISECONDS.sleep(300); + return "Task's execution"; + }; + + callableTasks = new ArrayList<>(); + callableTasks.add(callableTask); + callableTasks.add(callableTask); + callableTasks.add(callableTask); + } + + @Test + public void creationSubmittingTaskShuttingDown_whenShutDown_thenCorrect() { + + ExecutorService executorService = Executors.newFixedThreadPool(10); + executorService.submit(runnableTask); + executorService.submit(callableTask); + executorService.shutdown(); + + assertTrue(executorService.isShutdown()); + } + + @Test + public void creationSubmittingTasksShuttingDownNow_whenShutDownAfterAwating_thenCorrect() { + + ExecutorService threadPoolExecutor = + new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue<>()); + + for (int i = 0; i < 100; i++) { + threadPoolExecutor.submit(callableTask); + } + + List notExecutedTasks = smartShutdown(threadPoolExecutor); + + assertTrue(threadPoolExecutor.isShutdown()); + assertFalse(notExecutedTasks.isEmpty()); + assertTrue(notExecutedTasks.size() > 0 && notExecutedTasks.size() < 98); + } + + private List smartShutdown(ExecutorService executorService) { + + List notExecutedTasks = new ArrayList<>(); + executorService.shutdown(); + try { + if (!executorService.awaitTermination(800, TimeUnit.MILLISECONDS)) { + notExecutedTasks = executorService.shutdownNow(); + } + } catch (InterruptedException e) { + notExecutedTasks = executorService.shutdownNow(); + } + return notExecutedTasks; + } + + @Test + public void submittingTasks_whenExecutedOneAndAll_thenCorrect() { + + ExecutorService executorService = Executors.newFixedThreadPool(10); + + String result = null; + List> futures = new ArrayList<>(); + try { + result = executorService.invokeAny(callableTasks); + futures = executorService.invokeAll(callableTasks); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + + assertEquals("Task's execution", result); + assertTrue(futures.size() == 3); + } + + @Test + public void submittingTaskShuttingDown_whenGetExpectedResult_thenCorrect() { + + ExecutorService executorService = Executors.newFixedThreadPool(10); + + Future future = executorService.submit(callableTask); + String result = null; + try { + result = future.get(); + result = future.get(200, TimeUnit.MILLISECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + e.printStackTrace(); + } + + executorService.shutdown(); + + assertEquals("Task's execution", result); + } + + @Test + public void submittingTask_whenCanceled_thenCorrect() { + + ExecutorService executorService = Executors.newFixedThreadPool(10); + + Future future = executorService.submit(callableTask); + + boolean canceled = future.cancel(true); + boolean isCancelled = future.isCancelled(); + + executorService.shutdown(); + + assertTrue(canceled); + assertTrue(isCancelled); + } + + @Test + public void submittingTaskScheduling_whenExecuted_thenCorrect() { + + ScheduledExecutorService executorService = Executors + .newSingleThreadScheduledExecutor(); + + Future resultFuture = executorService.schedule(callableTask, 1, TimeUnit.SECONDS); + String result = null; + try { + result = resultFuture.get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + + executorService.shutdown(); + + assertEquals("Task's execution", result); + } +} diff --git a/core-java/src/test/java/com/baeldung/java8/Java8ForkJoinTest.java b/core-java/src/test/java/com/baeldung/java8/Java8ForkJoinTest.java new file mode 100644 index 0000000000..273b2d78db --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8ForkJoinTest.java @@ -0,0 +1,100 @@ +package com.baeldung.java8; + + +import com.baeldung.forkjoin.CustomRecursiveAction; +import com.baeldung.forkjoin.CustomRecursiveTask; +import com.baeldung.forkjoin.util.PoolUtil; +import org.junit.Before; +import org.junit.Test; + +import java.util.Random; +import java.util.concurrent.ForkJoinPool; + +import static org.junit.Assert.*; + +public class Java8ForkJoinTest { + + private int[] arr; + private CustomRecursiveTask customRecursiveTask; + + @Before + public void init() { + Random random = new Random(); + arr = new int[50]; + for (int i = 0; i < arr.length; i++) { + arr[i] = random.nextInt(35); + } + customRecursiveTask = new CustomRecursiveTask(arr); + } + + + @Test + public void callPoolUtil_whenExistsAndExpectedType_thenCorrect() { + + ForkJoinPool forkJoinPool = PoolUtil.forkJoinPool; + ForkJoinPool forkJoinPoolTwo = PoolUtil.forkJoinPool; + + assertNotNull(forkJoinPool); + assertEquals(2, forkJoinPool.getParallelism()); + assertEquals(forkJoinPool, forkJoinPoolTwo); + + } + + @Test + public void callCommonPool_whenExistsAndExpectedType_thenCorrect() { + + ForkJoinPool commonPool = ForkJoinPool.commonPool(); + ForkJoinPool commonPoolTwo = ForkJoinPool.commonPool(); + + assertNotNull(commonPool); + assertEquals(commonPool, commonPoolTwo); + + } + + @Test + public void executeRecursiveAction_whenExecuted_thenCorrect() { + + CustomRecursiveAction myRecursiveAction = new CustomRecursiveAction("ddddffffgggghhhh"); + ForkJoinPool.commonPool().invoke(myRecursiveAction); + + assertTrue(myRecursiveAction.isDone()); + + } + + @Test + public void executeRecursiveTask_whenExecuted_thenCorrect() { + + ForkJoinPool forkJoinPool = ForkJoinPool.commonPool(); + + forkJoinPool.execute(customRecursiveTask); + int result = customRecursiveTask.join(); + assertTrue(customRecursiveTask.isDone()); + + forkJoinPool.submit(customRecursiveTask); + int resultTwo = customRecursiveTask.join(); + assertTrue(customRecursiveTask.isDone()); + + } + + @Test + public void executeRecursiveTaskWithFJ_whenExecuted_thenCorrect() { + + CustomRecursiveTask customRecursiveTaskFirst = new CustomRecursiveTask(arr); + CustomRecursiveTask customRecursiveTaskSecond = new CustomRecursiveTask(arr); + CustomRecursiveTask customRecursiveTaskLast = new CustomRecursiveTask(arr); + + customRecursiveTaskFirst.fork(); + customRecursiveTaskSecond.fork(); + customRecursiveTaskLast.fork(); + int result = 0; + result += customRecursiveTaskLast.join(); + result += customRecursiveTaskSecond.join(); + result += customRecursiveTaskFirst.join(); + + assertTrue(customRecursiveTaskFirst.isDone()); + assertTrue(customRecursiveTaskSecond.isDone()); + assertTrue(customRecursiveTaskLast.isDone()); + assertTrue(result != 0); + + } +} diff --git a/core-java/src/test/java/com/baeldung/java8/Java8FunctionalInteracesLambdasTest.java b/core-java/src/test/java/com/baeldung/java8/Java8FunctionalInteracesLambdasTest.java new file mode 100644 index 0000000000..faaf3ae407 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8FunctionalInteracesLambdasTest.java @@ -0,0 +1,94 @@ +package com.baeldung.java8; + +import com.baeldung.Foo; +import com.baeldung.FooExtended; +import com.baeldung.UseFoo; +import org.junit.Before; +import org.junit.Test; + +import java.util.function.Function; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; + +public class Java8FunctionalInteracesLambdasTest { + + private UseFoo useFoo; + + @Before + public void init() { + useFoo = new UseFoo(); + } + + @Test + public void functionalInterfaceInstantiation_whenReturnDefiniteString_thenCorrect() { + final Foo foo = parameter -> parameter + "from lambda"; + final String result = useFoo.add("Message ", foo); + + assertEquals("Message from lambda", result); + } + + @Test + public void standardFIParameter_whenReturnDefiniteString_thenCorrect() { + final Function fn = parameter -> parameter + "from lambda"; + final String result = useFoo.addWithStandardFI("Message ", fn); + + assertEquals("Message from lambda", result); + } + + @Test + public void defaultMethodFromExtendedInterface_whenReturnDefiniteString_thenCorrect() { + final FooExtended fooExtended = string -> string; + final String result = fooExtended.defaultMethod(); + + assertEquals("String from Bar", result); + } + + @Test + public void lambdaAndInnerClassInstantiation_whenReturnSameString_thenCorrect() { + final Foo foo = parameter -> parameter + "from Foo"; + + final Foo fooByIC = new Foo() { + @Override + public String method(final String string) { + return string + "from Foo"; + } + }; + + assertEquals(foo.method("Something "), fooByIC.method("Something ")); + } + + @Test + public void accessVariablesFromDifferentScopes_whenReturnPredefinedString_thenCorrect() { + assertEquals("Results: resultIC = Inner class value, resultLambda = Enclosing scope value", useFoo.scopeExperiment()); + } + + @Test + public void shorteningLambdas_whenReturnEqualsResults_thenCorrect() { + final Foo foo = parameter -> buildString(parameter); + + final Foo fooHuge = parameter -> { + final String result = "Something " + parameter; + // many lines of code + return result; + }; + + assertEquals(foo.method("Something"), fooHuge.method("Something")); + } + + private String buildString(final String parameter) { + final String result = "Something " + parameter; + // many lines of code + return result; + } + + @Test + public void mutatingOfEffectivelyFinalVariable_whenNotEquals_thenCorrect() { + final int[] total = new int[1]; + final Runnable r = () -> total[0]++; + r.run(); + + assertNotEquals(0, total[0]); + } + +} diff --git a/core-java/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java b/core-java/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java new file mode 100644 index 0000000000..d9d88c5052 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java @@ -0,0 +1,67 @@ +package com.baeldung.java8; + +import com.baeldung.java_8_features.User; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class Java8MethodReferenceTest { + + private List list; + + @Before + public void init() { + list = new ArrayList<>(); + list.add("One"); + list.add("OneAndOnly"); + list.add("Derek"); + list.add("Change"); + list.add("factory"); + list.add("justBefore"); + list.add("Italy"); + list.add("Italy"); + list.add("Thursday"); + list.add(""); + list.add(""); + } + + @Test + public void checkStaticMethodReferences_whenWork_thenCorrect() { + + List users = new ArrayList<>(); + users.add(new User()); + users.add(new User()); + boolean isReal = users.stream().anyMatch(u -> User.isRealUser(u)); + boolean isRealRef = users.stream().anyMatch(User::isRealUser); + assertTrue(isReal); + assertTrue(isRealRef); + } + + @Test + public void checkInstanceMethodReferences_whenWork_thenCorrect() { + User user = new User(); + boolean isLegalName = list.stream().anyMatch(user::isLegalName); + assertTrue(isLegalName); + } + + @Test + public void checkParticularTypeReferences_whenWork_thenCorrect() { + long count = list.stream().filter(String::isEmpty).count(); + assertEquals(count, 2); + } + + @Test + public void checkConstructorReferences_whenWork_thenCorrect() { + Stream stream = list.stream().map(User::new); + List userList = stream.collect(Collectors.toList()); + assertEquals(userList.size(), list.size()); + assertTrue(userList.get(0) instanceof User); + } +} diff --git a/core-java/src/test/java/com/baeldung/java8/Java8OptionalTest.java b/core-java/src/test/java/com/baeldung/java8/Java8OptionalTest.java new file mode 100644 index 0000000000..26de39bc0e --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8OptionalTest.java @@ -0,0 +1,118 @@ +package com.baeldung.java8; + +import com.baeldung.java_8_features.*; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.junit.Assert.*; + +public class Java8OptionalTest { + + private List list; + + @Before + public void init() { + list = new ArrayList<>(); + list.add("One"); + list.add("OneAndOnly"); + list.add("Derek"); + list.add("Change"); + list.add("factory"); + list.add("justBefore"); + list.add("Italy"); + list.add("Italy"); + list.add("Thursday"); + list.add(""); + list.add(""); + } + + @Test + public void checkOptional_whenAsExpected_thenCorrect() { + + Optional optionalEmpty = Optional.empty(); + assertFalse(optionalEmpty.isPresent()); + + String str = "value"; + Optional optional = Optional.of(str); + assertEquals(optional.get(), "value"); + + Optional optionalNullable = Optional.ofNullable(str); + Optional optionalNull = Optional.ofNullable(null); + assertEquals(optionalNullable.get(), "value"); + assertFalse(optionalNull.isPresent()); + + List listOpt = Optional.of(list).orElse(new ArrayList<>()); + List listNull = null; + List listOptNull = Optional.ofNullable(listNull).orElse(new ArrayList<>()); + assertTrue(listOpt == list); + assertTrue(listOptNull.isEmpty()); + + Optional user = Optional.ofNullable(getUser()); + String result = user.map(User::getAddress) + .map(Address::getStreet) + .orElse("not specified"); + assertEquals(result, "1st Avenue"); + + Optional optionalUser = Optional.ofNullable(getOptionalUser()); + String resultOpt = optionalUser.flatMap(OptionalUser::getAddress) + .flatMap(OptionalAddress::getStreet) + .orElse("not specified"); + assertEquals(resultOpt, "1st Avenue"); + + Optional userNull = Optional.ofNullable(getUserNull()); + String resultNull = userNull.map(User::getAddress) + .map(Address::getStreet) + .orElse("not specified"); + assertEquals(resultNull, "not specified"); + + Optional optionalUserNull = Optional.ofNullable(getOptionalUserNull()); + String resultOptNull = optionalUserNull.flatMap(OptionalUser::getAddress) + .flatMap(OptionalAddress::getStreet) + .orElse("not specified"); + assertEquals(resultOptNull, "not specified"); + + } + + @Test(expected = CustomException.class) + public void callMethod_whenCustomException_thenCorrect() { + User user = new User(); + String result = user.getOrThrow(); + } + + private User getUser() { + User user = new User(); + Address address = new Address(); + address.setStreet("1st Avenue"); + user.setAddress(address); + return user; + } + + private OptionalUser getOptionalUser() { + OptionalUser user = new OptionalUser(); + OptionalAddress address = new OptionalAddress(); + address.setStreet("1st Avenue"); + user.setAddress(address); + return user; + } + + private OptionalUser getOptionalUserNull() { + OptionalUser user = new OptionalUser(); + OptionalAddress address = new OptionalAddress(); + address.setStreet(null); + user.setAddress(address); + return user; + } + + private User getUserNull() { + User user = new User(); + Address address = new Address(); + address.setStreet(null); + user.setAddress(address); + return user; + } + +} diff --git a/core-java/src/test/java/com/baeldung/java8/Java8SortUnitTest.java b/core-java/src/test/java/com/baeldung/java8/Java8SortUnitTest.java new file mode 100644 index 0000000000..f371c0d7da --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8SortUnitTest.java @@ -0,0 +1,115 @@ +package com.baeldung.java8; + +import com.baeldung.java8.entity.Human; +import com.google.common.collect.Lists; +import com.google.common.primitives.Ints; +import org.junit.Assert; +import org.junit.Test; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; + +import static org.hamcrest.Matchers.equalTo; + +public class Java8SortUnitTest { + + // tests - + + @Test + public final void givenPreLambda_whenSortingEntitiesByName_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); + + Collections.sort(humans, new Comparator() { + @Override + public final int compare(final Human h1, final Human h2) { + return h1.getName().compareTo(h2.getName()); + } + }); + + Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); + } + + @Test + public final void whenSortingEntitiesByName_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); + + humans.sort((final Human h1, final Human h2) -> h1.getName().compareTo(h2.getName())); + + Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); + } + + @Test + public final void givenLambdaShortForm_whenSortingEntitiesByName_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); + + humans.sort((h1, h2) -> h1.getName().compareTo(h2.getName())); + + Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); + } + + @Test + public final void whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 12), new Human("Sarah", 10), new Human("Zack", 12)); + humans.sort((lhs, rhs) -> { + if (lhs.getName().equals(rhs.getName())) { + return lhs.getAge() - rhs.getAge(); + } else { + return lhs.getName().compareTo(rhs.getName()); + } + }); + Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); + } + + @Test + public final void givenCompositionVerbose_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 12), new Human("Sarah", 10), new Human("Zack", 12)); + final Comparator byName = (h1, h2) -> h1.getName().compareTo(h2.getName()); + final Comparator byAge = (h1, h2) -> Ints.compare(h1.getAge(), h2.getAge()); + + humans.sort(byName.thenComparing(byAge)); + Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); + } + + @Test + public final void givenComposition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 12), new Human("Sarah", 10), new Human("Zack", 12)); + + humans.sort(Comparator.comparing(Human::getName).thenComparing(Human::getAge)); + Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); + } + + @Test + public final void whenSortingEntitiesByAge_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); + + humans.sort((h1, h2) -> Ints.compare(h1.getAge(), h2.getAge())); + Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); + } + + @Test + public final void whenSortingEntitiesByNameReversed_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); + final Comparator comparator = (h1, h2) -> h1.getName().compareTo(h2.getName()); + + humans.sort(comparator.reversed()); + Assert.assertThat(humans.get(0), equalTo(new Human("Sarah", 10))); + } + + @Test + public final void givenMethodDefinition_whenSortingEntitiesByNameThenAge_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); + + humans.sort(Human::compareByNameThenAge); + Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); + } + + @Test + public final void givenInstanceMethod_whenSortingEntitiesByName_thenCorrectlySorted() { + final List humans = Lists.newArrayList(new Human("Sarah", 10), new Human("Jack", 12)); + + humans.sort(Comparator.comparing(Human::getName)); + Assert.assertThat(humans.get(0), equalTo(new Human("Jack", 12))); + } + +} diff --git a/core-java/src/test/java/com/baeldung/java8/Java8StreamApiTest.java b/core-java/src/test/java/com/baeldung/java8/Java8StreamApiTest.java new file mode 100644 index 0000000000..37326c6d26 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8StreamApiTest.java @@ -0,0 +1,263 @@ +package com.baeldung.java8; + +import com.baeldung.streamApi.Product; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedWriter; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; +import java.util.regex.Pattern; +import java.util.stream.*; + +import static org.junit.Assert.*; + +public class Java8StreamApiTest { + + private long counter; + + private static Logger log = LoggerFactory.getLogger(Java8StreamApiTest.class); + + private List productList; + + @Before + public void init() { + productList = Arrays.asList( + new Product(23, "potatoes"), new Product(14, "orange"), + new Product(13, "lemon"), new Product(23, "bread"), + new Product(13, "sugar")); + } + + @Test + public void checkPipeline_whenStreamOneElementShorter_thenCorrect() { + + List list = Arrays.asList("abc1", "abc2", "abc3"); + long size = list.stream().skip(1) + .map(element -> element.substring(0, 3)).count(); + assertEquals(list.size() - 1, size); + } + + @Test + public void checkOrder_whenChangeQuantityOfMethodCalls_thenCorrect() { + + List list = Arrays.asList("abc1", "abc2", "abc3"); + + counter = 0; + long sizeFirst = list.stream() + .skip(2).map(element -> { + wasCalled(); + return element.substring(0, 3); + }).count(); + assertEquals(1, counter); + + counter = 0; + long sizeSecond = list.stream().map(element -> { + wasCalled(); + return element.substring(0, 3); + }).skip(2).count(); + assertEquals(3, counter); + } + + @Test + public void createEmptyStream_whenEmpty_thenCorrect() { + + Stream streamEmpty = Stream.empty(); + assertEquals(0, streamEmpty.count()); + + List names = Collections.emptyList(); + Stream streamOf = Product.streamOf(names); + assertTrue(streamOf.count() == 0); + } + + @Test + public void createStream_whenCreated_thenCorrect() { + + Collection collection = Arrays.asList("a", "b", "c"); + Stream streamOfCollection = collection.stream(); + assertEquals(3, streamOfCollection.count()); + + Stream streamOfArray = Stream.of("a", "b", "c"); + assertEquals(3, streamOfArray.count()); + + String[] arr = new String[]{"a", "b", "c"}; + Stream streamOfArrayPart = Arrays.stream(arr, 1, 3); + assertEquals(2, streamOfArrayPart.count()); + + IntStream intStream = IntStream.range(1, 3); + LongStream longStream = LongStream.rangeClosed(1, 3); + Random random = new Random(); + DoubleStream doubleStream = random.doubles(3); + assertEquals(2, intStream.count()); + assertEquals(3, longStream.count()); + assertEquals(3, doubleStream.count()); + + IntStream streamOfChars = "abc".chars(); + IntStream str = "".chars(); + assertEquals(3, streamOfChars.count()); + + Stream streamOfString = Pattern.compile(", ").splitAsStream("a, b, c"); + assertEquals("a", streamOfString.findFirst().get()); + + Path path = getPath(); + Stream streamOfStrings = null; + try { + streamOfStrings = Files.lines(path, Charset.forName("UTF-8")); + } catch (IOException e) { + log.error("Error creating streams from paths {}", path, e.getMessage(), e); + } + assertEquals("a", streamOfStrings.findFirst().get()); + + Stream streamBuilder = Stream.builder().add("a").add("b").add("c").build(); + assertEquals(3, streamBuilder.count()); + + Stream streamGenerated = Stream.generate(() -> "element").limit(10); + assertEquals(10, streamGenerated.count()); + + Stream streamIterated = Stream.iterate(40, n -> n + 2).limit(20); + assertTrue(40 <= streamIterated.findAny().get()); + } + + @Test + public void runStreamPipeline_whenOrderIsRight_thenCorrect() { + + List list = Arrays.asList("abc1", "abc2", "abc3"); + Optional stream = list.stream() + .filter(element -> { + log.info("filter() was called"); + return element.contains("2"); + }).map(element -> { + log.info("map() was called"); + return element.toUpperCase(); + }).findFirst(); + } + + @Test + public void reduce_whenExpected_thenCorrect() { + + OptionalInt reduced = IntStream.range(1, 4).reduce((a, b) -> a + b); + assertEquals(6, reduced.getAsInt()); + + int reducedTwoParams = IntStream.range(1, 4).reduce(10, (a, b) -> a + b); + assertEquals(16, reducedTwoParams); + + int reducedThreeParams = Stream.of(1, 2, 3) + .reduce(10, (a, b) -> a + b, (a, b) -> { + log.info("combiner was called"); + return a + b; + }); + assertEquals(16, reducedThreeParams); + + int reducedThreeParamsParallel = Arrays.asList(1, 2, 3).parallelStream() + .reduce(10, (a, b) -> a + b, (a, b) -> { + log.info("combiner was called"); + return a + b; + }); + assertEquals(36, reducedThreeParamsParallel); + } + + @Test + public void collecting_whenAsExpected_thenCorrect() { + + List collectorCollection = productList.stream() + .map(Product::getName).collect(Collectors.toList()); + + assertTrue(collectorCollection instanceof List); + assertEquals(5, collectorCollection.size()); + + String listToString = productList.stream().map(Product::getName) + .collect(Collectors.joining(", ", "[", "]")); + + assertTrue(listToString.contains(",") && listToString.contains("[") && listToString.contains("]")); + + double averagePrice = productList.stream().collect(Collectors.averagingInt(Product::getPrice)); + assertTrue(17.2 == averagePrice); + + int summingPrice = productList.stream().collect(Collectors.summingInt(Product::getPrice)); + assertEquals(86, summingPrice); + + IntSummaryStatistics statistics = productList.stream() + .collect(Collectors.summarizingInt(Product::getPrice)); + assertEquals(23, statistics.getMax()); + + Map> collectorMapOfLists = productList.stream() + .collect(Collectors.groupingBy(Product::getPrice)); + assertEquals(3, collectorMapOfLists.keySet().size()); + + Map> mapPartioned = productList.stream() + .collect(Collectors.partitioningBy(element -> element.getPrice() > 15)); + assertEquals(2, mapPartioned.keySet().size()); + + } + + @Test(expected = UnsupportedOperationException.class) + public void collect_whenThrows_thenCorrect() { + Set unmodifiableSet = productList.stream() + .collect(Collectors.collectingAndThen(Collectors.toSet(), + Collections::unmodifiableSet)); + unmodifiableSet.add(new Product(4, "tea")); + } + + @Test + public void customCollector_whenResultContainsAllElementsFrSource_thenCorrect() { + Collector> toLinkedList = + Collector.of(LinkedList::new, LinkedList::add, + (first, second) -> { + first.addAll(second); + return first; + }); + + LinkedList linkedListOfPersons = productList.stream().collect(toLinkedList); + assertTrue(linkedListOfPersons.containsAll(productList)); + } + + @Test + public void parallelStream_whenWorks_thenCorrect() { + Stream streamOfCollection = productList.parallelStream(); + boolean isParallel = streamOfCollection.isParallel(); + boolean haveBigPrice = streamOfCollection.map(product -> product.getPrice() * 12) + .anyMatch(price -> price > 200); + assertTrue(isParallel && haveBigPrice); + } + + @Test + public void parallel_whenIsParallel_thenCorrect() { + IntStream intStreamParallel = + IntStream.range(1, 150).parallel().map(element -> element * 34); + boolean isParallel = intStreamParallel.isParallel(); + assertTrue(isParallel); + } + + @Test + public void parallel_whenIsSequential_thenCorrect() { + IntStream intStreamParallel = + IntStream.range(1, 150).parallel().map(element -> element * 34); + IntStream intStreamSequential = intStreamParallel.sequential(); + boolean isParallel = intStreamParallel.isParallel(); + assertFalse(isParallel); + } + + private Path getPath() { + Path path = null; + try { + path = Files.createTempFile(null, ".txt"); + } catch (IOException e) { + log.error(e.getMessage()); + } + + try (BufferedWriter writer = Files.newBufferedWriter(path)) { + writer.write("a\nb\nc"); + } catch (IOException e) { + log.error(e.getMessage()); + } + return path; + } + + private void wasCalled() { + counter++; + } +} diff --git a/core-java/src/test/java/com/baeldung/java8/Java8StreamsTest.java b/core-java/src/test/java/com/baeldung/java8/Java8StreamsTest.java new file mode 100644 index 0000000000..1f1dda49ce --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/Java8StreamsTest.java @@ -0,0 +1,113 @@ +package com.baeldung.java8; + +import com.baeldung.java_8_features.Detail; +import org.junit.Before; +import org.junit.Test; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.junit.Assert.*; + +public class Java8StreamsTest { + + private List list; + + @Before + public void init() { + list = new ArrayList<>(); + list.add("One"); + list.add("OneAndOnly"); + list.add("Derek"); + list.add("Change"); + list.add("factory"); + list.add("justBefore"); + list.add("Italy"); + list.add("Italy"); + list.add("Thursday"); + list.add(""); + list.add(""); + } + + @Test + public void checkStreamCount_whenCreating_givenDifferentSources() { + String[] arr = new String[]{"a", "b", "c"}; + Stream streamArr = Arrays.stream(arr); + assertEquals(streamArr.count(), 3); + + Stream streamOf = Stream.of("a", "b", "c"); + assertEquals(streamOf.count(), 3); + + long count = list.stream().distinct().count(); + assertEquals(count, 9); + } + + + @Test + public void checkStreamCount_whenOperationFilter_thanCorrect() { + Stream streamFilter = list.stream().filter(element -> element.isEmpty()); + assertEquals(streamFilter.count(), 2); + } + + + @Test + public void checkStreamCount_whenOperationMap_thanCorrect() { + List uris = new ArrayList<>(); + uris.add("C:\\My.txt"); + Stream streamMap = uris.stream().map(uri -> Paths.get(uri)); + assertEquals(streamMap.count(), 1); + + List details = new ArrayList<>(); + details.add(new Detail()); + details.add(new Detail()); + Stream streamFlatMap = details.stream() + .flatMap(detail -> detail.getParts().stream()); + assertEquals(streamFlatMap.count(), 4); + } + + + @Test + public void checkStreamCount_whenOperationMatch_thenCorrect() { + boolean isValid = list.stream().anyMatch(element -> element.contains("h")); + boolean isValidOne = list.stream().allMatch(element -> element.contains("h")); + boolean isValidTwo = list.stream().noneMatch(element -> element.contains("h")); + assertTrue(isValid); + assertFalse(isValidOne); + assertFalse(isValidTwo); + } + + + @Test + public void checkStreamReducedValue_whenOperationReduce_thenCorrect() { + List integers = new ArrayList<>(); + integers.add(1); + integers.add(1); + integers.add(1); + Integer reduced = integers.stream().reduce(23, (a, b) -> a + b); + assertTrue(reduced == 26); + } + + @Test + public void checkStreamContains_whenOperationCollect_thenCorrect() { + List resultList = list.stream() + .map(element -> element.toUpperCase()) + .collect(Collectors.toList()); + assertEquals(resultList.size(), list.size()); + assertTrue(resultList.contains("")); + } + + + @Test + public void checkParallelStream_whenDoWork() { + list.parallelStream().forEach(element -> doWork(element)); + } + + private void doWork(String string) { + assertTrue(true); //just imitate an amount of work + } +} diff --git a/core-java/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java b/core-java/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java new file mode 100644 index 0000000000..f2e7452137 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/JavaFolderSizeTest.java @@ -0,0 +1,115 @@ +package com.baeldung.java8; + +import org.apache.commons.io.FileUtils; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; +import java.text.DecimalFormat; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.StreamSupport; + +import static org.junit.Assert.assertEquals; + +public class JavaFolderSizeTest { + + private String path; + + @Before + public void init() { + final String separator = File.separator; + path = String.format("src%stest%sresources", separator, separator); + } + + @Test + public void whenGetFolderSizeRecursive_thenCorrect() { + final long expectedSize = 136; + + final File folder = new File(path); + final long size = getFolderSize(folder); + + assertEquals(expectedSize, size); + } + + @Test + public void whenGetFolderSizeUsingJava7_thenCorrect() throws IOException { + final long expectedSize = 136; + + final AtomicLong size = new AtomicLong(0); + final Path folder = Paths.get(path); + + Files.walkFileTree(folder, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException { + size.addAndGet(attrs.size()); + return FileVisitResult.CONTINUE; + } + }); + + assertEquals(expectedSize, size.longValue()); + } + + @Test + public void whenGetFolderSizeUsingJava8_thenCorrect() throws IOException { + final long expectedSize = 136; + + final Path folder = Paths.get(path); + final long size = Files.walk(folder).filter(p -> p.toFile().isFile()).mapToLong(p -> p.toFile().length()).sum(); + + assertEquals(expectedSize, size); + } + + @Test + public void whenGetFolderSizeUsingApacheCommonsIO_thenCorrect() { + final long expectedSize = 136; + + final File folder = new File(path); + final long size = FileUtils.sizeOfDirectory(folder); + + assertEquals(expectedSize, size); + } + + @Test + public void whenGetFolderSizeUsingGuava_thenCorrect() { + final long expectedSize = 136; + + final File folder = new File(path); + + final Iterable files = com.google.common.io.Files.fileTreeTraverser().breadthFirstTraversal(folder); + final long size = StreamSupport.stream(files.spliterator(), false) + .filter(File::isFile) + .mapToLong(File::length).sum(); + + assertEquals(expectedSize, size); + } + + @Test + public void whenGetReadableSize_thenCorrect() { + final File folder = new File(path); + final long size = getFolderSize(folder); + + final String[] units = new String[]{"B", "KB", "MB", "GB", "TB"}; + final int unitIndex = (int) (Math.log10(size) / 3); + final double unitValue = 1 << (unitIndex * 10); + + final String readableSize = new DecimalFormat("#,##0.#").format(size / unitValue) + " " + units[unitIndex]; + assertEquals("136 B", readableSize); + } + + private long getFolderSize(final File folder) { + long length = 0; + final File[] files = folder.listFiles(); + + for (File file : files) { + if (file.isFile()) { + length += file.length(); + } else { + length += getFolderSize(file); + } + } + return length; + } +} \ No newline at end of file diff --git a/core-java/src/test/java/com/baeldung/java8/JavaTryWithResourcesTest.java b/core-java/src/test/java/com/baeldung/java8/JavaTryWithResourcesTest.java new file mode 100644 index 0000000000..224c4e9d6a --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/JavaTryWithResourcesTest.java @@ -0,0 +1,86 @@ +package com.baeldung.java8; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Date; +import java.util.Scanner; + +public class JavaTryWithResourcesTest { + + private static final String TEST_STRING_HELLO_WORLD = "Hello World"; + private Date resource1Date, resource2Date; + + // tests + + /* Example for using Try_with_resources */ + @Test + public void whenWritingToStringWriter_thenCorrectlyWritten() { + final StringWriter sw = new StringWriter(); + try (PrintWriter pw = new PrintWriter(sw, true)) { + pw.print(TEST_STRING_HELLO_WORLD); + } + + Assert.assertEquals(sw.getBuffer().toString(), TEST_STRING_HELLO_WORLD); + } + + /* Example for using multiple resources */ + @Test + public void givenStringToScanner_whenWritingToStringWriter_thenCorrectlyWritten() { + + final StringWriter sw = new StringWriter(); + try (Scanner sc = new Scanner(TEST_STRING_HELLO_WORLD); PrintWriter pw = new PrintWriter(sw, true)) { + while (sc.hasNext()) { + pw.print(sc.nextLine()); + } + } + + Assert.assertEquals(sw.getBuffer().toString(), TEST_STRING_HELLO_WORLD); + } + + /* Example to show order in which the resources are closed */ + @Test + public void whenFirstAutoClosableResourceIsinitializedFirst_thenFirstAutoClosableResourceIsReleasedFirst() throws Exception { + try (AutoCloseableResourcesFirst af = new AutoCloseableResourcesFirst(); AutoCloseableResourcesSecond as = new AutoCloseableResourcesSecond()) { + af.doSomething(); + as.doSomething(); + } + Assert.assertTrue(resource1Date.after(resource2Date)); + } + + class AutoCloseableResourcesFirst implements AutoCloseable { + public AutoCloseableResourcesFirst() { + System.out.println("Constructor -> AutoCloseableResources_First"); + } + + public void doSomething() { + System.out.println("Something -> AutoCloseableResources_First"); + } + + @Override + public void close() throws Exception { + System.out.println("Closed AutoCloseableResources_First"); + resource1Date = new Date(); + } + } + + class AutoCloseableResourcesSecond implements AutoCloseable { + public AutoCloseableResourcesSecond() { + System.out.println("Constructor -> AutoCloseableResources_Second"); + } + + public void doSomething() { + System.out.println("Something -> AutoCloseableResources_Second"); + } + + @Override + public void close() throws Exception { + System.out.println("Closed AutoCloseableResources_Second"); + resource2Date = new Date(); + Thread.sleep(10000); + } + } + +} diff --git a/core-java/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeTest.java b/core-java/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeTest.java new file mode 100644 index 0000000000..164a571817 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/base64/ApacheCommonsEncodeDecodeTest.java @@ -0,0 +1,56 @@ +package com.baeldung.java8.base64; + +import org.apache.commons.codec.binary.Base64; +import org.junit.Test; + +import java.io.UnsupportedEncodingException; + +import static org.junit.Assert.*; + +public class ApacheCommonsEncodeDecodeTest { + + // tests + + @Test + public void whenStringIsEncoded() throws UnsupportedEncodingException { + final String originalInput = "test input"; + final Base64 base64 = new Base64(); + final String encodedString = new String(base64.encode(originalInput.getBytes())); + + assertNotNull(encodedString); + assertNotEquals(originalInput, encodedString); + } + + @Test + public void whenStringIsEncoded_thenStringCanBeDecoded() throws UnsupportedEncodingException { + final String originalInput = "test input"; + final Base64 base64 = new Base64(); + final String encodedString = new String(base64.encode(originalInput.getBytes())); + + final String decodedString = new String(base64.decode(encodedString.getBytes())); + + assertNotNull(decodedString); + assertEquals(originalInput, decodedString); + } + + @Test + public void whenStringIsEncodedUsingStaticMethod() throws UnsupportedEncodingException { + final String originalInput = "test input"; + final String encodedString = new String(Base64.encodeBase64(originalInput.getBytes())); + + assertNotNull(encodedString); + assertNotEquals(originalInput, encodedString); + } + + @Test + public void whenStringIsEncodedUsingStaticMethod_thenStringCanBeDecodedUsingStaticMethod() throws UnsupportedEncodingException { + final String originalInput = "test input"; + final String encodedString = new String(Base64.encodeBase64(originalInput.getBytes())); + + final String decodedString = new String(Base64.decodeBase64(encodedString.getBytes())); + + assertNotNull(decodedString); + assertEquals(originalInput, decodedString); + } + +} diff --git a/core-java/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeTest.java b/core-java/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeTest.java new file mode 100644 index 0000000000..18dccf71ba --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/base64/Java8EncodeDecodeTest.java @@ -0,0 +1,109 @@ +package com.baeldung.java8.base64; + +import org.junit.Test; + +import java.io.UnsupportedEncodingException; +import java.util.Base64; +import java.util.UUID; + +import static org.junit.Assert.*; + +public class Java8EncodeDecodeTest { + + // tests + + @Test + public void whenStringIsEncoded_thenOk() throws UnsupportedEncodingException { + final String originalInput = "test input"; + final String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes()); + + assertNotNull(encodedString); + assertNotEquals(originalInput, encodedString); + } + + @Test + public void whenStringIsEncoded_thenStringCanBeDecoded() throws UnsupportedEncodingException { + final String originalInput = "test input"; + final String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes()); + + final byte[] decodedBytes = Base64.getDecoder().decode(encodedString); + final String decodedString = new String(decodedBytes); + + assertNotNull(decodedString); + assertEquals(originalInput, decodedString); + } + + @Test + public void whenStringIsEncodedWithoutPadding_thenOk() throws UnsupportedEncodingException { + final String originalInput = "test input"; + final String encodedString = Base64.getEncoder().withoutPadding().encodeToString(originalInput.getBytes()); + + assertNotNull(encodedString); + assertNotEquals(originalInput, encodedString); + } + + @Test + public void whenStringIsEncodedWithoutPadding_thenStringCanBeDecoded() throws UnsupportedEncodingException { + final String originalInput = "test input"; + final String encodedString = Base64.getEncoder().withoutPadding().encodeToString(originalInput.getBytes()); + + final byte[] decodedBytes = Base64.getDecoder().decode(encodedString); + final String decodedString = new String(decodedBytes); + + assertNotNull(decodedString); + assertEquals(originalInput, decodedString); + } + + @Test + public void whenUrlIsEncoded_thenOk() throws UnsupportedEncodingException { + final String originalUrl = "https://www.google.co.nz/?gfe_rd=cr&ei=dzbFVf&gws_rd=ssl#q=java"; + final String encodedUrl = Base64.getUrlEncoder().encodeToString(originalUrl.getBytes()); + assertNotNull(encodedUrl); + assertNotEquals(originalUrl, encodedUrl); + } + + @Test + public void whenUrlIsEncoded_thenURLCanBeDecoded() throws UnsupportedEncodingException { + final String originalUrl = "https://www.google.co.nz/?gfe_rd=cr&ei=dzbFVf&gws_rd=ssl#q=java"; + final String encodedUrl = Base64.getUrlEncoder().encodeToString(originalUrl.getBytes()); + + final byte[] decodedBytes = Base64.getUrlDecoder().decode(encodedUrl.getBytes()); + final String decodedUrl = new String(decodedBytes); + + assertNotNull(decodedUrl); + assertEquals(originalUrl, decodedUrl); + } + + @Test + public void whenMimeIsEncoded_thenOk() throws UnsupportedEncodingException { + final StringBuilder buffer = getMimeBuffer(); + + final byte[] forEncode = buffer.toString().getBytes(); + final String encodedMime = Base64.getMimeEncoder().encodeToString(forEncode); + + assertNotNull(encodedMime); + } + + @Test + public void whenMimeIsEncoded_thenItCanBeDecoded() throws UnsupportedEncodingException { + final StringBuilder buffer = getMimeBuffer(); + + final byte[] forEncode = buffer.toString().getBytes(); + final String encodedMime = Base64.getMimeEncoder().encodeToString(forEncode); + + final byte[] decodedBytes = Base64.getMimeDecoder().decode(encodedMime); + final String decodedMime = new String(decodedBytes); + assertNotNull(decodedMime); + } + + // + + private static StringBuilder getMimeBuffer() { + final StringBuilder buffer = new StringBuilder(); + for (int count = 0; count < 10; ++count) { + buffer.append(UUID.randomUUID().toString()); + } + return buffer; + } + +} diff --git a/core-java/src/test/java/com/baeldung/java8/entity/Human.java b/core-java/src/test/java/com/baeldung/java8/entity/Human.java new file mode 100644 index 0000000000..cab8546129 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/java8/entity/Human.java @@ -0,0 +1,89 @@ +package com.baeldung.java8.entity; + +public class Human { + private String name; + private int age; + + public Human() { + super(); + } + + public Human(final String name, final int age) { + super(); + + this.name = name; + this.age = age; + } + + // API + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(final int age) { + this.age = age; + } + + // compare + + public static int compareByNameThenAge(final Human lhs, final Human rhs) { + if (lhs.name.equals(rhs.name)) { + return lhs.age - rhs.age; + } else { + return lhs.name.compareTo(rhs.name); + } + } + + // + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + age; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(final Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Human other = (Human) obj; + if (age != other.age) { + return false; + } + if (name == null) { + if (other.name != null) { + return false; + } + } else if (!name.equals(other.name)) { + return false; + } + return true; + } + + @Override + public String toString() { + final StringBuilder builder = new StringBuilder(); + builder.append("Human [name=").append(name).append(", age=").append(age).append("]"); + return builder.toString(); + } + +} diff --git a/core-java/src/test/java/com/baeldung/threadpool/CoreThreadPoolTest.java b/core-java/src/test/java/com/baeldung/threadpool/CoreThreadPoolTest.java new file mode 100644 index 0000000000..df336f4a93 --- /dev/null +++ b/core-java/src/test/java/com/baeldung/threadpool/CoreThreadPoolTest.java @@ -0,0 +1,146 @@ +package com.baeldung.threadpool; + +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicInteger; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class CoreThreadPoolTest { + + @Test(timeout = 1000) + public void whenCallingExecuteWithRunnable_thenRunnableIsExecuted() throws InterruptedException { + + CountDownLatch lock = new CountDownLatch(1); + + Executor executor = Executors.newSingleThreadExecutor(); + executor.execute(() -> { + System.out.println("Hello World"); + lock.countDown(); + }); + + lock.await(1000, TimeUnit.MILLISECONDS); + } + + @Test + public void whenUsingExecutorServiceAndFuture_thenCanWaitOnFutureResult() throws InterruptedException, ExecutionException { + + ExecutorService executorService = Executors.newFixedThreadPool(10); + Future future = executorService.submit(() -> "Hello World"); + String result = future.get(); + + assertEquals("Hello World", result); + + } + + @Test + public void whenUsingFixedThreadPool_thenCoreAndMaximumThreadSizeAreTheSame() { + + ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newFixedThreadPool(2); + executor.submit(() -> { + Thread.sleep(1000); + return null; + }); + executor.submit(() -> { + Thread.sleep(1000); + return null; + }); + executor.submit(() -> { + Thread.sleep(1000); + return null; + }); + + assertEquals(2, executor.getPoolSize()); + assertEquals(1, executor.getQueue().size()); + + } + + @Test + public void whenUsingCachedThreadPool_thenPoolSizeGrowsUnbounded() { + ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool(); + executor.submit(() -> { + Thread.sleep(1000); + return null; + }); + executor.submit(() -> { + Thread.sleep(1000); + return null; + }); + executor.submit(() -> { + Thread.sleep(1000); + return null; + }); + + assertEquals(3, executor.getPoolSize()); + assertEquals(0, executor.getQueue().size()); + + } + + @Test(timeout = 1000) + public void whenUsingSingleThreadPool_thenTasksExecuteSequentially() throws InterruptedException { + + CountDownLatch lock = new CountDownLatch(2); + AtomicInteger counter = new AtomicInteger(); + + ExecutorService executor = Executors.newSingleThreadExecutor(); + executor.submit(() -> { + counter.set(1); + lock.countDown(); + }); + executor.submit(() -> { + counter.compareAndSet(1, 2); + lock.countDown(); + }); + + lock.await(1000, TimeUnit.MILLISECONDS); + assertEquals(2, counter.get()); + + } + + @Test(timeout = 1000) + public void whenSchedulingTask_thenTaskExecutesWithinGivenPeriod() throws InterruptedException { + + CountDownLatch lock = new CountDownLatch(1); + + ScheduledExecutorService executor = Executors.newScheduledThreadPool(5); + executor.schedule(() -> { + System.out.println("Hello World"); + lock.countDown(); + }, 500, TimeUnit.MILLISECONDS); + + lock.await(1000, TimeUnit.MILLISECONDS); + + } + + @Test(timeout = 1000) + public void whenSchedulingTaskWithFixedPeriod_thenTaskExecutesMultipleTimes() throws InterruptedException { + + CountDownLatch lock = new CountDownLatch(3); + + ScheduledExecutorService executor = Executors.newScheduledThreadPool(5); + ScheduledFuture future = executor.scheduleAtFixedRate(() -> { + System.out.println("Hello World"); + lock.countDown(); + }, 500, 100, TimeUnit.MILLISECONDS); + + lock.await(); + future.cancel(true); + + } + + @Test + public void whenUsingForkJoinPool_thenSumOfTreeElementsIsCalculatedCorrectly() { + + TreeNode tree = new TreeNode(5, + new TreeNode(3), new TreeNode(2, + new TreeNode(2), new TreeNode(8))); + + ForkJoinPool forkJoinPool = ForkJoinPool.commonPool(); + int sum = forkJoinPool.invoke(new CountingTask(tree)); + + assertEquals(20, sum); + } + + +} diff --git a/core-java/src/test/java/com/baeldung/threadpool/GuavaThreadPoolTest.java b/core-java/src/test/java/com/baeldung/threadpool/GuavaThreadPoolTest.java new file mode 100644 index 0000000000..92e0f9a8cb --- /dev/null +++ b/core-java/src/test/java/com/baeldung/threadpool/GuavaThreadPoolTest.java @@ -0,0 +1,56 @@ +package com.baeldung.threadpool; + +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.stream.Collectors; + +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class GuavaThreadPoolTest { + + @Test + public void whenExecutingTaskWithDirectExecutor_thenTheTaskIsExecutedInTheCurrentThread() { + + Executor executor = MoreExecutors.directExecutor(); + + AtomicBoolean executed = new AtomicBoolean(); + + executor.execute(() -> { + try { + Thread.sleep(500); + } catch (InterruptedException e) { + e.printStackTrace(); + } + executed.set(true); + }); + + assertTrue(executed.get()); + } + + @Test + public void whenJoiningFuturesWithAllAsList_thenCombinedFutureCompletesAfterAllFuturesComplete() throws ExecutionException, InterruptedException { + + ExecutorService executorService = Executors.newCachedThreadPool(); + ListeningExecutorService listeningExecutorService = MoreExecutors.listeningDecorator(executorService); + + ListenableFuture future1 = listeningExecutorService.submit(() -> "Hello"); + ListenableFuture future2 = listeningExecutorService.submit(() -> "World"); + + String greeting = Futures.allAsList(future1, future2).get() + .stream() + .collect(Collectors.joining(" ")); + assertEquals("Hello World", greeting); + + } + +} diff --git a/core-java/src/test/java/com/baeldung/util/CurrentDateTimeTest.java b/core-java/src/test/java/com/baeldung/util/CurrentDateTimeTest.java new file mode 100644 index 0000000000..3384680d8e --- /dev/null +++ b/core-java/src/test/java/com/baeldung/util/CurrentDateTimeTest.java @@ -0,0 +1,41 @@ +package com.baeldung.util; + +import org.junit.Test; + +import java.time.*; +import java.time.temporal.ChronoField; + +import static org.junit.Assert.assertEquals; + +public class CurrentDateTimeTest { + + private static final Clock clock = Clock.fixed(Instant.parse("2016-10-09T15:10:30.00Z"), ZoneId.of("UTC")); + + @Test + public void shouldReturnCurrentDate() { + + final LocalDate now = LocalDate.now(clock); + + assertEquals(9, now.get(ChronoField.DAY_OF_MONTH)); + assertEquals(10, now.get(ChronoField.MONTH_OF_YEAR)); + assertEquals(2016, now.get(ChronoField.YEAR)); + } + + @Test + public void shouldReturnCurrentTime() { + + final LocalTime now = LocalTime.now(clock); + + assertEquals(15, now.get(ChronoField.HOUR_OF_DAY)); + assertEquals(10, now.get(ChronoField.MINUTE_OF_HOUR)); + assertEquals(30, now.get(ChronoField.SECOND_OF_MINUTE)); + } + + @Test + public void shouldReturnCurrentTimestamp() { + + final Instant now = Instant.now(clock); + + assertEquals(clock.instant().getEpochSecond(), now.getEpochSecond()); + } +}
    + + + + + Go back... +

    $iVaW_*XPbJP9N6HQf$YInsu68@T0 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

    $iVaW_*XPbJP9N6HQf$YInsu68@T0 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


    - × + × Success! It is working as we expected.

    UIA}2|bZ0%5O?g3I* zM-yRAcomyIa0>*Dow^prWp7Gt5C5c=0s2ek3dQt2N&+J^Ee%WBc0GoOKRjy?F*=Wy zobVUfHrWgAgC=|M49&(ZnMH-QDZMR_akOtOs+<>(Y#+O%&?q*+MOiL^D8bY3w9XwY z@=O+RMu9mf`0$}cIgl(lD=1{`X*(mNZOzrm7p|mDs`_ zLD~)h2_n>0w{5BQ$G_X=5JhkVrxInUn$o{gjA#gxxE`BOpiC`tUty0|#y?#i(|>+% ze}V_`&bvIxK4yQ%#@$8r4A-?s?^HkL0Av?6!ZnS61f+p&9+oHYl7SdZ6?SGuWzD7$ zpS7ZW$llF;3+|?9GEOr}2jU)#jvY}Puo$o4m%Z$jYz=?*Xct# zDXF1vI`(znlK8S~jTgvIxqTkrQC6D>A+H!LDGsUFk-Pl}D&2FK$~*p--ElDe(Wc&) zXM_yQ-_2?N1IXi#SJ!_*9{=HpB*t|90eK8`{snoY!2JPvOeKZ`k0kVTWpgv*P_c{8 za{&HSrdI+81KrAnGo>5@Q|It;eVlb|d42Kz1fm<@)05TX75NtH3rF&+2MIh6$?FV` zgS2=u(2O9evaa30XeRu^`8^NpT}$<(lKjx(S#1nj)uUNwS-qM~bGQd7(EdW0#L_UK zuBDPeJ1NT9X`!aqyt(Rk=P)t<*oAG@&2dZ&*W9>5ndW)h&(8*ej89h_8aL~m2soIv zm0tjTZv>TAjx1N&e4cnqdY0#i4yG1T8o;O(Qm4B!uHU#`CXxtY{* zIjg?@e}Q@YZ_n|6uAx;77!n|^Avz*BE@JYp59PU7bdL0MR$aKy^ZpOlW|0~Q z(hB5YEY*FY?b42iM|bnPQZ0TRa2j1THiFKYu5lTv|JtZIeGY?FVSE)%@iKu1g(B$+HJxSyrpPu36`R%x zo~dR%5u+3|ObfD((rCM;5!|HPehN-!HJ+n{S9(IF)xPS8LlRzauzy^kK}$!rxX`uW zF4*)1XzZgQ=uly~u<@F?It2$+4=^_dnS>5j?`D#3|FA*GRh{UBj?ogF#U3pZWi`DT zu6o?u)XT;||8{FKU`<@l1BEV5bYzrO!zAn~W(yV#hwTv-sodv|f>9XdN9Hx9)1_E$ zn_1aoUZ?K}ObCg3lV7OCnmqxZ(KLdwC{sm z0p@#E1_VLEh~`u&LwXxRD3TaS%v!T{>qP6ykSsP9O%>bGLC|Y8ax-%L8v@wC5hH6= zS8(pZg$m8hld#RZ_CAa5>+7hM9zAkI91hKc*sNDvJ4RcaHH#6*mmWRlBVyLKJm9m1 zH|ao|3|0vw6(r~tx*w{`D!F&Ah*?-P^2(HsvW2wsjKO0OTkU!&mJ+&kJ36X?oEl?v zj7f_KqQO1;APlSgSS>q+Qd}$Ht)O>w4@?hka|nRKr0C2ZUe05Br15gBLoz zh}_%d16{~o+QHtFet7x=vJ9$DRe+l)9GgiJfm*=$0n8`1q!&L7BJ{2E)(_Xkg4UFO ze-!-EC9djL**mL_5bjhs`vDzBhoc6=~!U z7O`)*K_5V`%)m?M8PE7S5e|JCcW#kbI>-mag*Sk*p`WvxvCR!WTE|S2bguq0>@%4b zJH}BxXK=Ht^V9A{vo8RKx4Y~LnZhi6bB~`8*zeRzggpZ%O>(hDvbI|qkb+gs+?SAzVXsh2x z!pE>d^YP2}H>)?Adk?C71z z*KLu!Lr?jUs1nuRRwd-4IutUZ&kIZXVMxzHIprg5P+Ha6qWb%(HoA8ZP%t9CMc_s7 zqv)gjP&;$ZLu!{v*cBk9sGbj_aH@7=jA*P~8aMFmhl?PKNI`_Ok422A>JP(c3lfHn z&_TgR369U08{O)fU>G{04M2=#80)n`0i?<^F7cHQes(MO2jVHi3)4g{xUvT}_Y~~r z@l@=_*XrF-q~ht_k)-M<+yZTi>eolvG`#i#Hf+l3A5`;<>mP@(8Kj07u+Q}8ykZ7+ zt!4{OM_P+|hq&lgMScTYq-a9bRk6eE$lGG$DcSn|u+P6%vZb$8xFwIJbcNPYvL)=P z-7VRq)jj%a3whyc_MB*P%%UlF)gn+h$Ce26)d|Mgo&5*uqe! z8cr3>6r57clK$=05y>TK7}FTc4xeLM)?vjx(^tkGQ$*50o{zXjz%gdfR$Y8zcJV0VjTt=ZqIpetZ+o-(B%57=CWdAPa%3m7JMI=Q4UM5 zl}@a?Kb)z!u{LFqvt{c+TU;~kXd%at#n!W{2adKV%}r`TSt^G+rd5-oop)!UnCl#>4#)_?Y8F|IMcOPAAI5eoiJ&phrZ=wIRKncrnX7`y@Ri0 z9`g#G|HV5zWI$3tglMTEBotC~NX#r2OuYzH8xm^zC?*MOM9vI%ramXI#?B!hhkzvj z(<~fICe0p>!AjX2{MJ!1j6{^lWEFneFo1kUGs~UM)&N|=Cc@(N7{QDPM3X5`Ps|ql zl9TU_IMmfJ#x=UTJA)WNt6(;Ys!et?D^#n1GzzSc6g`ymt_cV70X@~ZGSqY;x$;-? zzRKhRP>|rje&9ry^u!!#eMtv-p6I5w@^p6tj z#1rUXrr);Cbf{aluyrRND%mHu6&8;k3vNVOdX-Hai8xY9w^+~Fh>af9pOzX{>sdE!M95 zhJJd#>r8!J1xV{C^1^$?fNR+BtjzAo5J#NXiNI_U+xr5uC-pY7Dr%;;iSx9nRj#L}>_#VX;VVZm~XH6Ri^O zfhMcuR5INh|D8^Z)!%jzfH;X*bc95mPedul^qrGDhW@9=v*IM$M)IM^IhqR8VY7T# z>lJ(KsOes-Rv2fWnsQ(}b~c* z3luGl&e>LU6hibC7beG8Ba}4uO?McgK$eVY7KPL~UZoK_ODd`iKIlci_o$zTg}Y3( zB~%na2M#=KwIxmfLs7J8x+cvqwQQ*5p?ShzdCuXd9 zBU`kLI<TL#fJiExF)TITb_Uyo!2-P9kbt~l=6K$msT!$*x+GdHi;+A)0B-10%9#A57u*1W)C zZ?_XvL_TN{3bY08!6}ZIT~P6fgtBeEbAvt`TPC$$S6fYCaLQZ;m-xoL#K0!RxV(iP zBENZlVxBez<#Bc2k}kS+oK@##x3jD`E)kWGOt~GSMV34v60}$3mM&GBXtki9bV|W! zFp<~^&Y~kfVIjc-@PVnS*#-HFStm_g{h2OFu9D`YSap*PEJv0>Hb+$r;&CB_9H@KX|ug2j&#;0w8}HZ zuA`0mC&zRyQ#LL3;v^gX=K+5f7Zsb6XqCp^nC>+`qzAqE0l~uF33p^6r=_)_+pNV8 z?fQ2VwscZgfp+iCRV+lz<*3ew5YsX8efX29IU?s3jQIJ z<&S3dFEvzVytXaEAL5a1%V#x>DhdltzZMEP>fDBfqCQADkAN>Z_|AR}lu5iXYO=QU zWjlk;lj1KD1nV8xD^c`GD^)??q$8cNvDDj)#|*~W+uOxQ+;0o=NpcBtaa9!C(Sfb> zK=i1BV7K-_F_H1d(4}lWVkBKLN!6i|kz6$fL&Iv_{*laD24pDV<9C~EDz2|-_EN+7HSfe}&F0$>00-B70eOv?! zJMA6092o?*QW0}MxEJB|noD7^@)FGFa0e&@R|A0|`%$4LA>yg#?S^zO-)s}-ed036 zcs1ss*5@)qpkm89!R9MqOjB%6NH!gRSlcuTfeC5>Rk-ItQP$2O$4zE~o*xJ66_Co} za@+E#pdo;+-M^GCVkDeTIao)rI>mC7KD-XZ)>Ka~@4+^p9eB2mE>f;k`M8_OZSDF>Dra$Q=KorAqAJH$e;GEt-+DGX_Gj7AsfWb}jW< z8xY3Tx%u)V!v_y79>P-AKC2f2ySpIt^ z0sB9*s{X^Fao9~O#wmn?mI##IQ@;% zbU|O=;CXdSe|!5ui|Jga1Y(d7;`VqS?+Dv!-T>+=LoMU2*QSxl!{8+C<~OdsmY=IU z7f)&r(^u6De)Lixc!A$XQXEV;_<;38(WwGU@=*+s=iw|)KU>o#-kom-3Se+ z$IRc_evlxxN;ZuidlS@!#!FdFl#caLNJCP#XbfPdOU5!(uC2L=ho*f3HY#skaHKRA zN7noVHyAp(N=;gch*hD|;aD5J6$#w8ccJzq`W{w{S_IZu(d zIC}{;>I2F}Rp%W`-doG-l|GcENIVxD#lfH|Q2r?BVkqR=lMf$ChCsqd8Wd*5vZnUs zMZiiMsazWQ*y@!Y(T9U%l5_35Xc#mTc)dwwb!|`Sxr$Jt;rO^mD_1tLgHo2!K0M9+ z(C6K955B=Z@LP^&un%+s?thW?j?tBE>$-4N#kOtRwr$(2Se1%1W81dvq+;84#j2!Y z+_~0X>wM=st=+ZvZRgJ%ZT=m7^j8nwpDSL~(mb|jt&Wqc=3U4yZIf52uh3qupFirG zp0M=KzVu2g?-N`i_l)Pp_74gG;q5kI&K+46;=?_cSzoJi+ z;<$AGA0(18xrFY@-)$Q>qLGF?fORyovuA|$tH;^Al&91h`D+_gIgdqJvf?EgSfdFqLGSqNQ5w+Yc%Qckc8{Ba? z-k1$V@NTwfVT+x(#i&9KQdinsw)BUISx3H;@oQ1SWvPgBD@IcPUuKfj{MHnW*IP<*7OUN4YzdPtc_4mc(Cu$P2R9)dZDTXZbUoKVIKA zzIjcTFnrwxN$rQjS~g8(HaDFZOHFXp^AD;FKy@NM5aX=Lg|JXt<18T#iv{X%eo{Yp?5zAG zen|%)s=+%RXm*5SaqGk|L1&NEC$iiH4`L6xC_J@H(3 z<)!ExoM9nAh)3%g#R9+dkbBSMID1`nDIA_LaOU-CnYX?+)EZ%m%xvV&KQV2%_N7CpJj()|vzTZ+(RaqdyfK>dQ zW+9Pr_PO9aHXfM_mqL4BVw9!AbEFYgSA2emCpDYcStT@`did_3d&z_NNOSV%|tX%h^Rzl9{eaAnkw5q&+NrSp5TuK231Mf8WV|V1D(AShZqyQq8i&@9#B(T zXb5vFT!`i!)dAf+sEu?6Jtj%Lv$y=Y+q4z6>bO`Zg5F%2H$z_utGz(2zlsTVVHgG{ zZ$&qH*UOgPU|v;3&N|u1VRDv^1;yMR!YJgAaw^Pkpw&pNyj%)rz=CIo!Gr3T^r9l(t`)naN{y*ESt0=MKsMLrj}(XC-FN`Ccecj!Va88*Z;)3ipBYU>kHR;`^eizJipe zVI^?SVPLWK^|bF>i*^-u52I+~2X}m)!mAq|eI?7Cb@EARyA(%FhW0d(M=rm30|Z2w zYICRP5CUyR1@`Q&$mPVm!@|sBR{|q!lW9b=oqk>P6F-%%y=affWHt6P4+9&Wgs);X zS93X+i)FcX#*_)BU5+xKOo1ZNs6DWfg_JwDlS#~=G)6V_(lY8p_PYXed+cu6oiRI} zo+O>wf)javZs_mI;$KOJPCyF|-`3)u0&h7^2`{?>EZNvBB!XW(qo0S7cg^R^T-e7k z%DC-abGljbx##MvTRR>6q@M3XX2g7ryi5R0LEks>hW9^Did&hox()i0jMfU(mvl2r zZLoO7VQ-`k2P@1TQJ9dbZQSd?zMbv|O=F}!v}WK_WC`>4ll3U=w)%a;_m;y%9k}AB zl~ejzcWN~6BJBTr5GBl67d~s3#TQYgP;gpbC)miBa6ER94fRw*RC;*-_|H zrK(L33A6$5)T7?S!}ahL4!mpTkK4|9+!P>@`g$C!8w}!{L?LxmJ}ies#`&ahmyB#e zaNQ;__GQ#K;p>`R+3EcbA}g)eMyp2Pk|2`Yl00(rnKD8LnrY8$0iq zg_4)>R)P#9@64CaqtUI)S$8aW6!MF<4lIcTO2h9S`Hij>O3ySx)Gg`M9G$Rtp|G&v zb<-I}vK~fvbFQm=!;*?KI$86iCq0eH`QLx|eegrxS-sWszW!OTywD8q;Q_;q>OUGt zu>Ny${43;;{_#|GvNHRx@ROvjW2@qd`SG^ikexl>AOnG?&W&`Od*)!4p}zUazqhcJ zsn*09q{-r9Rb6+z=pqzT1QvlGXN!>>IqFvc6m2~nJ^gbKcGw=-(16Z@AL-7akQm6q z6%QRv3VAZW_x8uH&G(*d_wKs_o2v;B%fZx0eJl~?`wS20 zFqn1+ptT?jzHwdjpci@un+wT+F;B!W>$zwNK<{|wniGE!aY!8Q`|)Be4ubXZFgYBE zhiE^Fhi1RN?Tq2hXE+jD-f*}t>INo~xm(LCSz)L9UWDn`1RVLR9@JQnW>JmVaz#9# z>PhV}6vzo$-#s=UZRc4`j7Zjv0B0PBu|KR0_OpL=k{X0oT)zmLaRqToWYv7j={7)! zJR6-Ayt?MEpE77nX@^YG`iP&K64BKS%ZMLR?Kd_c(pxs2lUli^N=j$fD0_@@H)LtO=O-AhHZu35d z&(K)m*DxYYnZ_m#$6e8uMD6y=RLFWrZosQfZIQq84B@0VDieNb?Or=-NL5VQTY}OW>=lJ%6Tp z4Q#CM7ACks+7{{YSqZiGeXv{0&j=ghNM(3>q{~{7CNa9=_YB^_rp+Q=&*p>DO@+d&#F^Py3f^ zsHn4KkmeW7BI1m?w=e?W<$pT0s>ze3L7{)zkmvjCE%V7o;?s8o1Rp|0Ur`pH{P#z! zEY1-8%#dgUMgWWl5{4sY$~CvopwufM=7vY;4MOX?Nx*psnS^|}EZ>L#kw|hIg44uL}k=GY`L<_<}aVFQNr$XA0#Se2O{Q9j`a9^Cqu1*9kO?H@9xi51lBH z7I~pVQ3Imc*w}sbsud)M8YOTN@w)lrYKU8Qq z?-JTX+h=?3P|M$JGds2fyOVi@J(#R@lu|3L%20he%Lyvy}fz5 zhu`_cL%pP$sAgNfqFh%c)Y}O_Wrf3Zfs@YGZV%q{$arBQph$ANwl8&$OKuL9YYVagtDA84%}Q$L^X7$-)6k&>?Z-^sThi zAHNArQ-@za3tiMd>J|p6=I|k%s!WmAN?A_ag9H_;~dyoq9_7;)tZ0oRk{E3lLMw=5ukL>${DEK`^y(EO3g|EMG2L!X1&oB zF}zhZJRDY0yK!N2FPd=ii?w6fHoz@0&fcnoJpEBbR+f}Jy>xM*3RCKj1!Ol{MxRu0 zvV1sOZZDmtx~>kp{`7Wo0CguTB-KrE5b2YH0s?RRoU=!PIB&3lKAg473N|lTfL8~i z0}6>60{n9$Nak}B&L0l3Mt(v@nC6h-THb18V^y-N9& zO+1?(3E5k&700pnzkF}hoh`cUNQ(WhL1btS49EM7b{ z)@FGpNS&(~@**5I^$bX-Xp)!wQ76jQg;u5L zRd`rBrlitbPo}e)SY_K-g1SI<5rabJaQz{IgjvhPDc}Y*Tsx`X0iq4?d&H`SY^UA{D=N9_QFiujO>_2*G?-(>;`hQ^9oZ`kQJ1#*BO}=D05?gOL734U4O#V%?ex3M z>-g25Y1@A^@1$l2Mk+vdjLSdj_nH2muI^tqwn}{)2%e(8+t(Y7)+fd{qcSSe=|G0D z3(|;{E=tQp0Or^mkzU(KQ)*)kY>~|!hFZAyk5z{;O76sR4uV5QGzEFMpARB^{e2_$ zHK#XiDGOl^@({S(oiE)lpSqo=-XH%k`T$}4q%t(j?1I(6jLaO*{L>7R8Qqk2Omb9m zd}L(AODTj!f8_YSF9M$d^$vz*M~vhP^oEC+e^5hT5ZadqDo}Xp(qXG$V&T3_6-r^1 z89#b3YJFwO`$KS#nTkE$EmcRn{ytq)bJan+4McP0)Qr9jWk-mwrL7S*)W(>|KiSZ( z_UO>&J@f`)>B~F_Qq;Ud-Bkye@{Hk0VDafvsDEN@_-{D^_Wid;0=g?hRJ_QsvNQE| zZoc?)k7UK1QSsqU7b_pI)Tdp0_-A+#*~|gwQ{8d$7%%jQRsXf ziK+JzRA)RCe%12KjOlT|W5bJbC?k*UKIyV4Mq+|W&m;-VA{Lg7QkhKwn3$XNa!4fo z<8K+rqFCPYT~_rdo2;Gz(^dyJS2^0YIb~+52>q*Y=$xL$zs9mg)S`sK%p=S*W3U2j zO&W8DF(~db<+enk(uRPzuH??Gcbwb@Mh7>h~pVhpHg{gzXd%Mus~D%rY&e!;-_6SqpfXl(18zI z*knCdn)r=-Vy4^I7fYUCOAk8-UPanwSk=`X~z|!0~xmh^Al>mLK&M@#AlTHZ*aRa z1P)dCRCheOc6037OFI-8G##l9S(5tB`aTlVSD2>YUY5Xv@ z`?q{`l8od?ZDhK2qi=H0!5`yCvhuO8u>ihQ|-!GVX1cm}Xgg_C5U;_wPexVFNqPWyaSY~DNqx99yl&hNeB|Czw zX)H#Ny4c??8k0}1N*{1jxUi^=y|kx}ADZwlpJSTION$jXp^B@Sm51lEtIK6v_BML3 zof$YuL0;ll=hUD0Ax@WjQ5{6pYYqEKAWeO|5YT(r?nNQOU#vv(ih2wCteP#kQzLr+ zSU0xVhg@Z21CVrAkzw1<;&+xGQ1y6LOz%{>@ro31~?b+n+p%2*ov z-r!V9q*w)Oq;p_lS@CV(+U+%+&C?{!s9v7qeI|;e-H~#bGM(nWj-JJZjec^zf=SP! zE04@|?_~_HnDkes)stCFA?&*WXTPG~5>sSWb1&@4JRhwWx|+r25a*;mBrIK{3zI$T z52KOeqR_mUeEVN}!w*PXf$b^?rn-Gk&>LC;gZRAa`%OM?S;Vw5gnm&W$nmwi{Mpi8ZNFF7Xd=$ z+NbSDl1w|w!D23XqIQ)1f?!ge`R1M@`QbXHM(7o(!`SF`@@m~gL*T1&o&D%rCSd)E zWKlDp{n4!Pzn>4}lRL~}9)7~+lt>jW>prgCM?&UwudFx^s-}-ydYmO-oe>=y<)a*} z3B7y;vrrA7to`8l<0cSSyiqj(JDq}m^!WS_@D3n@{jY%Xhge!2@f{T0h{T>M(Mg67 z(%SaN$V#e?JsDBn?wlXW=@zmUKe#^~j+S}6Y+W+vhi>tV?V-v!K?4 z-feA*p0}xNy{v-U=^o#AI6`;{ad|*&TuL2@i3WhmL}92qQWy~#JP^{55)#Wj5Ym`4 z$g32VgviMoPZ-2LWG3`8KncJEfb8e&2kj>np%taxMND^~5LH$J!&XQ2jt~O?ttT}t zRtz7bcY_01k)idOJNx*+)>F+i6|YH>(Ov^Wp!FL>h9kd##God|DJ%AJAg?XtTdC2U zx+ssIwx`C=MA)oe}&>(a7n^b&z&cmlUUXr&Z>7anM5E3SU z(}3;D9gbAa6Era&4d+8!O4sl1>mcKF8=3CdgVdQuA1H5Q2xW1g8m3x3(0F^b(h)#) z3pQh?4K!2sX~Z*vT4&`XYCg)J%h#kohL?zb7E2#AUNka3Pt#xJ)1yf`NeZgI9;9}B zx_pl6=)*BXCkqRsk@PuK`~FBngJF79Q>fQaY4AOeA-c`_#JY`e4~An#eL1L$#I^_Q z`H*QpW!TlqK?45~)JH!}qOaPy&3aLHE#OKY^I>0)e*HwG#Cy0en@yJ}t~L8iV|++# zo;m9U`HM_ZX6(#fJGsrQ3uk3|vStl>L!Z1eC6n&%?|3p*<>MZ2mHKZ7TV-I^>bLJ2OYy{Ru|F#)|)j1;>@_$ z;e)+xTcFfGzm@mrHrS{qPnj$2OXZOP_ouQ|Pm=z&Wv0qo7m>nhPtBN&FR9X=ntjSr zY08|5gleV z?H&0OrSapENCEjhsD!>P1T5_)B!oQ}{x$N2-Y&HoR@Nq3v>@kN>_aQO=d zp*ROP{Bg9X!pxWeJjptGlKjj*T((GP4V3-0NPE#j0-S_;%xt|J%e@72#6@q5tHf94 zv~L$x1kocSUu_Wb5G1y|fOcarfQlsrc0qQB$XNF+IN^53)(Iu-q|xU0;9}Xv9*UXy zYoza6sdB>YHJNA770Y6soi5)X;2E!efp1i^ippOnrIaK8hTwH9YbkTm?GUflD>>U{E&5m2CRmDS*LjmK}Tm=Ye;p&+Fhx(rACFEJK>Eg(L8trv0sujrUe(l}_O4 z(Za!w*R5@Tp&7hBEAIHwo3Meucl8dGv_~U~gvBBP&jn-M1=j2Z#p`WldplE3vSkmZ z>nRle>fQKM-R`#P{ZGFh^5taEWMC;Z|Bt$BhJW84{-M^9Gjp=|+ty7@p+o+Q5+WbS z%M988K`mpQVbl$IBPKSA@n>zxbBh$5)`Lruar&^`ib`2ppux--r+br8IMAHiQU2%S z?e|ZNeT1R{17@HB%Oa3DGk8N+K`*`9!XIfZ zXIv==7x+euENwnk^`aUu@|CutU&U04ysU9=+GsBzcCGt))RS+MyyV!qtDtUjRJ1i| zHc;D`wU!p-Mc*Nz zRWko2`#ZXFh}#6d7kuDc?Eg-x`VSzgKi=Hm5Y>On7&2c`G*I8=d2c+1_670bWgVqI zqu_>+@A!R&z!oMPh{Yf!!i4rPRzMCkaK!~J4W}-wZa-Ejx8!J4CV)W)O#=0oUQ{c( zq)|If2ebASq-k=U#zTM#D#c`&%KCQYj{op7r8_U%7$n0CFw2Z{R3GBP0uH)j zky4CCQe)#{;}VU=QWKeq1pC;*xO+HeMZ@54p>8Os>L2D_8WI2?Sk?C|A zIamu|I$v~v=EEMk0RZMhEj>{5u#1tFVv%D`y_EL!gRUq$ivHY zoB6a^VZ@m!YR5^BeZ zs2*HHJTqXYMBO*WWmyxXw~ic7S>8#diFodg=aGECd=t{Usy=;vO~k1E8EI^-M|Jj4Djn(;>l>TUbUig2c_nU#gu@dQbDEd%zRN< zRlR{*YNkkGg~G>KF&`vGJnJeJNMeJqU_miAQUxVhSSf3V0oyOnQMjzb0C(0>nP^d0 zhS@*x&+9jNlXwMnCFRhOOzomV+GbH^MNYvqIa=2?3T!7=9?agbZ61NxAC8PW3M6xS zstB@Xu`@RxNFBxSq*wR}T^yHc{v%OqqZg(ujpUF{W6Y-jvT58)v_UN4n}4lak@&e1 z@LG(U$M;(*u=Hd zZhtj())KI=E_aHXSWA>w+s)a~C6J~yU9mfQ4#+0JdkT%S;9n0h1CB#B5mA`LX)4(wl3 z69)`e@cQvAouZ6l)HxnN1(Dolqqb~xNyqmp{PNJdI>wKau1BV=TN&5&gJ+J|oY*6J zEQOeK!L(b5pyv+fKkb(aH;#`c5*fb1huc%Z?rULe&E~fntc-P)RK7q9x7(q0aVu! z)9bxM$G9wi(QorVGdusSsoCZ)o3>bJsHSJG=IW6pyMP=bPgPx^Z;>Wqp^Qu$Uc78Z zq>!rSL%C_Xt159UVVToQmTeD{o#wN6hJLptbn(d7X?^B_!qz_C$L+ctu^uP{REDHj zLetpro@?1-)(l(6nZY%z{K$-I0F-F;W7>EC*m%dWv-|nEr?=%WG>16>qdzd^e&m8e zCl0)r?m4Fq(53hB7F~nr^(iC{)g<pO&A3<0R^Jmt&xF$#Z|z!% zzeQw2DjI}8qJ?3WP~4!@_4Co;cdWm@gFYjw-63tS$*^*_?Y{{X$>Wfb}ZQG=(&ay29TuG}SU3nhg?$n6>J zBgIj?Ns&3K0o=X4bMbTS*BU3_C>VeyAn{gYMGDp2ae5=;c9VxCt>!95;gj0ArRHpH zo{>s_GQbXxX#yzbsV4E)0^u@+t0cBFgaaqCK|A9MX`8SY)l1Q^2?|i_Bv{1Vc5Op} z-fj>pK?$xraeB%8jnAN^!TnI_mBGidZl*upZQoqfr2eW$jH`*l%9_OfrC05C56@^B z+c`QS79zYnf`Z?LEGCGe&qVljz;`F;u2j!66q(s|_okwB{y<2?AM|Z0=1WKpRMNpm zhLEH~in~|*zCHu=BOJJu#Gw9@PxGePS7}bly9kPDAuX_P zpU?&lw-srUCynrK328@Y8Q93#)UXMcBz~z~Ldh_b7X|2>P7tv;Wz1D<4EdBH*nRSn zIJJYVtNdwr^JkURImSJs1I+XF|6Ba)??VJW|0n*HrLG5@repfZub7Hx<{Hk5=c2a< zdmDlz8pCM{P-<#_X;!p6mFNgk(Huz`1-EP3`YmxcMX&?rM#||nbTbCy8z}Gt#v;=S zuS*eU+r5EIlBL#!KHD9*8|un4`(cyM!q@A0^WhV~Q9(>wOn-2g8k#zsnih==ErXh0 z>BfqLH#+V;!6MQBVY41^aSG4$hq^ZY3{dpY-m#?QZLqh+u4|0bi<+dX8Bb&*pONbyOpIeUF4N_fGcl*f$!Iq1t#txx z-`2S5P8&_6HQ}N&!HC+^?i(SH&t!^FPm**(w*xx!h*_@5xw#iwaY(yH!+@!%4+g=b zU(2%5T*B}f^t6**RLN9UGp8J(g}PjRnj-=`FXc!IFI&c{K{IndeDrS=Y4`5AJUAN8 zw1p}1)`pL1JCPAaS2x?;!Cr8QT$*=Gg}vM>;zs#!r+D5Z(>Z9F9_3UUTYCbW@5asW z2VXAX0R;gTeHpH09G* zb=6N34-+%!krmvJgybglTG?63U_gI57YR$tr`?y|CdaK2h8OfXJBJ#jHnWiAC~PBL zmpEySGd6VgkIHW46a99pCX8CZwxg+-BhCp5L|u|ZgRrVZ9Ho_4Kk=Dg-3E<5zd|os zSt(q2512S$KZGvgGI^P`@ww9zcxKu58d{0{){O37%(sX#bKf1*;ah>1kGFq42A%1m zO&1!8RhBMsYOD- zvE}{T?3EA?L5R!Zlmwv|nw>YOuwmSLRxTywGs$*tQDk<_u{NR9al^1L**?mg$B z3ZHd4U!l62rgiUyiik9E7Y9j?FV7rW0!2!*8W_T!v^ttYW6jmYF-b3wC z4U(Ftqf$}t`&1~Q;>B|#QAE(bOUBr4fybt!*Px>lEf&RK4X+>ymF_b-gKb@){yneALDtZ(V&w1SU>}5`CC5a;Acf9}pa$r0nyApp zq5S~vSw*6N6rSo|8xFy-w2yW$cdM!&L|k>hw?jl9L*)z%;5$MNJX&v~XRB)-X4@R@ zqK;->!Zrl!*yh^g?66nFWlSM1UdVSb`eJM=Wd7C4xUjnnxdWTPrGK2K{|6Z1e+zGa zV}u$y&MH8R&@JAaqND^Bnv$vv8qO~LlNAiAEz+P9O*5*M6|MURtYegS%>F;q4-!Ko;;MO>G4moD;e;Gc*{p!#;dV@Z^j(f$~ zTQ>>0G18RSC7PBxXajwb_kT3YiGc+Xr zC|>}eqF@7{17?LYaN`}Z`Izzhm9Sz8WQGzjV{dT# zn5T$|_r+XBJP;7ZTS;xNNJb2QFEuh&{#t6xRs@U~FpG9gQwzbA|ccQtHEx%3G8A+7D7?M zcNi~q&)b#TCOcRD;cBq+#Fd0${sN_M!imyWI2f)v`I{EE;L|OWSuMhA3&qwTg;~xO5B)M()Wpy@&;@N%=tcp6f~4Hvf-*k z^OQhO z(?-927XPk zAPm(`(wa7HX`x?QlO%XC!HO)tuwm_yFdB!1O3E}M*s zki_;>`0f|3ULxN^WV*>%aSMFez%(=KgoBPQ4kRViGd&w3K0eV6D>4ngVJ7*&a$ec& zV=Xo@vX0AlK9*-M`_r@0`(6|^z=9S9vs%inJ|pUMIwH8|{f(GiDhqvK{>=tbOgYE* zs8J(I0}p%5B?dk=*d(w>^uV4U21MFromIi#I1&^%txA z+af(+YU8<7d0|u;DxQ>Os*}6fwc2B%E?E6TjMwto3}Zwpe+CDr z0^~NhbiWaM{PpDRnar^K#NKhfOsHIq7L4)4tf9EJ@7`fsoiDXus_V8!?T#jAXi^|z z+lGr$>H>4uirXhra!W*gG{D9^>`<|C-KIAM9e%I8b;x(g)Y?%}tEGrxz~wL3Zl6KE zn}cM{qF3U7H4}YyJn(Qlh!DCb(LVJabo-d*^#((~uMz(X+=oPfs1*E2KvRS{o!Ci4 zYbXe6FtgCqHeGy}zR{d<;s@&_<}w(D+|1iZGyHwqO`m3#9R|yqST(~=E0 zegluhdyW+~IhIuIX(WStw9oQ*wXRq6Ku&atq)gxuyA$Frnn`QXH`s~}JA=H|;nNJi zntkdO)XUU9fb3MnEku#WmzY#4-hqDMigOGl142Wg2MaDFUuDoYFeZ|F6dWWaGV>E1 z&Vl$Fy*!2~_&(C5hsNjv-R;q`JBBW0npD}CyQ>jd?XT4Om$xx0$Pb)w>&1>h(U&dp zENQuu)OTqQWreMeKN}u1R+FGhV8bK!zp=ymV;=TLGWjoX_K!b*gR>p-Kz?7QYrr%+ z{AXpQ0A)dFSgWu(LBwDXu$XtJ%mFDM(J;Mhf>%jVq%cYEPXxg$JZac@3HRpq=0}Y$ zzu#`43`4VjWdHDiL?Hgs8-w}8L=4K*zCzR(t&k1bD`{5DxR^>;0N%(jZXtKPF>*Mr zI;D^zZ5}@(Cztp2%)1x^!6~`UB$b;=$t>AQEv;TsHhVcqEupwWVDxD5jG>J%^kj3< zg!=>~|D|4^^1Gew((JZUP{YT2h%}xZdQqz;WaM$^`uH*ZS9+RQoS@)@|MR zvqn`YB<)JF@aH<}TyjE7xy97{xKzw#vst){r3Ll?rU8hz&(C`;;>M!eiYOT?$3PWv zn0qtW8HD4e`PD?1^JNx`MRCJ+x9>Z&A!G>GGuOQ%tn>Miq!aEA=ZIsdNsvjR$pl1n zEdsOKSZu8b04H3QX}xjm+PDKY$Kh=SU65lf_yn<7CAIpK7ZMsddM?xhW21Qf2~K)`YlIg+IUj*&VsJ!3s&0oR`^ZFhxZgciSw0_=eM+}nWwM*nC-Z>NO+16lxhuC+Zs5x%KH!+ZT>QwEk zweEcnbClYJiQm&}O}K08`N2XQ@yMLsS5K1-HLk2VR+$^edm4)~t-6z=Kp`Ozk0l)1Zt^%Hc@^)M6JUi{^gWmc^nwf$r=w zW9``!X6|bLw}9F%R_G7f za_~00Tz*|sQ}&bA%9L4kin(K@jK{*^d`h1Am&>}@)(BW^IlS#%s8EnH zMa9x?TQf2Bdf=G=VkL&Cf)&2Ou9b>caclY3N=@zpvtD_C+ErLd;i!6?n znvdMgQ}@cZKWQnMF#CC^z|l+OKf)~k#!l|{xiur<5f54lS45$A7kFR@7u+p!L2WvIQ-23?O!u_U+qL8jthQ z{_P>09{>(&99f;TQd%>iHd_#r3JZzUOq7VCHnRE1=z`la31TZr$kocE14IbV|GpaxB%4V{?!zgbVAEyuADsn9=wR- z7p3{Hts&G=e9{O3Q>O|k>O|Uy#|2zU%~BuzK__z{#)o4p$VQzcE*O$OsfHl^al*A^ z5yW&%k%=b~$6`X0vJrj7f&|+?;zmF3Vnb~xn=!4pU&8#6zV=;NH>`k1nDvhnG|vBr zyF<$S*9es5uWY8QC$j<6qc_Z&3e+!dJ}c=6tfRU$$ON7R1`J}9-5D(g5I=fwbS)ll zk`9Qj^(cNsf<>$ZJgXnaP-oF1_2{e9Pnce2IZv5#`hL8%gUljFiZ7nQ}s|H@<29yua9eoDfz zv4>uG9NA|_2li<7?jieXkS54~ai`(HcRYRTw+Ez%-E<0$R0~PLMPiWRDCrV%4@K-L zdk(P-r9GI`!5ACEAc)wY)2 ze&yc*uUL`h`(Mc5mS^NuQ1u-axIidyC79xO(bFh~Ju7b@inen%ol&dLhZGJjoKb!6 zT;va8+I~Y*W<7QnnHVgv@jZYE`uPfbi^17o(V50Wn@EL;PX!M=!wFVI z$)rLi=3opL<;ifTD*8&c9i;6L0?!^hLmB{*^3IFMV8KqCP`~4|0mh-Dj#-^HDGKN$>8x(7l1sGB+90^=9A>vW7lHT?SJw5skIRCwsD--6D|BERh^euB+e0 zbYsYwz(~5b);%(|R5683)2i$ZA+Io~$pXKo5$lh%p7ZD#oEA9eTSBQVdh)uOjW}kH z{DjSSE*9fDN5=(Rt~DSZ-4r&*=G}VlQMh~yjtDBgdE%C#FDchH_ZO}d4hoG0Lw7FVG*0$#$RM;h+&A(%0gmbuR8^tSybqB zr^gW}Yj#k@R&prduTs$nr=^VC1y?|Yjy(?I8ayjP$LhD~t#8w99WO^$F$SN^uUp{? zknN>f>5SC-0)k$U@g+TuLlE?gkM9fMFhH&eas4p9e{RgB_ym>riOb6@(nt}Ogt^#3 zZ-|%Nl-5{z2%4CAPtmk;4>}OI=$z4|Y=6|wP9g#;JuRk)y~T4VyN0dAPKM*w6ra$U zs{l)zR)rNd;8ctyxwfrnRV?C_BE(R%{+Riq*I65vShsysc3iDO`Q^Q9MXD?1+A1nqQ<-gc8yEO?fc@z`2q5{;IGF`B zp?x%mGg!{v4w6$u&^EOk)D)6qk7pw&7leMuNmhs9T2s3+o9iby9qKO`o3f;%(N^K7 zIkDlfYc)O6uL|qhKQGeNog%DO$EfFx_q3DQPYyluOs|wQ6z(a;-BqHq#^})SSahPV z%sr$~2NBE9h(#>uh``%alRRhV#LnT}u{eN2g9C(i0Lf^X>~g*RO=kBvqY_cYD~2c+ zx+s!5v#Nwygk@00Twz<04dA_d%;g+bP61$u$u036FoLy~klI{~JExz9NDGpOIa{Dwor=WWH7w?uXqOT8#w=IxLTG;wI5K=rESno zpj}}^7;9I;d|NSWt-QNG5gi?oFpl6F#1k)fltwfRM78*l%z3 z&d_?z?BzGbO`fG7H7FjyaZG~euIrj-lDHz{tavv|kX2|d{(w~Zl~SZq+2`)hk%oGb z`}r-faLE9=eE;96KJ@=wy!`ju^tXkM(!VNDl~^m706&Jku^=!PqXHRHd+*9}+Vabg zxmY3*3aToY9_hURQ51n6G0a>3;u!Xs2i@}W|A)1A46H-l)`c6}wr$(Ct;V+PG`4Lu zY~04SZL4w8Bn_H7+qL%DTDxc8?|wgKGXKtZc#LN}W72p0XlV^1fW^gTp7Wmbo(mo~ zd8f7R{g>nwwt1!Mf*ABZyIO+r{-moE$x^@c66TCtmSnG232WTZ|_KA74M1`Ti88j*Uic=zsWKa9kZas6cD!0f~DMHI) zU))^2A?mtIk<5Ey4{*#vUcA6_U{6Vg7Bnfr?WsbO<#EJ#zuAhxn0hr($e&=NTj+d> zZG*_E0fksAN1n~El$+uG5qkse(?*}k8KQ$2ONlLAF`!R5-Mvo(ZiF&h^G1n>Av&Z} zu-jo|{r!V{mrzRR;V)qBgo;=aEg*3i{B14pmj#%)shz2lr7?r5lcAfblk-m=BXN5t zcSEQDxkH)*;4=adLad5q`go0YMec>@G#w1TVxl|XEeh$uC@{^#KGyH3PM!toKM_o@ zEg@z0Em7o-(3i5j=9K#BCz+98WH9I&)GCx4@)@%H)TD$;Uu+6h4vNak?8j$m;3IkQ zdo4St6>d2q{UEl}3y7h>BjnO1Yg&fd*pI6#ezfL2!_(YExYZV6rkV~Oi4Na=)2B18 zvQvx=%0KuZvp`b#-xJ@x%|tj{f3())>%AVAaIs&+*ieeOP!n1So6jZ=aFsuhjW(&j{Gx z6bB?<_D-IE1O`|6FVMY!rrel{v1ok@qR@PAK+`hhYPeiKKNkj9xI1D}?-T&?^72kV zdc9ccfPS1gF7&&Pf&Duf7he~j5FpTOM0{N!Z*Cqa51JCSdNWVsNz&;x8o3WQnaX~$ zv(YJjvIFc1p(B@3S+bu*3B%B9E&H6GyE?%IXmDcFQYtbR1fec{Ie;IWzT%AHK;5Xg?KL6RMX@36-j{l-W zu5nY)LP`Lx{vD?my861h5>1Cf(v=1!^d%VFq1KJHlXcv;8!L4DZjlkglH!WXtjsN+ zIo{kBo&cmuz(JZqL8*LM3s>*4V0Ce+9PGX)%rbTQ<*@cVq|?pAiZ7HcrW}tBA54M*T2e(eq#9ZMmnfP3H;_4bQvIoVRR<4v!fy;MZl~iH`Rrj`kAov#981gM z=OcC;xblN@yhJdjgoHpE&aOsEt_3<2(pqrzd44ChcZCU&V^b5w!3xBJNU?-KsAF-&_n^Z0B7vkl@f0wJER1zlw&w3QAyW_E zCEC0fLLwXiE6%{={I%IZO1UUdm2Qh3bRJe&) z>_t$H7cs&I*XAX*$733l;TX(lw>~++Mp?VThU|r=L$Wa9`Yew50vMvG&^vu(lDFY9 zE9W8ZNaNiXO^$jaVsoQ~{>)HJS{TQ1O-9D7pcqfQSt?q?*qw6Kng`w`cRYqW-y2c{ zkTMY-+JzKGnln+mB7o~;yBQ_2_im6+ne?1u1XTV&{{w9zG4oe}|6(d8u( zH8^s>D*6Fcup@qRL{H6aKuw`tl&FdbY};79c(BRDHxo+mwW2btDsfDxI4fOa%L7$- z=;seS5SyFV)u-U|dCNw_Z(qX-m{Y#*1QP&Y3F*gKMm!9rWqQR4YnsC{Q*A!4d0ry3^7?DetHE z0y&H?7Y3-P@NYW_|BZYArQ<(oYpCKM%mH(yaxwMalJJWa>p!qVfDn5q@>0&rd=eZ_^O-6YV8cCCVU zau@wxx1S$Hn*{G#4PBnIZ3G7L{92Y^?jJ<-RcLn{#TDde)N*8Dh}?K zH{Pz=HM?FsUl`wCjGG_+PO(kL$VtjisRVzSRUEu#`(?IpU$sRxp4Y(2PDrXG(o@^2 zQc7BznIsrHEa#-cvqCImMDa^O7!xz)o@%(_K;dvV=p8a7V?87D6=NN+Ry5%okQ6+j z4!UIUzE)E+3!^=#j1#aFdtE+q{64s)={E4MPUX6j!rlVFaZvsCt(booP^A8L!}woa zhwtBRm&`0wPt2e7MSl(tQ7tU7?>#Q;hAhS*J9g3=!d#BSG>3Up+W;IXUV1G*j<)3} znHca+ch2Ryb($PH8p8?Dt4h~oR${HUDKsGh8WToVL5Gz!kMFBW1uy}m8*)~vX88gb z7uVqU;=V|S1p1DF(1%(Z_zX3>T(q45h%8##{ExUIm#{|n^q&%D(|ysQYRAY7N2I@H z8aCaem0Zx(oPN&cM+#IdgB|o-K7cKe5x5W)?Q>M4gjg#Ahixl`d{oahw< zaPbs5mPy5}6!Ls?IO^Wuxlm%;MySUN+Xcmd)j=s^9E9l`6n*hOH5U{eD2;a2RziLv z?XC-lwam54N;XAxu4S~dnv(1YhBM?>jw}$}`KZk&Id!4}JrTL_aBcon`azAf@U z?EEF2(V^mbet=}?f9p2>JL&vqmHwYFNB-Ag4iNqR&|0af_4V1r{^D#^fNHn&?kDE&&P(wl-200R;g*Hijlj7A=CPjA+3sdwDl-dU0_0l%VWcqm+4Jad3S|lu3@Is}X5hnfWQH zahatDg;8la`ufE?DtY;Fsb9ey=!WI?_HIt)Rym3}>Dxxs%@|6OlX5i{);b$wN+>E> zY6&`8uAT%H#@n(kaK_cIQfRavj!~c2!SqWw2D!|X9{_O(@{x=WsM?d=KOo!CL#?|?c zKLBRVzY&}O8q_#|jhLi#Jvnx!!8kvO0X5cynvU?J1|B#1|5J)(USC*!!Mt0h?;RTkd;}v^MM_jKPomgi!Wlw_JnpZm6_U43eywsOiK7f zzbB9tZgWiuml&e5)B1Z-eP;={r8*{|s{L z$a(`Q0P)xV);0X)CePn8J_%F1f2=J3u{5eywN{vWkLtHMTWySr*ajK>1+Cc$3qE5w z9$_3-3K4~f*dkibbHHe6q9(Lk;fml`qU#Y2Wkwc-?Pfw?H;-}GGGjM1yxh`Be#)DE z%2{4v3n9;-11P?`I0Okw3hIa~TB?=MP*+&GSCou;dOsqSF+wHR0*)kLkTJ-jJSgCh zIz;g@BAjB?q){YcCdy7BJ7ESvZSWnpDQuC*pjN+Wwn$pE(o}mmeptLR<3?dG0VAuZ zaf9{hXLJrWYc@Z&FN3ZW1MvlWg*6%4x>H%?Iar=FouhPiI9@)PIxx-6ljnu0Y@XtC zIqe-4vX|a-nQRBxhth+SN9FNOng!WkJu(~x;@42skz(}B5sO%IGb1LGotbM6%wfy? z6o%%ul(e_of-1POp(%>Gnja*h#S4dU1xJhUvl(goGK$q_zoShea(QKWrIR5h?L6K;JVK; zxufSlHd>O&3PH+VN0}1YLO@^(u&OPH_(auFLKG~L6ze5WL8oETMKhw)eFo$n*%glr z`Gtoe2*)eW?Ms6Fy8Wao36nAi_g`N=prR7;Rdxonvtm%~6bD2WFH?%==9@a?hiHc( z%R_3~pbqdzU7u_Y^&p>OZVGXC9}~KD6Q_Iz!jdT;V8(Vt;cFE$v4399LA)PEy2?Z( z4GCYsCuW6EbP6ZEwOe7Xy>~JIIxRWOxa2)9iQCVQ!+Qn(X+UDtb`M(s7DL2uEjSTGN!ta*kRTk(i#g*#Sr(?Z#wZgbX~!Ua@@iG;&v1*k3^r^1G2;dIzi4~Y z(yC4<0d7sjf_wiRGYj$s8zelzTR9<=YZxW8;&P zm&WeQ23@|7pxgZDdgGs4zZz{01Vwq%Q%w9nCvqUN zmw?AA*L#n>uH%mjTT0K$GAN-v&GWV-vBg}C#ifvQ%eWj>Ik$wfN>A~Ot!S50y>|o! zV|=E)9yGH~6kpwnE!Wr$OAJ(kT5!zClP896B-~YyI(>)}b?qfdBe=<<52(MtK{g1K zeM+MGMjOkD@NoTAk$f>l@iRBO+w9E(Lf}9bzl+QCuy0XSJWfC`qVv?ry zg6ItN3eJLNg}<7y4EJuE!=$PO)k51){Ltm zEkU3^$wSa1ZtuOz>sY4ZD@VG=NtVPx zaY9bOeh+F#G~j3^YKc7_w+nZw`T?4OsqViJGdR2b@-OZ}n@Pgz|!T+5GJDv+puB}8E56QHP1otPYd)!Jc~ z`EhOIuodLlz_O5iMwCGAr3lg)A|hbs&eY8Oo@FazWBl@?y}-M6!GS>*oUiQcwl*uv zxkI?nV2J3@!=&U8Lp{Xmc*%8V??Gfh$JiW6MS^syT_=4DLXL1siV48Py^A=J`N%pt zI2C=dnju%L&Xcb`tzt#O>`)azY<}5{zh0C*h&kPw7qr3x?{ueh)eyJcks!}*Ok`jD zDhM%yBW$;IM^@m2U|A|1av-07pu~GRaz$z>k=_PXFwN$8JmwZZPv=Im)8$VC;0SXz z;#EiKUCbN8ACSh&61>gB^SL_UM4~_?_yG=M?dkb!*E)1T56v|gWwItB@6!|^Qhn&~Uy5ze!Q$dvb z@wopn_8Rint?Alyx#NXF23jA8967_cDvr+XN`-{CevS<9CWX0^;hiffukXj$KP9eB ze3BjykoLiEo$6m=7yijg{<%-;D_;)}1hA5^wmrm9N;GUC$Fy=Wk^&^SnOe34xk}hBIzsaD12u9gAM`ccPrn~rk_5o1+9cb0u&3J4u4y_F zUJVFgJi)fF9@4Ar0OFs!!p&s>e-h4!TO@`9wa9i+79nB>67l2vdvMhB~Q}>6G z)!^pNxG{Uaq0&3|nHO$~Ig=f;o`stmkU~}D0k9Gl_jT8vJ`P?jS2W^?8-AvEkJo=h z%J|YeQ~*1x$+2WW2l^D(8y?%>6?2z?1kG9ISPH@oJ0X!Li@b2h-UZQgUJZAMQIT6L z7Z|uWW@;$P@ty4YA`?4f_e}Fc12nBW|G=|6*rC8P1#lD|l}&O(74uX|fG4d?I?(O{ z;UVMX3YC6sQ8xqQXSWX*_6QEp9zov%^n2>BKF|QOM3-n_IG*E|tf59^72FV|fE!7l!;1Ehej z|DIsPBx?NxNe;awSrxLadTkAfq^t%B5ujE)=4%?90!41`vC|`O*h$OscBTYDP#za; ze?X>Cx)MGaJDZ%e|H1NwhoSZ%?%g4yq2X|EU8oX_G5Vm+OtcGjNHc5nGHXxsOe{Z+ z-taP}5Jb=TcO^;?VR`{QF2_*h*snBX8`HN)B4UX^ zCQ`X>T#vR=!#W#0fP}*!Dt3RNbTD0sx?Ob_-obZ%5h>G}|9Tq4c<;F~Az5L&HTPm> zeNS3Zwe;SQZi@dxF8!q;Pptr@68DjYY~xJsO1ixnwZ?F>@LS?Th<>w~lm6(S%RP+kiwMJ~bE8*xufUb`3mX2S zbD&0lh_4lj?SWdYB4cP0(e`a1Qtl=VYk8pFo4;(HWpCmx3?T3G-}=G7JSp@K^8T4d z{zKiYYHI6XW9af{Cn+?(#|l^oHten3wW_)~j&NRt?^w|LY$8ZM1pgGKpK18`tS0&k zzb=CBI|6C!bMz22Y52ew{~Izc+^$Zb_U)eS$?eU2<7qP3Jcx#zz3xR*qVO@_)YX(? zY@}V z1R)Mze_)2#MKF{h;V-qD<8bP�_X?gp`fKL$?P^yoi_GQ`bZueCyh))tx3~6)d-$ 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

  • Bk+KJay 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%0DkSsnTjJ)Prlnk0fJY;WP`j99@U9?)_s{L&4#ek zfo8ZF1!M9|I6)LpxqSGbYI*#;h<_r%!_F_+g@<1j>oiTU9^g(0f{g$K$J4!>@MU$0 zR1zVIN-@I{)q0-;v9u9TqD%bmKrE22JjE*-BGZdh7l&*cP0&^|A4$69xX~Rrbj#A1 zESgtt1t*k4iwE}}OlYIZ-i+uM!7`gqyh(PAIKB$K>$aU5TQTw-{QRd(#t4qO{F1_I zk8Jnbr%YzX?JovwR&Yao{g#MKR1CSgoe-E;aD0;|P-0d}CJ;SHIiJk{v^DCygJ{(M z#DE-B0^6{upFAMLw^!66?WE=>Vxl$r`y`bOw4WdJ%qQz27|C_ZTiXJ;YAj=j*Wt7x zjjCpjUp|tyyG8OZ?jMv$y!tDI7%{g*Jg}Ndq(gm|-=;z)EeogNr+KA@DiMa=%KkYJ z6aJOS>=$mk=l_PXBx;p<`1nWaAw)7VO7?%t0{*`=zyI{4`Hy+{KSeTPu+RA@6`$}g zA%#IM@Bi3^NaANJ5#0lk)C`h7VIb1&E|`lb_J8g|E0FpBo8^#0e%+P2D1KI7v2l7lUi%gU_ zFoPEjyRzvpL!285+-A}F33-KIq7Lqdjp-vRYwu-^2AH>Y^3d}hO;TRz^a9_1 zh#a`W%rd{!G1KtW0IqKo=Tn+#DtW^)N6ZFb?liyconZfkfu2&+ry(FP2yt!~o%3uk z4{?^ZVGE-bhoBcyE}>S+Uh2_U8iyfllZ51|9fr33h>>}Pl+}}kq1eyK+4d@5yZ zFJ_Bpa=z9_g^)*fJ2}tX{8h@JoqI@;-7li54WULPwQ&OWPUADHo&2Q?Eg*c=CNzf% zM=~KX(mQoXt`zg6X7fBw3oKXB3=ykFC8C-7UwyB%RjuT1fRpN7x=%v{E*#l{w#Oe>C>DB)BK$!Q&jC_r0kz3hg zECcQr((-Qcc|O(2Io9I{Z_S3N_NU^DZRVIo_BSvuCIL}e{=U4b#NQS|c(6chsp%}d zyvzj~rB7PWZH6^=v4r>P0=`c79rvqN_Co&I)pX!B||<#QuK zGTlS4u&vU#$0B{?{1Ve1K9p;gQz1BxFn<8 z3O`*W7f*WJYzZikT>~szK6$}5bTxMZgijQh`H2D@SpK5GObKqS`gHK;fAWI++|l~W z4;l;bA^VxLD<18yAfRX17hQ3Jx%fxxnFpWikbktnoa=#XZO%^=h~((}GgEg`8g5+AILe5E;5 zod{D3T4L;L9VyHn#Xx}NW&^*874Jx84MtwHC59#i zJi#7{k7c?)ZjI65zT9q)b&Nhu>ro?6IbOO!fhWMh#9A?dStbiM^6XFzkC1}_+}4vo z?QW=`P7Qa=$4%1D*G{fyFg3hrnnbn8mmft{C+l<^JoCoq4Ri?T8?p~7$74rv?3IAI zmcVJvv&U2#uaW7iU$~l z>jL*9J81#Y)}^=Oty@)Q(O9_jC$Ut4omeet?YlT+B!xMvd&j z5iVPbaUhey$FnM=>iItv9oI-x+@PIyiQj#)qWPv|@vyarUt-Gi7n9Fml&#f*JaxexR~eEW4Z=Kk$%L! zPW7B`NJ{q(6}K)&*Kwj})?D8dO-5KsQ_W|;Zb`)PhFOz2Pnm(ASr3=pYlEwv@&KO` z^@*9gQGMXi{2mBkE(>o@_@|uBwZgwWwI2ZaXdGMSVksg)JYh24kdF>b8^>uEQlz{J zl8viXAnW}BJ`vaK?FkIXzr|DY|8Q9Bf;UF{e6E56P_Z|K7#Y`p_eY@Ekx+N2Dr{C9 z;3sJu;{!m$lEiLmXC|({NC{Xcah`$7&7myZf=eUBq>1-&OgyQaNz#>+b*yowlBL|& zhJ=f`CDP4kt?)68`XNaLBdNgII>-nC_gZ(tJ|aVbsDH=+SyT6&!Obxpd<=OARMgc! z#h!8Ooui(=G+e6_t6hqDMj_n-Hk=F)9{AXh*S{v_fUzp#K?TzHo|dkDB{E9k5vf%b zcZB{3+};up?6}TBy06~~av<^afAP)Y`Bm>X-T63iD0*_%$H6g@CZUwOQep{ptYxI^ zelM5|wXQIIOx$;iY$!6rY<~FvcKoILA2+{$>R<+wrJT_uKGXbc zY3<0yD{S`Y%~-^vObvyzuz3*mf0_KM>l8h=Eh9&YW*fCgqPe5ybQq<)W+T*a2&gE{ zN+`$Yx)$T?f$^Y+i7y3OaRO=H&0ij_9=tbdN?!kPDCB~0Ld6&ZNPFuB>LzaBhG8WV zjFXLHjI)h{_PB=;Vl(kuIPIL*cUs54a8GM7Z-CxJe|UmSqGF1U~WIgoU4wPy1u4alZ1j%vE;V6;Uj7LnQ>my596)?MV2v%BJCvdh)6s4Uz^vr-Fh z9S!G=NKnkTrz}@ehlY-h$#_3NlaiZ5PFDf|@br%K3}}NFa+cNQ7Vx%+4OV5ry6mRn zW>BN3E~z!b&%1N$+CF~qy{W8`X4>B@XyjGqP)}Z?c3Y%%r>(3!bLvyNu|o9oc=?N& zjIrC%Jwp#^)?&rv1Il$CW|_^=Wp2vzAU2TIk%gf9@orezGlru7BnxGC`xh|}L zIHBtp!Cwy%S?h^Xd{>$z%BZRx)tEz3TAp6V#5TB9PjMZ`RTjI6UvK>!_?{vs{De-E zWA?ez*>9;>|A4391J^0PSJ1mqt1xB$)K2f5@K{nfQB} ze{c-HL|(E#GKdmh34Q<}=oHGfz`*RnHOLf2{*T$!CBs;kXlYRRS?OG01&w3~tRaLU zI&v>5{GPq&4JfHc2=>{K7JIA`yU4lP?W)8d9sGiN2MpJ+3V2i!FuwWMFf)* zUm5o%i3>W`)MCDO!|Ck2l2zBuYmm^sSI#Oo0@^AWkuqcdd+AZjLxR6AbBH%>{b$PT z7Ypcrcl1E>KX{qV%>LI|pq8f(-XMmbaaCt?=S?zIZ%Vex*Ls^lfX#SpA~q@|WQ!ZV z5oMW3KxGl2Dvx$7(ii?E9Y}#ht%wOa=0p>-WUY`1^z_B?iLVWi>1<;* zMHA|yHcb;tBQ{kNOQRFi4G+vb24;9BhY4CLTuHqL2j7Ee$AGXD;j$>6-dw8vKqpN| zE3Os8O8gX&JbZP*8Ax)6bOgFeAh~n9eK!nz`W4!r2 zNV;_)^a`8&)`=ubGFUQjM2Vz^(kTXk=t&!o|Js$^XL|>hDohcA3Yqlw6jl>eCe0d7a`!~>Y7y@qBLIfO-%>`d!r$}*x_e3@ z*2{YK9Pj`FwAbLgl|2SK!Jt2aywRVa*7JM1Eq;?tP+i+Um4hnG5-9YG!196_Xl!d` z@IjSeco23;?(4vIej%c`Ed_13#t8xO(K3W5RMn&wj`z_pWER%M@ewmTxYi2!6;3BK zRSD}?UW?ne*q4gl4Bu78$m1hnX!jJ_r+uDOM0W@@Ih0|(pj#ZGl4~qqj@IA%RUjeeMvKG_k(Vv#A8OV z5`}~{M|GIQhuDW)LUu0@n?7g2x5VNHS(*H;N#qLrAn3plX<*D9wn8Wv8FS3f8w=r> z9mrjtsGg&B=Dvc6@bXzXJWZo0s?dVFo<~d8pxJx&{+MKbNuy zN{-s2FriNMgdB^uYyDL~&i}ZkkEq?Ai2@eY3j=)A2OVj|OGze4+7Rbz*U67fEDBt# zIWd>KuvPbyR3X{84DcQ@Q+zU5p2b@H`@%J2BTH49|~#xq_RIN`bc?@l%vbW6-5Jhp4h5LE(}n zxoF512V z-r}MxeFKS+D}gz1*&s%yT9BQl)@6*5obe_`5QGY1%>bMGFX>+E>6g3v&&Kx?GHKa9$VYHQ=Qzg*X zuzpv?ym9uZ!^(TbYiD+za&qJz%A%4S((>@5G27N8LrJ`N;(Q+S$2m(um$H;Ny?1r6 z_tr7z5fAMaAvilG*64Yd@*m@Hk1-Vx`C8M`0M;)ieX?U!WQb;_=F3{|gfq#2ILvxW z!hSrg&Mw1oqt9{fs_Gx-SzEhiGSyyxItf4cN`M!o5Hs+4@~h}XRB@3i zLarRZN(38#Ri1}RrwGDUi$1LV(vSNkX@=%0uHUw28|!H?oV0)TvAp3Q16sfLzK3Kcd!r{Zf4;miwDv86$c8 zL_v}^U@{OaJr7##Nw2@T-!bu(>YI+EjZ=$@Ob0;@#J6i~tOcolcj%hZB3gA4%0@EP zQQ}#)YlGJ5PBYLN>OsfE4$sHDK?Y#Y%FT0?+o;`799-TZu=50a$WZBRf4v06=c1Ee z!viggBBOL&;5etL$t>#`VpV~DXNio)n_gV7WP2+|c9+d=GL+vR0?-uQzuVdHf>