diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000000..40f5c88746
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Eugen Paraschiv
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index d94a786bc2..271aea0767 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,14 @@
The "REST with Spring" Classes
==============================
+
After 5 months of work, here's the Master Class of REST With Spring:
**[>> THE REST WITH SPRING MASTER CLASS](http://www.baeldung.com/rest-with-spring-course?utm_source=github&utm_medium=social&utm_content=tutorials&utm_campaign=rws#master-class)**
+And here's the Master Class of Learn Spring Security:
+**[>> LEARN SPRING SECURITY MASTER CLASS](http://www.baeldung.com/learn-spring-security-course?utm_source=github&utm_medium=social&utm_content=tutorials&utm_campaign=lss#master-class)**
+
+
Spring Tutorials
================
diff --git a/apache-poi/src/main/java/com/baeldung/poi/powerpoint/PowerPointHelper.java b/apache-poi/src/main/java/com/baeldung/poi/powerpoint/PowerPointHelper.java
new file mode 100644
index 0000000000..e2af4f8808
--- /dev/null
+++ b/apache-poi/src/main/java/com/baeldung/poi/powerpoint/PowerPointHelper.java
@@ -0,0 +1,224 @@
+package com.baeldung.poi.powerpoint;
+
+import org.apache.poi.sl.usermodel.AutoNumberingScheme;
+import org.apache.poi.sl.usermodel.PictureData;
+import org.apache.poi.sl.usermodel.TableCell;
+import org.apache.poi.sl.usermodel.TextParagraph;
+import org.apache.poi.util.IOUtils;
+import org.apache.poi.xslf.usermodel.*;
+
+import java.awt.*;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Helper class for the PowerPoint presentation creation
+ */
+public class PowerPointHelper {
+
+ /**
+ * Read an existing presentation
+ *
+ * @param fileLocation
+ * File location of the presentation
+ * @return instance of {@link XMLSlideShow}
+ * @throws IOException
+ */
+ public XMLSlideShow readingExistingSlideShow(String fileLocation) throws IOException {
+ return new XMLSlideShow(new FileInputStream(fileLocation));
+ }
+
+ /**
+ * Create a sample presentation
+ *
+ * @param fileLocation
+ * File location of the presentation
+ * @throws IOException
+ */
+ public void createPresentation(String fileLocation) throws IOException {
+ // Create presentation
+ XMLSlideShow ppt = new XMLSlideShow();
+
+ XSLFSlideMaster defaultMaster = ppt.getSlideMasters().get(0);
+
+ // Retriving the slide layout
+ XSLFSlideLayout layout = defaultMaster.getLayout(SlideLayout.TITLE_ONLY);
+
+ // Creating the 1st slide
+ XSLFSlide slide1 = ppt.createSlide(layout);
+ XSLFTextShape title = slide1.getPlaceholder(0);
+ // Clearing text to remove the predefined one in the template
+ title.clearText();
+ XSLFTextParagraph p = title.addNewTextParagraph();
+
+ XSLFTextRun r1 = p.addNewTextRun();
+ r1.setText("Baeldung");
+ r1.setFontColor(new Color(78, 147, 89));
+ r1.setFontSize(48.);
+
+ // Add Image
+ ClassLoader classLoader = getClass().getClassLoader();
+ byte[] pictureData = IOUtils.toByteArray(new FileInputStream(classLoader.getResource("logo-leaf.png").getFile()));
+
+ XSLFPictureData pd = ppt.addPicture(pictureData, PictureData.PictureType.PNG);
+ XSLFPictureShape picture = slide1.createPicture(pd);
+ picture.setAnchor(new Rectangle(320, 230, 100, 92));
+
+ // Creating 2nd slide
+ layout = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
+ XSLFSlide slide2 = ppt.createSlide(layout);
+
+ // setting the tile
+ title = slide2.getPlaceholder(0);
+ title.clearText();
+ XSLFTextRun r = title.addNewTextParagraph().addNewTextRun();
+ r.setText("Baeldung");
+
+ // Adding the link
+ XSLFHyperlink link = r.createHyperlink();
+ link.setAddress("http://www.baeldung.com");
+
+ // setting the content
+ XSLFTextShape content = slide2.getPlaceholder(1);
+ content.clearText(); // unset any existing text
+ content.addNewTextParagraph().addNewTextRun().setText("First paragraph");
+ content.addNewTextParagraph().addNewTextRun().setText("Second paragraph");
+ content.addNewTextParagraph().addNewTextRun().setText("Third paragraph");
+
+ // Creating 3rd slide - List
+ layout = defaultMaster.getLayout(SlideLayout.TITLE_AND_CONTENT);
+ XSLFSlide slide3 = ppt.createSlide(layout);
+ title = slide3.getPlaceholder(0);
+ title.clearText();
+ r = title.addNewTextParagraph().addNewTextRun();
+ r.setText("Lists");
+
+ content = slide3.getPlaceholder(1);
+ content.clearText();
+ XSLFTextParagraph p1 = content.addNewTextParagraph();
+ p1.setIndentLevel(0);
+ p1.setBullet(true);
+ r1 = p1.addNewTextRun();
+ r1.setText("Bullet");
+
+ // the next three paragraphs form an auto-numbered list
+ XSLFTextParagraph p2 = content.addNewTextParagraph();
+ p2.setBulletAutoNumber(AutoNumberingScheme.alphaLcParenRight, 1);
+ p2.setIndentLevel(1);
+ XSLFTextRun r2 = p2.addNewTextRun();
+ r2.setText("Numbered List Item - 1");
+
+ // Creating 4th slide
+ XSLFSlide slide4 = ppt.createSlide();
+ createTable(slide4);
+
+ // Save presentation
+ FileOutputStream out = new FileOutputStream(fileLocation);
+ ppt.write(out);
+ out.close();
+
+ // Closing presentation
+ ppt.close();
+ }
+
+ /**
+ * Delete a slide from the presentation
+ *
+ * @param ppt
+ * The presentation
+ * @param slideNumber
+ * The number of the slide to be deleted (0-based)
+ */
+ public void deleteSlide(XMLSlideShow ppt, int slideNumber) {
+ ppt.removeSlide(slideNumber);
+ }
+
+ /**
+ * Re-order the slides inside a presentation
+ *
+ * @param ppt
+ * The presentation
+ * @param slideNumber
+ * The number of the slide to move
+ * @param newSlideNumber
+ * The new position of the slide (0-base)
+ */
+ public void reorderSlide(XMLSlideShow ppt, int slideNumber, int newSlideNumber) {
+ List slides = ppt.getSlides();
+
+ XSLFSlide secondSlide = slides.get(slideNumber);
+ ppt.setSlideOrder(secondSlide, newSlideNumber);
+ }
+
+ /**
+ * Retrieve the placeholder inside a slide
+ *
+ * @param slide
+ * The slide
+ * @return List of placeholder inside a slide
+ */
+ public List retrieveTemplatePlaceholders(XSLFSlide slide) {
+ List placeholders = new ArrayList<>();
+
+ for (XSLFShape shape : slide.getShapes()) {
+ if (shape instanceof XSLFAutoShape) {
+ placeholders.add(shape);
+ }
+ }
+ return placeholders;
+ }
+
+ /**
+ * Create a table
+ *
+ * @param slide
+ * Slide
+ */
+ private void createTable(XSLFSlide slide) {
+
+ XSLFTable tbl = slide.createTable();
+ tbl.setAnchor(new Rectangle(50, 50, 450, 300));
+
+ int numColumns = 3;
+ int numRows = 5;
+
+ // header
+ XSLFTableRow headerRow = tbl.addRow();
+ headerRow.setHeight(50);
+ for (int i = 0; i < numColumns; i++) {
+ XSLFTableCell th = headerRow.addCell();
+ XSLFTextParagraph p = th.addNewTextParagraph();
+ p.setTextAlign(TextParagraph.TextAlign.CENTER);
+ XSLFTextRun r = p.addNewTextRun();
+ r.setText("Header " + (i + 1));
+ r.setBold(true);
+ r.setFontColor(Color.white);
+ th.setFillColor(new Color(79, 129, 189));
+ th.setBorderWidth(TableCell.BorderEdge.bottom, 2.0);
+ th.setBorderColor(TableCell.BorderEdge.bottom, Color.white);
+ // all columns are equally sized
+ tbl.setColumnWidth(i, 150);
+ }
+
+ // data
+ for (int rownum = 0; rownum < numRows; rownum++) {
+ XSLFTableRow tr = tbl.addRow();
+ tr.setHeight(50);
+ for (int i = 0; i < numColumns; i++) {
+ XSLFTableCell cell = tr.addCell();
+ XSLFTextParagraph p = cell.addNewTextParagraph();
+ XSLFTextRun r = p.addNewTextRun();
+
+ r.setText("Cell " + (i * rownum + 1));
+ if (rownum % 2 == 0) {
+ cell.setFillColor(new Color(208, 216, 232));
+ } else {
+ cell.setFillColor(new Color(233, 247, 244));
+ }
+ }
+ }
+ }
+}
diff --git a/apache-poi/src/test/java/com/baeldung/poi/powerpoint/PowerPointIntegrationTest.java b/apache-poi/src/test/java/com/baeldung/poi/powerpoint/PowerPointIntegrationTest.java
new file mode 100644
index 0000000000..5319208e85
--- /dev/null
+++ b/apache-poi/src/test/java/com/baeldung/poi/powerpoint/PowerPointIntegrationTest.java
@@ -0,0 +1,77 @@
+package com.baeldung.poi.powerpoint;
+
+import org.apache.poi.xslf.usermodel.XMLSlideShow;
+import org.apache.poi.xslf.usermodel.XSLFShape;
+import org.apache.poi.xslf.usermodel.XSLFSlide;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.File;
+import java.util.List;
+
+public class PowerPointIntegrationTest {
+
+ private PowerPointHelper pph;
+ private String fileLocation;
+ private static final String FILE_NAME = "presentation.pptx";
+
+ @Before
+ public void setUp() throws Exception {
+ File currDir = new File(".");
+ String path = currDir.getAbsolutePath();
+ fileLocation = path.substring(0, path.length() - 1) + FILE_NAME;
+
+ pph = new PowerPointHelper();
+ pph.createPresentation(fileLocation);
+ }
+
+ @Test
+ public void whenReadingAPresentation_thenOK() throws Exception {
+ XMLSlideShow xmlSlideShow = pph.readingExistingSlideShow(fileLocation);
+
+ Assert.assertNotNull(xmlSlideShow);
+ Assert.assertEquals(4, xmlSlideShow.getSlides().size());
+ }
+
+ @Test
+ public void whenRetrievingThePlaceholdersForEachSlide_thenOK() throws Exception {
+ XMLSlideShow xmlSlideShow = pph.readingExistingSlideShow(fileLocation);
+
+ List onlyTitleSlidePlaceholders = pph.retrieveTemplatePlaceholders(xmlSlideShow.getSlides().get(0));
+ List titleAndBodySlidePlaceholders = pph.retrieveTemplatePlaceholders(xmlSlideShow.getSlides().get(1));
+ List emptySlidePlaceholdes = pph.retrieveTemplatePlaceholders(xmlSlideShow.getSlides().get(3));
+
+ Assert.assertEquals(1, onlyTitleSlidePlaceholders.size());
+ Assert.assertEquals(2, titleAndBodySlidePlaceholders.size());
+ Assert.assertEquals(0, emptySlidePlaceholdes.size());
+
+ }
+
+ @Test
+ public void whenSortingSlides_thenOK() throws Exception {
+ XMLSlideShow xmlSlideShow = pph.readingExistingSlideShow(fileLocation);
+ XSLFSlide slide4 = xmlSlideShow.getSlides().get(3);
+ pph.reorderSlide(xmlSlideShow, 3, 1);
+
+ Assert.assertEquals(slide4, xmlSlideShow.getSlides().get(1));
+ }
+
+ @Test
+ public void givenPresentation_whenDeletingASlide_thenOK() throws Exception {
+ XMLSlideShow xmlSlideShow = pph.readingExistingSlideShow(fileLocation);
+ pph.deleteSlide(xmlSlideShow, 3);
+
+ Assert.assertEquals(3, xmlSlideShow.getSlides().size());
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ File testFile = new File(fileLocation);
+ if (testFile.exists()) {
+ testFile.delete();
+ }
+ pph = null;
+ }
+}
diff --git a/bootique/dependency-reduced-pom.xml b/bootique/dependency-reduced-pom.xml
index ed18f4e42a..ab09cfb7b1 100644
--- a/bootique/dependency-reduced-pom.xml
+++ b/bootique/dependency-reduced-pom.xml
@@ -28,8 +28,14 @@
junit
junit
- 3.8.1
+ 4.12
test
+
+
+ hamcrest-core
+ org.hamcrest
+
+
diff --git a/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateConverter.java b/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateConverter.java
deleted file mode 100644
index 8788aac747..0000000000
--- a/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateConverter.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- *
- */
-package com.baeldung.datetime;
-
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.ZoneId;
-import java.util.Date;
-
-/**
- * Class which shows different ways of converting java.util.Date into java.time.LocalDate.
- *
- * @author abialas
- *
- */
-public class DateToLocalDateConverter {
-
- public static LocalDate convertToLocalDateViaInstant(Date dateToConvert) {
- return dateToConvert.toInstant()
- .atZone(ZoneId.systemDefault())
- .toLocalDate();
- }
-
- public static LocalDate convertToLocalDateViaSqlDate(Date dateToConvert) {
- return new java.sql.Date(dateToConvert.getTime()).toLocalDate();
- }
-
- public static LocalDate convertToLocalDateViaMilisecond(Date dateToConvert) {
- return Instant.ofEpochMilli(dateToConvert.getTime())
- .atZone(ZoneId.systemDefault())
- .toLocalDate();
- }
-
-}
diff --git a/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateTimeConverter.java b/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateTimeConverter.java
deleted file mode 100644
index f994023526..0000000000
--- a/core-java-8/src/main/java/com/baeldung/datetime/DateToLocalDateTimeConverter.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- *
- */
-package com.baeldung.datetime;
-
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.util.Date;
-
-/**
- * Class which shows different ways of converting java.util.Date into java.time.LocalDateTime.
- *
- * @author abialas
- *
- */
-public class DateToLocalDateTimeConverter {
-
- public static LocalDateTime convertToLocalDateTimeViaInstant(Date dateToConvert) {
- return dateToConvert.toInstant()
- .atZone(ZoneId.systemDefault())
- .toLocalDateTime();
- }
-
- public static LocalDateTime convertToLocalDateTimeViaSqlTimestamp(Date dateToConvert) {
- return new java.sql.Timestamp(dateToConvert.getTime()).toLocalDateTime();
- }
-
- public static LocalDateTime convertToLocalDateTimeViaMilisecond(Date dateToConvert) {
- return Instant.ofEpochMilli(dateToConvert.getTime())
- .atZone(ZoneId.systemDefault())
- .toLocalDateTime();
- }
-
-}
diff --git a/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateConverterTest.java b/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateConverterTest.java
deleted file mode 100644
index 5de6ae3e59..0000000000
--- a/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateConverterTest.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/**
- *
- */
-package com.baeldung.datetime;
-
-import static org.junit.Assert.assertEquals;
-
-import java.time.LocalDate;
-import java.time.temporal.ChronoField;
-import java.util.Calendar;
-import java.util.Date;
-
-import org.junit.Test;
-
-/**
- *
- * JUnits for {@link DateToLocalDateConverter} class.
- *
- * @author abialas
- *
- */
-public class DateToLocalDateConverterTest {
-
- @Test
- public void shouldReturn10thNovember2010WhenConvertViaInstant() {
- // given
- Calendar calendar = Calendar.getInstance();
- calendar.set(2010, 10, 10);
- Date dateToConvert = calendar.getTime();
-
- // when
- LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaInstant(dateToConvert);
-
- // then
- assertEquals(2010, localDate.get(ChronoField.YEAR));
- assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR));
- assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH));
- }
-
- @Test
- public void shouldReturn10thNovember2010WhenConvertViaMiliseconds() {
- // given
- Calendar calendar = Calendar.getInstance();
- calendar.set(2010, 10, 10);
- Date dateToConvert = calendar.getTime();
-
- // when
- LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaMilisecond(dateToConvert);
-
- // then
- assertEquals(2010, localDate.get(ChronoField.YEAR));
- assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR));
- assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH));
- }
-
- @Test
- public void shouldReturn10thNovember2010WhenConvertViaSqlDate() {
- // given
- Calendar calendar = Calendar.getInstance();
- calendar.set(2010, 10, 10);
- Date dateToConvert = calendar.getTime();
-
- // when
- LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaSqlDate(dateToConvert);
-
- // then
- assertEquals(2010, localDate.get(ChronoField.YEAR));
- assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR));
- assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH));
- }
-
-}
diff --git a/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateTimeConverterTest.java b/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateTimeConverterTest.java
deleted file mode 100644
index 6d8fb8ea93..0000000000
--- a/core-java-8/src/test/java/com/baeldung/datetime/DateToLocalDateTimeConverterTest.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/**
- *
- */
-package com.baeldung.datetime;
-
-import static org.junit.Assert.assertEquals;
-
-import java.time.LocalDateTime;
-import java.time.temporal.ChronoField;
-import java.util.Calendar;
-import java.util.Date;
-
-import org.junit.Test;
-
-/**
- *
- * JUnits for {@link DateToLocalDateTimeConverter} class.
- *
- * @author abialas
- *
- */
-public class DateToLocalDateTimeConverterTest {
-
- @Test
- public void shouldReturn10thNovember2010time8hour20minWhenConvertViaInstant() {
- // given
- Calendar calendar = Calendar.getInstance();
- calendar.set(2010, 10, 10, 8, 20);
- Date dateToConvert = calendar.getTime();
-
- // when
- LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaInstant(dateToConvert);
-
- // then
- assertEquals(2010, localDateTime.get(ChronoField.YEAR));
- assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR));
- assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH));
- assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY));
- assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR));
- }
-
- @Test
- public void shouldReturn10thNovember2010time8hour20minWhenConvertViaMiliseconds() {
- // given
- Calendar calendar = Calendar.getInstance();
- calendar.set(2010, 10, 10, 8, 20);
- Date dateToConvert = calendar.getTime();
-
- // when
- LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaMilisecond(dateToConvert);
-
- // then
- assertEquals(2010, localDateTime.get(ChronoField.YEAR));
- assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR));
- assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH));
- assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY));
- assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR));
- }
-
- @Test
- public void shouldReturn10thNovember2010time8hour20minWhenConvertViaSqlTimestamp() {
- // given
- Calendar calendar = Calendar.getInstance();
- calendar.set(2010, 10, 10, 8, 20);
- Date dateToConvert = calendar.getTime();
-
- // when
- LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaSqlTimestamp(dateToConvert);
-
- // then
- assertEquals(2010, localDateTime.get(ChronoField.YEAR));
- assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR));
- assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH));
- assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY));
- assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR));
- }
-
-}
diff --git a/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateConverter.java b/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateConverter.java
index bafa9ebff1..c794c57e87 100644
--- a/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateConverter.java
+++ b/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateConverter.java
@@ -3,18 +3,35 @@
*/
package com.baeldung.java9.datetime;
+import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.Date;
/**
- * Class which shows a way to convert java.util.Date into java.time.LocalDate with new Java 1.9.
+ * Class which shows a way to convert java.util.Date into java.time.LocalDate.
*
* @author abialas
*
*/
public class DateToLocalDateConverter {
+ public static LocalDate convertToLocalDateViaInstant(Date dateToConvert) {
+ return dateToConvert.toInstant()
+ .atZone(ZoneId.systemDefault())
+ .toLocalDate();
+ }
+
+ public static LocalDate convertToLocalDateViaSqlDate(Date dateToConvert) {
+ return new java.sql.Date(dateToConvert.getTime()).toLocalDate();
+ }
+
+ public static LocalDate convertToLocalDateViaMilisecond(Date dateToConvert) {
+ return Instant.ofEpochMilli(dateToConvert.getTime())
+ .atZone(ZoneId.systemDefault())
+ .toLocalDate();
+ }
+
public static LocalDate convertToLocalDate(Date dateToConvert) {
return LocalDate.ofInstant(dateToConvert.toInstant(), ZoneId.systemDefault());
}
diff --git a/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverter.java b/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverter.java
index 538d5a9f63..17ca5b1122 100644
--- a/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverter.java
+++ b/core-java-9/src/main/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverter.java
@@ -3,18 +3,35 @@
*/
package com.baeldung.java9.datetime;
+import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
/**
- * Class which shows a way to convert java.util.Date into java.time.LocalDateTime with new Java 1.9.
+ * Class which shows a way to convert java.util.Date into java.time.LocalDateTime.
*
* @author abialas
*
*/
public class DateToLocalDateTimeConverter {
+ public static LocalDateTime convertToLocalDateTimeViaInstant(Date dateToConvert) {
+ return dateToConvert.toInstant()
+ .atZone(ZoneId.systemDefault())
+ .toLocalDateTime();
+ }
+
+ public static LocalDateTime convertToLocalDateTimeViaSqlTimestamp(Date dateToConvert) {
+ return new java.sql.Timestamp(dateToConvert.getTime()).toLocalDateTime();
+ }
+
+ public static LocalDateTime convertToLocalDateTimeViaMilisecond(Date dateToConvert) {
+ return Instant.ofEpochMilli(dateToConvert.getTime())
+ .atZone(ZoneId.systemDefault())
+ .toLocalDateTime();
+ }
+
public static LocalDateTime convertToLocalDateTime(Date dateToConvert) {
return LocalDateTime.ofInstant(dateToConvert.toInstant(), ZoneId.systemDefault());
}
diff --git a/core-java-8/src/main/java/com/baeldung/datetime/LocalDateTimeToDateConverter.java b/core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverter.java
similarity index 94%
rename from core-java-8/src/main/java/com/baeldung/datetime/LocalDateTimeToDateConverter.java
rename to core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverter.java
index ef72c8b4fb..f219dcf038 100644
--- a/core-java-8/src/main/java/com/baeldung/datetime/LocalDateTimeToDateConverter.java
+++ b/core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverter.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.datetime;
+package com.baeldung.java9.datetime;
import java.time.LocalDateTime;
import java.time.ZoneId;
diff --git a/core-java-8/src/main/java/com/baeldung/datetime/LocalDateToDateConverter.java b/core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateToDateConverter.java
similarity index 94%
rename from core-java-8/src/main/java/com/baeldung/datetime/LocalDateToDateConverter.java
rename to core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateToDateConverter.java
index 8050815799..f9893da5d0 100644
--- a/core-java-8/src/main/java/com/baeldung/datetime/LocalDateToDateConverter.java
+++ b/core-java-9/src/main/java/com/baeldung/java9/datetime/LocalDateToDateConverter.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.datetime;
+package com.baeldung.java9.datetime;
import java.time.LocalDate;
import java.time.ZoneId;
diff --git a/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateConverterTest.java b/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateConverterTest.java
index 2e0fb0dedd..ab69bba359 100644
--- a/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateConverterTest.java
+++ b/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateConverterTest.java
@@ -22,6 +22,54 @@ import com.baeldung.java9.datetime.DateToLocalDateConverter;
*/
public class DateToLocalDateConverterTest {
+ @Test
+ public void shouldReturn10thNovember2010WhenConvertViaInstant() {
+ // given
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(2010, 10, 10);
+ Date dateToConvert = calendar.getTime();
+
+ // when
+ LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaInstant(dateToConvert);
+
+ // then
+ assertEquals(2010, localDate.get(ChronoField.YEAR));
+ assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR));
+ assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH));
+ }
+
+ @Test
+ public void shouldReturn10thNovember2010WhenConvertViaMiliseconds() {
+ // given
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(2010, 10, 10);
+ Date dateToConvert = calendar.getTime();
+
+ // when
+ LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaMilisecond(dateToConvert);
+
+ // then
+ assertEquals(2010, localDate.get(ChronoField.YEAR));
+ assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR));
+ assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH));
+ }
+
+ @Test
+ public void shouldReturn10thNovember2010WhenConvertViaSqlDate() {
+ // given
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(2010, 10, 10);
+ Date dateToConvert = calendar.getTime();
+
+ // when
+ LocalDate localDate = DateToLocalDateConverter.convertToLocalDateViaSqlDate(dateToConvert);
+
+ // then
+ assertEquals(2010, localDate.get(ChronoField.YEAR));
+ assertEquals(11, localDate.get(ChronoField.MONTH_OF_YEAR));
+ assertEquals(10, localDate.get(ChronoField.DAY_OF_MONTH));
+ }
+
@Test
public void shouldReturn10thNovember2010WhenConvertToLocalDate() {
// given
diff --git a/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverterTest.java b/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverterTest.java
index 49988c8b33..97c70ee5ac 100644
--- a/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverterTest.java
+++ b/core-java-9/src/test/java/com/baeldung/java9/datetime/DateToLocalDateTimeConverterTest.java
@@ -29,6 +29,60 @@ public class DateToLocalDateTimeConverterTest {
calendar.set(2010, 10, 10, 8, 20);
Date dateToConvert = calendar.getTime();
+ // when
+ LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaInstant(dateToConvert);
+
+ // then
+ assertEquals(2010, localDateTime.get(ChronoField.YEAR));
+ assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR));
+ assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH));
+ assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY));
+ assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR));
+ }
+
+ @Test
+ public void shouldReturn10thNovember2010time8hour20minWhenConvertViaMiliseconds() {
+ // given
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(2010, 10, 10, 8, 20);
+ Date dateToConvert = calendar.getTime();
+
+ // when
+ LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaMilisecond(dateToConvert);
+
+ // then
+ assertEquals(2010, localDateTime.get(ChronoField.YEAR));
+ assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR));
+ assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH));
+ assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY));
+ assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR));
+ }
+
+ @Test
+ public void shouldReturn10thNovember2010time8hour20minWhenConvertViaSqlTimestamp() {
+ // given
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(2010, 10, 10, 8, 20);
+ Date dateToConvert = calendar.getTime();
+
+ // when
+ LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTimeViaSqlTimestamp(dateToConvert);
+
+ // then
+ assertEquals(2010, localDateTime.get(ChronoField.YEAR));
+ assertEquals(11, localDateTime.get(ChronoField.MONTH_OF_YEAR));
+ assertEquals(10, localDateTime.get(ChronoField.DAY_OF_MONTH));
+ assertEquals(8, localDateTime.get(ChronoField.HOUR_OF_DAY));
+ assertEquals(20, localDateTime.get(ChronoField.MINUTE_OF_HOUR));
+ }
+
+ @Test
+ public void shouldReturn10thNovember2010time8hour20minWhenConvertToLocalDateTime() {
+ // given
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(2010, 10, 10, 8, 20);
+ Date dateToConvert = calendar.getTime();
+
// when
LocalDateTime localDateTime = DateToLocalDateTimeConverter.convertToLocalDateTime(dateToConvert);
diff --git a/core-java-8/src/test/java/com/baeldung/datetime/LocalDateTimeToDateConverterTest.java b/core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverterTest.java
similarity index 97%
rename from core-java-8/src/test/java/com/baeldung/datetime/LocalDateTimeToDateConverterTest.java
rename to core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverterTest.java
index 519fa69f04..2c6898381f 100644
--- a/core-java-8/src/test/java/com/baeldung/datetime/LocalDateTimeToDateConverterTest.java
+++ b/core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateTimeToDateConverterTest.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.datetime;
+package com.baeldung.java9.datetime;
import static org.junit.Assert.assertEquals;
diff --git a/core-java-8/src/test/java/com/baeldung/datetime/LocalDateToDateConverterTest.java b/core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateToDateConverterTest.java
similarity index 97%
rename from core-java-8/src/test/java/com/baeldung/datetime/LocalDateToDateConverterTest.java
rename to core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateToDateConverterTest.java
index c1da3af052..7f20d5d2d2 100644
--- a/core-java-8/src/test/java/com/baeldung/datetime/LocalDateToDateConverterTest.java
+++ b/core-java-9/src/test/java/com/baeldung/java9/datetime/LocalDateToDateConverterTest.java
@@ -1,7 +1,7 @@
/**
*
*/
-package com.baeldung.datetime;
+package com.baeldung.java9.datetime;
import static org.junit.Assert.assertEquals;
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java
new file mode 100644
index 0000000000..9b850c4153
--- /dev/null
+++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Data.java
@@ -0,0 +1,33 @@
+package com.baeldung.concurrent.waitandnotify;
+
+public class Data {
+ private String packet;
+
+ // True if receiver should wait
+ // False if sender should wait
+ private boolean transfer = true;
+
+ public synchronized String receive() {
+ while (transfer) {
+ try {
+ wait();
+ } catch (InterruptedException e) {}
+ }
+ transfer = true;
+
+ notifyAll();
+ return packet;
+ }
+
+ public synchronized void send(String packet) {
+ while (!transfer) {
+ try {
+ wait();
+ } catch (InterruptedException e) {}
+ }
+ transfer = false;
+
+ this.packet = packet;
+ notifyAll();
+ }
+}
\ No newline at end of file
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java
new file mode 100644
index 0000000000..d4fd1574c6
--- /dev/null
+++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/NetworkDriver.java
@@ -0,0 +1,12 @@
+package com.baeldung.concurrent.waitandnotify;
+
+public class NetworkDriver {
+ public static void main(String[] args) {
+ Data data = new Data();
+ Thread sender = new Thread(new Sender(data));
+ Thread receiver = new Thread(new Receiver(data));
+
+ sender.start();
+ receiver.start();
+ }
+}
\ No newline at end of file
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java
new file mode 100644
index 0000000000..63f48b8031
--- /dev/null
+++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Receiver.java
@@ -0,0 +1,25 @@
+package com.baeldung.concurrent.waitandnotify;
+
+import java.util.concurrent.ThreadLocalRandom;
+
+public class Receiver implements Runnable {
+ private Data load;
+
+ public Receiver(Data load) {
+ this.load = load;
+ }
+
+ public void run() {
+ for(String receivedMessage = load.receive();
+ !"End".equals(receivedMessage) ;
+ receivedMessage = load.receive()) {
+
+ System.out.println(receivedMessage);
+
+ //Thread.sleep() to mimic heavy server-side processing
+ try {
+ Thread.sleep(ThreadLocalRandom.current().nextInt(1000, 5000));
+ } catch (InterruptedException e) {}
+ }
+ }
+}
\ No newline at end of file
diff --git a/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java
new file mode 100644
index 0000000000..b7d782c3f5
--- /dev/null
+++ b/core-java-concurrency/src/main/java/com/baeldung/concurrent/waitandnotify/Sender.java
@@ -0,0 +1,30 @@
+package com.baeldung.concurrent.waitandnotify;
+
+import java.util.concurrent.ThreadLocalRandom;
+
+public class Sender implements Runnable {
+ private Data data;
+
+ public Sender(Data data) {
+ this.data = data;
+ }
+
+ public void run() {
+ String packets[] = {
+ "First packet",
+ "Second packet",
+ "Third packet",
+ "Fourth packet",
+ "End"
+ };
+
+ for (String packet : packets) {
+ data.send(packet);
+
+ //Thread.sleep() to mimic heavy server-side processing
+ try {
+ Thread.sleep(ThreadLocalRandom.current().nextInt(1000, 5000));
+ } catch (InterruptedException e) {}
+ }
+ }
+}
\ No newline at end of file
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadTest.java b/core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadTest.java
index 8c1bdbf787..70854f013f 100644
--- a/core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadTest.java
+++ b/core-java-concurrency/src/test/java/com/baeldung/concurrent/stopping/StopThreadTest.java
@@ -1,7 +1,11 @@
package com.baeldung.concurrent.stopping;
+import com.jayway.awaitility.Awaitility;
import org.junit.Test;
+import java.util.concurrent.TimeUnit;
+
+import static com.jayway.awaitility.Awaitility.await;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -22,11 +26,10 @@ public class StopThreadTest {
// Stop it and make sure the flags have been reversed
controlSubThread.stop();
- Thread.sleep(interval);
- assertTrue(controlSubThread.isStopped());
+ await()
+ .until(() -> assertTrue(controlSubThread.isStopped()));
}
-
@Test
public void whenInterruptedThreadIsStopped() throws InterruptedException {
@@ -44,7 +47,8 @@ public class StopThreadTest {
controlSubThread.interrupt();
// Wait less than the time we would normally sleep, and make sure we exited.
- Thread.sleep(interval/10);
- assertTrue(controlSubThread.isStopped());
+ Awaitility.await()
+ .atMost(interval/ 10, TimeUnit.MILLISECONDS)
+ .until(controlSubThread::isStopped);
}
}
diff --git a/core-java-concurrency/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java b/core-java-concurrency/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
new file mode 100644
index 0000000000..49f4313e9d
--- /dev/null
+++ b/core-java-concurrency/src/test/java/com/baeldung/concurrent/waitandnotify/NetworkIntegrationTest.java
@@ -0,0 +1,65 @@
+package com.baeldung.concurrent.waitandnotify;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+public class NetworkIntegrationTest {
+
+ private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
+ private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
+ private String expected;
+
+ @Before
+ public void setUpStreams() {
+ System.setOut(new PrintStream(outContent));
+ System.setErr(new PrintStream(errContent));
+ }
+
+ @Before
+ public void setUpExpectedOutput() {
+ StringWriter expectedStringWriter = new StringWriter();
+
+ PrintWriter printWriter = new PrintWriter(expectedStringWriter);
+ printWriter.println("First packet");
+ printWriter.println("Second packet");
+ printWriter.println("Third packet");
+ printWriter.println("Fourth packet");
+ printWriter.close();
+
+ expected = expectedStringWriter.toString();
+ }
+
+ @After
+ public void cleanUpStreams() {
+ System.setOut(null);
+ System.setErr(null);
+ }
+
+ @Test
+ public void givenSenderAndReceiver_whenSendingPackets_thenNetworkSynchronized() {
+ Data data = new Data();
+ Thread sender = new Thread(new Sender(data));
+ Thread receiver = new Thread(new Receiver(data));
+
+ sender.start();
+ receiver.start();
+
+ //wait for sender and receiver to finish before we test against expected
+ try {
+ sender.join();
+ receiver.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+
+ assertEquals(expected, outContent.toString());
+ }
+}
diff --git a/core-java-sun/.gitignore b/core-java-sun/.gitignore
new file mode 100644
index 0000000000..3de4cc647e
--- /dev/null
+++ b/core-java-sun/.gitignore
@@ -0,0 +1,26 @@
+*.class
+
+0.*
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+.resourceCache
+
+# Packaged files #
+*.jar
+*.war
+*.ear
+
+# Files generated by integration tests
+*.txt
+backup-pom.xml
+/bin/
+/temp
+
+#IntelliJ specific
+.idea/
+*.iml
\ No newline at end of file
diff --git a/core-java-sun/README.md b/core-java-sun/README.md
new file mode 100644
index 0000000000..9cf8b26f1b
--- /dev/null
+++ b/core-java-sun/README.md
@@ -0,0 +1,6 @@
+=========
+
+## Core Java Cookbooks and Examples
+
+### Relevant Articles:
+- [Creating a Java Compiler Plugin](http://www.baeldung.com/java-build-compiler-plugin)
diff --git a/core-java-sun/pom.xml b/core-java-sun/pom.xml
new file mode 100644
index 0000000000..3997f47d19
--- /dev/null
+++ b/core-java-sun/pom.xml
@@ -0,0 +1,489 @@
+
+ 4.0.0
+ com.baeldung
+ core-java-sun
+ 0.1.0-SNAPSHOT
+ jar
+
+ core-java-sun
+
+
+
+
+
+ net.sourceforge.collections
+ collections-generic
+ ${collections-generic.version}
+
+
+ com.google.guava
+ guava
+ ${guava.version}
+
+
+
+ org.apache.commons
+ commons-collections4
+ ${commons-collections4.version}
+
+
+
+ commons-io
+ commons-io
+ ${commons-io.version}
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+
+ org.apache.commons
+ commons-math3
+ ${commons-math3.version}
+
+
+
+ org.decimal4j
+ decimal4j
+ ${decimal4j.version}
+
+
+
+ org.bouncycastle
+ bcprov-jdk15on
+ ${bouncycastle.version}
+
+
+
+ org.unix4j
+ unix4j-command
+ ${unix4j.version}
+
+
+
+ com.googlecode.grep4j
+ grep4j
+ ${grep4j.version}
+
+
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version}
+
+
+
+
+ log4j
+ log4j
+ 1.2.17
+
+
+ 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.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+
+
+
+ org.hamcrest
+ hamcrest-all
+ 1.3
+ test
+
+
+
+ junit
+ junit
+ ${junit.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.mockito
+ mockito-core
+ ${mockito.version}
+ test
+
+
+ com.jayway.awaitility
+ awaitility
+ ${avaitility.version}
+ test
+
+
+
+ commons-codec
+ commons-codec
+ ${commons-codec.version}
+
+
+
+ org.javamoney
+ moneta
+ 1.1
+
+
+
+ org.owasp.esapi
+ esapi
+ 2.1.0.1
+
+
+
+ com.sun.messaging.mq
+ fscontext
+ ${fscontext.version}
+
+
+ com.codepoetics
+ protonpack
+ ${protonpack.version}
+
+
+ one.util
+ streamex
+ ${streamex.version}
+
+
+ io.vavr
+ vavr
+ ${vavr.version}
+
+
+ org.openjdk.jmh
+ jmh-core
+ 1.19
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ 1.19
+
+
+ org.springframework
+ spring-web
+ 4.3.4.RELEASE
+
+
+ com.sun
+ tools
+ 1.8.0
+ system
+ ${java.home}/../lib/tools.jar
+
+
+
+
+ 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
+
+
+ **/*LiveTest.java
+ **/*IntegrationTest.java
+ **/*LongRunningUnitTest.java
+ **/*ManualTest.java
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+
+
+ copy-dependencies
+ prepare-package
+
+ copy-dependencies
+
+
+ ${project.build.directory}/libs
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ true
+ libs/
+ org.baeldung.executable.ExecutableMavenJar
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+
+
+ package
+
+ single
+
+
+ ${project.basedir}
+
+
+ org.baeldung.executable.ExecutableMavenJar
+
+
+
+ jar-with-dependencies
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+
+
+
+ shade
+
+
+ true
+
+
+ org.baeldung.executable.ExecutableMavenJar
+
+
+
+
+
+
+
+
+ com.jolira
+ onejar-maven-plugin
+
+
+
+ org.baeldung.executable.ExecutableMavenJar
+ true
+ ${project.build.finalName}-onejar.${project.packaging}
+
+
+ one-jar
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+ spring-boot
+ org.baeldung.executable.ExecutableMavenJar
+
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 1.6.0
+
+ java
+ com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
+
+ -Xmx300m
+ -XX:+UseParallelGC
+ -classpath
+
+ com.baeldung.outofmemoryerror.OutOfMemoryGCLimitExceed
+
+
+
+
+
+
+
+
+
+
+
+ integration
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ integration-test
+
+ test
+
+
+
+ **/*ManualTest.java
+
+
+ **/*IntegrationTest.java
+
+
+
+
+
+
+ json
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+
+ run-benchmarks
+
+ none
+
+ exec
+
+
+ test
+ java
+
+ -classpath
+
+ org.openjdk.jmh.Main
+ .*
+
+
+
+
+
+
+
+
+
+
+
+
+ 2.8.5
+
+
+ 1.7.21
+ 1.1.7
+
+
+ 23.0
+ 3.5
+ 1.55
+ 1.10
+ 3.6.1
+ 1.0.3
+ 2.5
+ 4.1
+ 4.01
+ 0.4
+ 1.8.7
+ 1.16.12
+ 4.6-b01
+ 1.13
+ 0.6.5
+ 0.9.0
+
+
+ 1.3
+ 4.12
+ 2.8.9
+ 3.6.1
+ 1.7.0
+
+
+ 3.6.0
+ 2.19.1
+
+
\ No newline at end of file
diff --git a/spring-jpa/.gitignore b/core-java-sun/src/main/java/com/baeldung/.gitignore
similarity index 100%
rename from spring-jpa/.gitignore
rename to core-java-sun/src/main/java/com/baeldung/.gitignore
diff --git a/core-java-sun/src/main/java/com/baeldung/README.md b/core-java-sun/src/main/java/com/baeldung/README.md
new file mode 100644
index 0000000000..51809b2882
--- /dev/null
+++ b/core-java-sun/src/main/java/com/baeldung/README.md
@@ -0,0 +1,2 @@
+### Relevant Articles:
+- [SHA-256 Hashing in Java](http://www.baeldung.com/sha-256-hashing-java)
diff --git a/core-java/src/main/java/com/baeldung/javac/Positive.java b/core-java-sun/src/main/java/com/baeldung/javac/Positive.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/javac/Positive.java
rename to core-java-sun/src/main/java/com/baeldung/javac/Positive.java
diff --git a/core-java/src/main/java/com/baeldung/javac/SampleJavacPlugin.java b/core-java-sun/src/main/java/com/baeldung/javac/SampleJavacPlugin.java
similarity index 100%
rename from core-java/src/main/java/com/baeldung/javac/SampleJavacPlugin.java
rename to core-java-sun/src/main/java/com/baeldung/javac/SampleJavacPlugin.java
diff --git a/core-java-sun/src/main/resources/log4j.properties b/core-java-sun/src/main/resources/log4j.properties
new file mode 100644
index 0000000000..621cf01735
--- /dev/null
+++ b/core-java-sun/src/main/resources/log4j.properties
@@ -0,0 +1,6 @@
+log4j.rootLogger=DEBUG, A1
+
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
\ No newline at end of file
diff --git a/spring-jpa/src/main/resources/logback.xml b/core-java-sun/src/main/resources/logback.xml
similarity index 100%
rename from spring-jpa/src/main/resources/logback.xml
rename to core-java-sun/src/main/resources/logback.xml
diff --git a/core-java/src/test/java/com/baeldung/javac/SampleJavacPluginIntegrationTest.java b/core-java-sun/src/test/java/com/baeldung/javac/SampleJavacPluginIntegrationTest.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/javac/SampleJavacPluginIntegrationTest.java
rename to core-java-sun/src/test/java/com/baeldung/javac/SampleJavacPluginIntegrationTest.java
diff --git a/core-java/src/test/java/com/baeldung/javac/SimpleClassFile.java b/core-java-sun/src/test/java/com/baeldung/javac/SimpleClassFile.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/javac/SimpleClassFile.java
rename to core-java-sun/src/test/java/com/baeldung/javac/SimpleClassFile.java
diff --git a/core-java/src/test/java/com/baeldung/javac/SimpleFileManager.java b/core-java-sun/src/test/java/com/baeldung/javac/SimpleFileManager.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/javac/SimpleFileManager.java
rename to core-java-sun/src/test/java/com/baeldung/javac/SimpleFileManager.java
diff --git a/core-java/src/test/java/com/baeldung/javac/SimpleSourceFile.java b/core-java-sun/src/test/java/com/baeldung/javac/SimpleSourceFile.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/javac/SimpleSourceFile.java
rename to core-java-sun/src/test/java/com/baeldung/javac/SimpleSourceFile.java
diff --git a/core-java/src/test/java/com/baeldung/javac/TestCompiler.java b/core-java-sun/src/test/java/com/baeldung/javac/TestCompiler.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/javac/TestCompiler.java
rename to core-java-sun/src/test/java/com/baeldung/javac/TestCompiler.java
diff --git a/core-java/src/test/java/com/baeldung/javac/TestRunner.java b/core-java-sun/src/test/java/com/baeldung/javac/TestRunner.java
similarity index 100%
rename from core-java/src/test/java/com/baeldung/javac/TestRunner.java
rename to core-java-sun/src/test/java/com/baeldung/javac/TestRunner.java
diff --git a/spring-jpa/src/test/resources/.gitignore b/core-java-sun/src/test/resources/.gitignore
similarity index 100%
rename from spring-jpa/src/test/resources/.gitignore
rename to core-java-sun/src/test/resources/.gitignore
diff --git a/core-java/README.md b/core-java/README.md
index 4573d5f7e2..1feee4126e 100644
--- a/core-java/README.md
+++ b/core-java/README.md
@@ -119,4 +119,5 @@
- [Initializing Arrays in Java](http://www.baeldung.com/java-initialize-array)
- [Guide to Java String Pool](http://www.baeldung.com/java-string-pool)
- [Copy a File with Java](http://www.baeldung.com/java-copy-file)
+- [Introduction to Creational Design Patterns](http://www.baeldung.com/creational-design-patterns)
diff --git a/core-java/pom.xml b/core-java/pom.xml
index 77000b8741..2c4cbfc37b 100644
--- a/core-java/pom.xml
+++ b/core-java/pom.xml
@@ -181,11 +181,6 @@
2.1.0.1
-
- com.sun.messaging.mq
- fscontext
- ${fscontext.version}
-
com.codepoetics
protonpack
@@ -216,13 +211,6 @@
spring-web
4.3.4.RELEASE
-
- com.sun
- tools
- 1.8.0
- system
- ${java.home}/../lib/tools.jar
-
diff --git a/core-java/src/main/java/com/baeldung/comparable/Player.java b/core-java/src/main/java/com/baeldung/comparable/Player.java
new file mode 100644
index 0000000000..68a78980f3
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/comparable/Player.java
@@ -0,0 +1,51 @@
+package com.baeldung.comparable;
+
+public class Player implements Comparable {
+
+ private int ranking;
+
+ private String name;
+
+ private int age;
+
+ public Player(int ranking, String name, int age) {
+ this.ranking = ranking;
+ this.name = name;
+ this.age = age;
+ }
+
+ public int getRanking() {
+ return ranking;
+ }
+
+ public void setRanking(int ranking) {
+ this.ranking = ranking;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ @Override
+ public String toString() {
+ return this.name;
+ }
+
+ @Override
+ public int compareTo(Player otherPlayer) {
+ return (this.getRanking() - otherPlayer.getRanking());
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java b/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java
new file mode 100644
index 0000000000..a9b883f579
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/comparable/PlayerSorter.java
@@ -0,0 +1,25 @@
+package com.baeldung.comparable;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class PlayerSorter {
+
+ public static void main(String[] args) {
+
+ List footballTeam = new ArrayList();
+ Player player1 = new Player(59, "John", 20);
+ Player player2 = new Player(67, "Roger", 22);
+ Player player3 = new Player(45, "Steven", 24);
+ footballTeam.add(player1);
+ footballTeam.add(player2);
+ footballTeam.add(player3);
+
+ System.out.println("Before Sorting : " + footballTeam);
+ Collections.sort(footballTeam);
+ System.out.println("After Sorting : " + footballTeam);
+
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/comparator/Player.java b/core-java/src/main/java/com/baeldung/comparator/Player.java
new file mode 100644
index 0000000000..e6e9ee0db6
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/comparator/Player.java
@@ -0,0 +1,46 @@
+package com.baeldung.comparator;
+
+public class Player {
+
+ private int ranking;
+
+ private String name;
+
+ private int age;
+
+ public Player(int ranking, String name, int age) {
+ this.ranking = ranking;
+ this.name = name;
+ this.age = age;
+ }
+
+ public int getRanking() {
+ return ranking;
+ }
+
+ public void setRanking(int ranking) {
+ this.ranking = ranking;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ @Override
+ public String toString() {
+ return this.name;
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java
new file mode 100644
index 0000000000..d2e7ca1f42
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeComparator.java
@@ -0,0 +1,12 @@
+package com.baeldung.comparator;
+
+import java.util.Comparator;
+
+public class PlayerAgeComparator implements Comparator {
+
+ @Override
+ public int compare(Player firstPlayer, Player secondPlayer) {
+ return (firstPlayer.getAge() - secondPlayer.getAge());
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java
new file mode 100644
index 0000000000..3bbbcddb80
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/comparator/PlayerAgeSorter.java
@@ -0,0 +1,27 @@
+package com.baeldung.comparator;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class PlayerAgeSorter {
+
+ public static void main(String[] args) {
+
+ List footballTeam = new ArrayList();
+ Player player1 = new Player(59, "John", 22);
+ Player player2 = new Player(67, "Roger", 20);
+ Player player3 = new Player(45, "Steven", 24);
+ footballTeam.add(player1);
+ footballTeam.add(player2);
+ footballTeam.add(player3);
+
+ System.out.println("Before Sorting : " + footballTeam);
+ //Instance of PlayerAgeComparator
+ PlayerAgeComparator playerComparator = new PlayerAgeComparator();
+ Collections.sort(footballTeam, playerComparator);
+ System.out.println("After Sorting by age : " + footballTeam);
+
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java
new file mode 100644
index 0000000000..2d42698843
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingComparator.java
@@ -0,0 +1,12 @@
+package com.baeldung.comparator;
+
+import java.util.Comparator;
+
+public class PlayerRankingComparator implements Comparator {
+
+ @Override
+ public int compare(Player firstPlayer, Player secondPlayer) {
+ return (firstPlayer.getRanking() - secondPlayer.getRanking());
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java
new file mode 100644
index 0000000000..581585fb7e
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/comparator/PlayerRankingSorter.java
@@ -0,0 +1,27 @@
+package com.baeldung.comparator;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+public class PlayerRankingSorter {
+
+ public static void main(String[] args) {
+
+ List footballTeam = new ArrayList();
+ Player player1 = new Player(59, "John", 22);
+ Player player2 = new Player(67, "Roger", 20);
+ Player player3 = new Player(45, "Steven", 40);
+ footballTeam.add(player1);
+ footballTeam.add(player2);
+ footballTeam.add(player3);
+
+ System.out.println("Before Sorting : " + footballTeam);
+ //Instance of PlayerRankingComparator
+ PlayerRankingComparator playerComparator = new PlayerRankingComparator();
+ Collections.sort(footballTeam, playerComparator);
+ System.out.println("After Sorting by ranking : " + footballTeam);
+
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java b/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java
index 406f0f5274..9f34fe77b9 100644
--- a/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java
+++ b/core-java/src/main/java/com/baeldung/designpatterns/creational/factory/PolygonFactory.java
@@ -11,7 +11,7 @@ public class PolygonFactory {
if(numberOfSides == 5) {
return new Pentagon();
}
- if(numberOfSides == 4) {
+ if(numberOfSides == 7) {
return new Heptagon();
}
else if(numberOfSides == 8) {
@@ -19,4 +19,4 @@ public class PolygonFactory {
}
return null;
}
-}
\ No newline at end of file
+}
diff --git a/core-java/src/main/java/com/baeldung/loops/LoopsInJava.java b/core-java/src/main/java/com/baeldung/loops/LoopsInJava.java
new file mode 100644
index 0000000000..1b2e621b52
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/loops/LoopsInJava.java
@@ -0,0 +1,43 @@
+package com.baeldung.loops;
+
+public class LoopsInJava {
+
+ public int[] simple_for_loop() {
+ int[] arr = new int[5];
+ for (int i = 0; i < 5; i++) {
+ arr[i] = i;
+ System.out.println("Simple for loop: i - " + i);
+ }
+ return arr;
+ }
+
+ public int[] enhanced_for_each_loop() {
+ int[] intArr = { 0, 1, 2, 3, 4 };
+ int[] arr = new int[5];
+ for (int num : intArr) {
+ arr[num] = num;
+ System.out.println("Enhanced for-each loop: i - " + num);
+ }
+ return arr;
+ }
+
+ public int[] while_loop() {
+ int i = 0;
+ int[] arr = new int[5];
+ while (i < 5) {
+ arr[i] = i;
+ System.out.println("While loop: i - " + i++);
+ }
+ return arr;
+ }
+
+ public int[] do_while_loop() {
+ int i = 0;
+ int[] arr = new int[5];
+ do {
+ arr[i] = i;
+ System.out.println("Do-While loop: i - " + i++);
+ } while (i < 5);
+ return arr;
+ }
+}
\ No newline at end of file
diff --git a/core-java/src/main/java/com/baeldung/polymorphism/FileManager.java b/core-java/src/main/java/com/baeldung/polymorphism/FileManager.java
new file mode 100644
index 0000000000..7f2665ff2d
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/polymorphism/FileManager.java
@@ -0,0 +1,38 @@
+package com.baeldung.polymorphism;
+
+import java.awt.image.BufferedImage;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class FileManager {
+
+ final static Logger logger = LoggerFactory.getLogger(FileManager.class);
+
+ public static void main(String[] args) {
+ GenericFile file1 = new TextFile("SampleTextFile", "This is a sample text content", "v1.0.0");
+ logger.info("File Info: \n" + file1.getFileInfo() + "\n");
+ ImageFile imageFile = new ImageFile("SampleImageFile", 200, 100, new BufferedImage(100, 200, BufferedImage.TYPE_INT_RGB).toString()
+ .getBytes(), "v1.0.0");
+ logger.info("File Info: \n" + imageFile.getFileInfo());
+ }
+
+ public static ImageFile createImageFile(String name, int height, int width, byte[] content, String version) {
+ ImageFile imageFile = new ImageFile(name, height, width, content, version);
+ logger.info("File 2 Info: \n" + imageFile.getFileInfo());
+ return imageFile;
+ }
+
+ public static GenericFile createTextFile(String name, String content, String version) {
+ GenericFile file1 = new TextFile(name, content, version);
+ logger.info("File 1 Info: \n" + file1.getFileInfo() + "\n");
+ return file1;
+ }
+
+ public static TextFile createTextFile2(String name, String content, String version) {
+ TextFile file1 = new TextFile(name, content, version);
+ logger.info("File 1 Info: \n" + file1.getFileInfo() + "\n");
+ return file1;
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/polymorphism/GenericFile.java b/core-java/src/main/java/com/baeldung/polymorphism/GenericFile.java
new file mode 100644
index 0000000000..4075083c49
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/polymorphism/GenericFile.java
@@ -0,0 +1,63 @@
+package com.baeldung.polymorphism;
+
+import java.util.Date;
+
+public class GenericFile {
+ private String name;
+ private String extension;
+ private Date dateCreated;
+ private String version;
+ private byte[] content;
+
+ public GenericFile() {
+ this.setDateCreated(new Date());
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getExtension() {
+ return extension;
+ }
+
+ public void setExtension(String extension) {
+ this.extension = extension;
+ }
+
+ public Date getDateCreated() {
+ return dateCreated;
+ }
+
+ public void setDateCreated(Date dateCreated) {
+ this.dateCreated = dateCreated;
+ }
+
+ public String getVersion() {
+ return version;
+ }
+
+ public void setVersion(String version) {
+ this.version = version;
+ }
+
+ public byte[] getContent() {
+ return content;
+ }
+
+ public void setContent(byte[] content) {
+ this.content = content;
+ }
+
+ public String getFileInfo() {
+ return "File Name: " + this.getName() + "\n" + "Extension: " + this.getExtension() + "\n" + "Date Created: " + this.getDateCreated() + "\n" + "Version: " + this.getVersion() + "\n";
+ }
+
+ public Object read() {
+ return content;
+ }
+}
diff --git a/core-java/src/main/java/com/baeldung/polymorphism/ImageFile.java b/core-java/src/main/java/com/baeldung/polymorphism/ImageFile.java
new file mode 100644
index 0000000000..ac72a40993
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/polymorphism/ImageFile.java
@@ -0,0 +1,41 @@
+package com.baeldung.polymorphism;
+
+public class ImageFile extends GenericFile {
+ private int height;
+ private int width;
+
+ public ImageFile(String name, int height, int width, byte[] content, String version) {
+ this.setHeight(height);
+ this.setWidth(width);
+ this.setContent(content);
+ this.setName(name);
+ this.setVersion(version);
+ this.setExtension(".jpg");
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+ public String getFileInfo() {
+ return super.getFileInfo() + "Height: " + this.getHeight() + "\n" + "Width: " + this.getWidth();
+ }
+
+ public String read() {
+ return this.getContent()
+ .toString();
+ }
+
+}
diff --git a/core-java/src/main/java/com/baeldung/polymorphism/TextFile.java b/core-java/src/main/java/com/baeldung/polymorphism/TextFile.java
new file mode 100644
index 0000000000..8280b4ee95
--- /dev/null
+++ b/core-java/src/main/java/com/baeldung/polymorphism/TextFile.java
@@ -0,0 +1,44 @@
+package com.baeldung.polymorphism;
+
+public class TextFile extends GenericFile {
+ private int wordCount;
+
+ public TextFile(String name, String content, String version) {
+ String[] words = content.split(" ");
+ this.setWordCount(words.length > 0 ? words.length : 1);
+ this.setContent(content.getBytes());
+ this.setName(name);
+ this.setVersion(version);
+ this.setExtension(".txt");
+ }
+
+ public int getWordCount() {
+ return wordCount;
+ }
+
+ public void setWordCount(int wordCount) {
+ this.wordCount = wordCount;
+ }
+
+ public String getFileInfo() {
+ return super.getFileInfo() + "Word Count: " + wordCount;
+ }
+
+ public String read() {
+ return this.getContent()
+ .toString();
+ }
+
+ public String read(int limit) {
+ return this.getContent()
+ .toString()
+ .substring(0, limit);
+ }
+
+ public String read(int start, int stop) {
+ return this.getContent()
+ .toString()
+ .substring(start, stop);
+ }
+
+}
diff --git a/core-java/src/main/resources/countries.properties b/core-java/src/main/resources/countries.properties
index 3c1f53aded..50b5e85653 100644
--- a/core-java/src/main/resources/countries.properties
+++ b/core-java/src/main/resources/countries.properties
@@ -1,3 +1,3 @@
UK
US
-Germany
+Germany
\ No newline at end of file
diff --git a/core-java/src/test/java/com/baeldung/arraydeque/ArrayDequeTest.java b/core-java/src/test/java/com/baeldung/arraydeque/ArrayDequeTest.java
new file mode 100644
index 0000000000..50813a8601
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/arraydeque/ArrayDequeTest.java
@@ -0,0 +1,50 @@
+package com.baeldung.arraydeque;
+
+import java.util.ArrayDeque;
+import java.util.Deque;
+
+import static org.junit.Assert.*;
+import org.junit.Test;
+
+public class ArrayDequeTest {
+
+ @Test
+ public void whenOffer_addsAtLast() {
+ final Deque deque = new ArrayDeque<>();
+
+ deque.offer("first");
+ deque.offer("second");
+
+ assertEquals("second", deque.getLast());
+ }
+
+ @Test
+ public void whenPoll_removesFirst() {
+ final Deque deque = new ArrayDeque<>();
+
+ deque.offer("first");
+ deque.offer("second");
+
+ assertEquals("first", deque.poll());
+ }
+
+ @Test
+ public void whenPush_addsAtFirst() {
+ final Deque deque = new ArrayDeque<>();
+
+ deque.push("first");
+ deque.push("second");
+
+ assertEquals("second", deque.getFirst());
+ }
+
+ @Test
+ public void whenPop_removesLast() {
+ final Deque deque = new ArrayDeque<>();
+
+ deque.push("first");
+ deque.push("second");
+
+ assertEquals("second", deque.pop());
+ }
+}
diff --git a/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java b/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java
new file mode 100644
index 0000000000..e8745884b8
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/comparable/ComparableUnitTest.java
@@ -0,0 +1,29 @@
+package com.baeldung.comparable;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Test;
+
+public class ComparableUnitTest {
+
+ @Test
+ public void whenUsingComparable_thenSortedList() {
+ List footballTeam = new ArrayList();
+ Player player1 = new Player(59, "John", 20);
+ Player player2 = new Player(67, "Roger", 22);
+ Player player3 = new Player(45, "Steven", 24);
+ footballTeam.add(player1);
+ footballTeam.add(player2);
+ footballTeam.add(player3);
+ Collections.sort(footballTeam);
+ assertEquals(footballTeam.get(0)
+ .getName(), "Steven");
+ assertEquals(footballTeam.get(2)
+ .getRanking(), 67);
+ }
+
+}
diff --git a/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java b/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java
new file mode 100644
index 0000000000..5b7ec3bfe4
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/comparator/ComparatorUnitTest.java
@@ -0,0 +1,47 @@
+package com.baeldung.comparator;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class ComparatorUnitTest {
+
+ List footballTeam;
+
+ @Before
+ public void setUp() {
+ footballTeam = new ArrayList();
+ Player player1 = new Player(59, "John", 20);
+ Player player2 = new Player(67, "Roger", 22);
+ Player player3 = new Player(45, "Steven", 24);
+ footballTeam.add(player1);
+ footballTeam.add(player2);
+ footballTeam.add(player3);
+ }
+
+ @Test
+ public void whenUsingRankingComparator_thenSortedList() {
+ PlayerRankingComparator playerComparator = new PlayerRankingComparator();
+ Collections.sort(footballTeam, playerComparator);
+ assertEquals(footballTeam.get(0)
+ .getName(), "Steven");
+ assertEquals(footballTeam.get(2)
+ .getRanking(), 67);
+ }
+
+ @Test
+ public void whenUsingAgeComparator_thenSortedList() {
+ PlayerAgeComparator playerComparator = new PlayerAgeComparator();
+ Collections.sort(footballTeam, playerComparator);
+ assertEquals(footballTeam.get(0)
+ .getName(), "John");
+ assertEquals(footballTeam.get(2)
+ .getRanking(), 45);
+ }
+
+}
diff --git a/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java b/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java
new file mode 100644
index 0000000000..49c8749309
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/comparator/Java8ComparatorUnitTest.java
@@ -0,0 +1,68 @@
+package com.baeldung.comparator;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class Java8ComparatorUnitTest {
+
+ List footballTeam;
+
+ @Before
+ public void setUp() {
+ footballTeam = new ArrayList();
+ Player player1 = new Player(59, "John", 22);
+ Player player2 = new Player(67, "Roger", 20);
+ Player player3 = new Player(45, "Steven", 24);
+ footballTeam.add(player1);
+ footballTeam.add(player2);
+ footballTeam.add(player3);
+ }
+
+ @Test
+ public void whenComparing_UsingLambda_thenSorted() {
+ System.out.println("************** Java 8 Comaparator **************");
+ Comparator byRanking = (Player player1, Player player2) -> player1.getRanking() - player2.getRanking();
+
+ System.out.println("Before Sorting : " + footballTeam);
+ Collections.sort(footballTeam, byRanking);
+ System.out.println("After Sorting : " + footballTeam);
+ assertEquals(footballTeam.get(0)
+ .getName(), "Steven");
+ assertEquals(footballTeam.get(2)
+ .getRanking(), 67);
+ }
+
+ @Test
+ public void whenComparing_UsingComparatorComparing_thenSorted() {
+ System.out.println("********* Comaparator.comparing method *********");
+ System.out.println("********* byRanking *********");
+ Comparator byRanking = Comparator.comparing(Player::getRanking);
+
+ System.out.println("Before Sorting : " + footballTeam);
+ Collections.sort(footballTeam, byRanking);
+ System.out.println("After Sorting : " + footballTeam);
+ assertEquals(footballTeam.get(0)
+ .getName(), "Steven");
+ assertEquals(footballTeam.get(2)
+ .getRanking(), 67);
+
+ System.out.println("********* byAge *********");
+ Comparator byAge = Comparator.comparing(Player::getAge);
+
+ System.out.println("Before Sorting : " + footballTeam);
+ Collections.sort(footballTeam, byAge);
+ System.out.println("After Sorting : " + footballTeam);
+ assertEquals(footballTeam.get(0)
+ .getName(), "Roger");
+ assertEquals(footballTeam.get(2)
+ .getRanking(), 45);
+ }
+
+}
diff --git a/core-java/src/test/java/com/baeldung/file/FilesTest.java b/core-java/src/test/java/com/baeldung/file/FilesTest.java
index bd39d004d3..c5a5b8a3a1 100644
--- a/core-java/src/test/java/com/baeldung/file/FilesTest.java
+++ b/core-java/src/test/java/com/baeldung/file/FilesTest.java
@@ -2,14 +2,24 @@ package com.baeldung.file;
import static org.assertj.core.api.Assertions.assertThat;
+import java.io.BufferedWriter;
+import java.io.File;
import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
+import com.google.common.base.Charsets;
+import com.google.common.io.CharSink;
+import com.google.common.io.FileWriteMode;
+import org.apache.commons.io.FileUtils;
import org.junit.After;
+import org.junit.Before;
import org.junit.Test;
import com.baeldung.util.StreamUtils;
@@ -18,6 +28,26 @@ public class FilesTest {
public static final String fileName = "src/main/resources/countries.properties";
+ @Before
+ @After
+ public void setup() throws Exception {
+ PrintWriter writer = new PrintWriter(fileName);
+ writer.print("UK\r\n" + "US\r\n" + "Germany\r\n");
+ writer.close();
+ }
+
+ @Test
+ public void whenAppendToFileUsingGuava_thenCorrect() throws IOException {
+ File file = new File(fileName);
+ CharSink chs = com.google.common.io.Files.asCharSink(file, Charsets.UTF_8, FileWriteMode.APPEND);
+ chs.write("Spain\r\n");
+
+ assertThat(StreamUtils.getStringFromInputStream(
+ new FileInputStream(fileName)))
+ .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
+ }
+
+
@Test
public void whenAppendToFileUsingFiles_thenCorrect() throws IOException {
Files.write(Paths.get(fileName), "Spain\r\n".getBytes(), StandardOpenOption.APPEND);
@@ -27,10 +57,38 @@ public class FilesTest {
.isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}
- @After
- public void revertFile() throws IOException {
- PrintWriter writer = new PrintWriter(fileName);
- writer.print("UK\r\n" + "US\r\n" + "Germany\r\n");
- writer.close();
+ @Test
+ public void whenAppendToFileUsingFileUtils_thenCorrect() throws IOException {
+ File file = new File(fileName);
+ FileUtils.writeStringToFile(file, "Spain\r\n", StandardCharsets.UTF_8, true);
+
+ assertThat(StreamUtils.getStringFromInputStream(
+ new FileInputStream(fileName)))
+ .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
}
-}
+
+ @Test
+ public void whenAppendToFileUsingFileOutputStream_thenCorrect() throws Exception {
+ FileOutputStream fos = new FileOutputStream(fileName, true);
+ fos.write("Spain\r\n".getBytes());
+ fos.close();
+
+ assertThat(StreamUtils.getStringFromInputStream(
+ new FileInputStream(fileName)))
+ .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\r\n");
+ }
+
+ @Test
+ public void whenAppendToFileUsingFileWriter_thenCorrect() throws IOException {
+ FileWriter fw = new FileWriter(fileName, true);
+ BufferedWriter bw = new BufferedWriter(fw);
+ bw.write("Spain");
+ bw.newLine();
+ bw.close();
+
+ assertThat(
+ StreamUtils.getStringFromInputStream(
+ new FileInputStream(fileName)))
+ .isEqualTo("UK\r\n" + "US\r\n" + "Germany\r\n" + "Spain\n");
+ }
+}
\ No newline at end of file
diff --git a/core-java/src/test/java/com/baeldung/loops/WhenUsingLoops.java b/core-java/src/test/java/com/baeldung/loops/WhenUsingLoops.java
new file mode 100644
index 0000000000..9590eabfef
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/loops/WhenUsingLoops.java
@@ -0,0 +1,37 @@
+package com.baeldung.loops;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class WhenUsingLoops {
+
+ private LoopsInJava loops = new LoopsInJava();
+
+ @Test
+ public void shouldRunForLoop() {
+ int[] expected = { 0, 1, 2, 3, 4 };
+ int[] actual = loops.simple_for_loop();
+ Assert.assertArrayEquals(expected, actual);
+ }
+
+ @Test
+ public void shouldRunEnhancedForeachLoop() {
+ int[] expected = { 0, 1, 2, 3, 4 };
+ int[] actual = loops.enhanced_for_each_loop();
+ Assert.assertArrayEquals(expected, actual);
+ }
+
+ @Test
+ public void shouldRunWhileLoop() {
+ int[] expected = { 0, 1, 2, 3, 4 };
+ int[] actual = loops.while_loop();
+ Assert.assertArrayEquals(expected, actual);
+ }
+
+ @Test
+ public void shouldRunDoWhileLoop() {
+ int[] expected = { 0, 1, 2, 3, 4 };
+ int[] actual = loops.do_while_loop();
+ Assert.assertArrayEquals(expected, actual);
+ }
+}
diff --git a/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInner.java b/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInner.java
new file mode 100644
index 0000000000..9fa8ee9cd5
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/nestedclass/AnonymousInner.java
@@ -0,0 +1,20 @@
+package com.baeldung.nestedclass;
+
+import org.junit.Test;
+
+abstract class SimpleAbstractClass {
+ abstract void run();
+}
+
+public class AnonymousInner {
+
+ @Test
+ public void run() {
+ SimpleAbstractClass simpleAbstractClass = new SimpleAbstractClass() {
+ void run() {
+ System.out.println("Running Anonymous Class...");
+ }
+ };
+ simpleAbstractClass.run();
+ }
+}
\ No newline at end of file
diff --git a/core-java/src/test/java/com/baeldung/nestedclass/Enclosing.java b/core-java/src/test/java/com/baeldung/nestedclass/Enclosing.java
new file mode 100644
index 0000000000..3db33cde9b
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/nestedclass/Enclosing.java
@@ -0,0 +1,21 @@
+package com.baeldung.nestedclass;
+
+import org.junit.Test;
+
+public class Enclosing {
+
+ private static int x = 1;
+
+ public static class StaticNested {
+
+ private void run() {
+ System.out.println("x = " + x);
+ }
+ }
+
+ @Test
+ public void test() {
+ Enclosing.StaticNested nested = new Enclosing.StaticNested();
+ nested.run();
+ }
+}
diff --git a/core-java/src/test/java/com/baeldung/nestedclass/NewEnclosing.java b/core-java/src/test/java/com/baeldung/nestedclass/NewEnclosing.java
new file mode 100644
index 0000000000..deeb72de0c
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/nestedclass/NewEnclosing.java
@@ -0,0 +1,22 @@
+package com.baeldung.nestedclass;
+
+import org.junit.Test;
+
+public class NewEnclosing {
+
+ private void run() {
+ class Local {
+ void run() {
+ System.out.println("Welcome to Baeldung!");
+ }
+ }
+ Local local = new Local();
+ local.run();
+ }
+
+ @Test
+ public void test() {
+ NewEnclosing newEnclosing = new NewEnclosing();
+ newEnclosing.run();
+ }
+}
\ No newline at end of file
diff --git a/core-java/src/test/java/com/baeldung/nestedclass/NewOuter.java b/core-java/src/test/java/com/baeldung/nestedclass/NewOuter.java
new file mode 100644
index 0000000000..a3a723b30e
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/nestedclass/NewOuter.java
@@ -0,0 +1,30 @@
+package com.baeldung.nestedclass;
+
+import org.junit.Test;
+
+public class NewOuter {
+
+ int a = 1;
+ static int b = 2;
+
+ public class InnerClass {
+ int a = 3;
+ static final int b = 4;
+
+ public void run() {
+ System.out.println("a = " + a);
+ System.out.println("b = " + b);
+ System.out.println("NewOuterTest.this.a = " + NewOuter.this.a);
+ System.out.println("NewOuterTest.b = " + NewOuter.b);
+ System.out.println("NewOuterTest.this.b = " + NewOuter.this.b);
+ }
+ }
+
+ @Test
+ public void test() {
+ NewOuter outer = new NewOuter();
+ NewOuter.InnerClass inner = outer.new InnerClass();
+ inner.run();
+
+ }
+}
\ No newline at end of file
diff --git a/core-java/src/test/java/com/baeldung/nestedclass/Outer.java b/core-java/src/test/java/com/baeldung/nestedclass/Outer.java
new file mode 100644
index 0000000000..d5e46670c9
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/nestedclass/Outer.java
@@ -0,0 +1,20 @@
+package com.baeldung.nestedclass;
+
+import org.junit.Test;
+
+public class Outer {
+
+ public class Inner {
+
+ public void run() {
+ System.out.println("Calling test...");
+ }
+ }
+
+ @Test
+ public void test() {
+ Outer outer = new Outer();
+ Outer.Inner inner = outer.new Inner();
+ inner.run();
+ }
+}
diff --git a/core-java/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java b/core-java/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java
new file mode 100644
index 0000000000..8fb606c2fc
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/polymorphism/PolymorphismUnitTest.java
@@ -0,0 +1,34 @@
+package com.baeldung.polymorphism;
+
+import static org.junit.Assert.*;
+
+import java.awt.image.BufferedImage;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class PolymorphismUnitTest {
+
+ @Test
+ public void givenImageFile_whenFileCreated_shouldSucceed() {
+ ImageFile imageFile = FileManager.createImageFile("SampleImageFile", 200, 100, new BufferedImage(100, 200, BufferedImage.TYPE_INT_RGB).toString()
+ .getBytes(), "v1.0.0");
+ assertEquals(200, imageFile.getHeight());
+ }
+
+ // Downcasting then Upcasting
+ @Test
+ public void givenTextFile_whenTextFileCreatedAndAssignedToGenericFileAndCastBackToTextFileOnGetWordCount_shouldSucceed() {
+ GenericFile textFile = FileManager.createTextFile("SampleTextFile", "This is a sample text content", "v1.0.0");
+ TextFile textFile2 = (TextFile) textFile;
+ assertEquals(6, textFile2.getWordCount());
+ }
+
+ // Downcasting
+ @Test(expected = ClassCastException.class)
+ public void givenGenericFile_whenCastToTextFileAndInvokeGetWordCount_shouldFail() {
+ GenericFile genericFile = new GenericFile();
+ TextFile textFile = (TextFile) genericFile;
+ System.out.println(textFile.getWordCount());
+ }
+}
diff --git a/core-java/src/test/java/com/baeldung/varargs/FormatterTest.java b/core-java/src/test/java/com/baeldung/varargs/FormatterTest.java
new file mode 100644
index 0000000000..509c8764d2
--- /dev/null
+++ b/core-java/src/test/java/com/baeldung/varargs/FormatterTest.java
@@ -0,0 +1,60 @@
+package com.baeldung.varargs;
+
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+public class FormatterTest {
+
+ private final static String FORMAT = "%s %s %s";
+
+ @Test
+ public void givenNoArgument_thenEmptyAndTwoSpacesAreReturned() {
+ String actualResult = format();
+
+ assertThat(actualResult, is("empty "));
+ }
+
+ @Test
+ public void givenOneArgument_thenResultHasTwoTrailingSpace() {
+ String actualResult = format("baeldung");
+
+ assertThat(actualResult, is("baeldung "));
+ }
+
+ @Test
+ public void givenTwoArguments_thenOneTrailingSpaceExists() {
+ String actualResult = format("baeldung", "rocks");
+
+ assertThat(actualResult, is("baeldung rocks "));
+ }
+
+ @Test
+ public void givenMoreThanThreeArguments_thenTheFirstThreeAreUsed() {
+ String actualResult = formatWithVarArgs("baeldung", "rocks", "java", "and", "spring");
+
+ assertThat(actualResult, is("baeldung rocks java"));
+ }
+
+ public String format() {
+ return format("empty", "");
+ }
+
+ public String format(String value) {
+ return format(value, "");
+ }
+
+ public String format(String val1, String val2) {
+ return String.format(FORMAT, val1, val2, "");
+ }
+
+ public String formatWithVarArgs(String... values) {
+ if (values.length == 0) {
+ return "no arguments given";
+ }
+
+ return String.format(FORMAT, values);
+ }
+
+}
\ No newline at end of file
diff --git a/guava-modules/guava-18/pom.xml b/guava-modules/guava-18/pom.xml
index a9aba47f12..f8dbf5657e 100644
--- a/guava-modules/guava-18/pom.xml
+++ b/guava-modules/guava-18/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/guava-modules/guava-19/pom.xml b/guava-modules/guava-19/pom.xml
index 2345212eba..4a23bf7aec 100644
--- a/guava-modules/guava-19/pom.xml
+++ b/guava-modules/guava-19/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/guava-modules/guava-21/pom.xml b/guava-modules/guava-21/pom.xml
index 94bb66e76a..f5432fb7df 100644
--- a/guava-modules/guava-21/pom.xml
+++ b/guava-modules/guava-21/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/hibernate5/pom.xml b/hibernate5/pom.xml
index 8543d1dae3..3b0b2fcd88 100644
--- a/hibernate5/pom.xml
+++ b/hibernate5/pom.xml
@@ -17,12 +17,15 @@
UTF-8
3.6.0
-
+ 5.2.12.Final
+ 6.0.6
+ 2.2.3
+
org.hibernate
hibernate-core
- 5.2.12.Final
+ ${hibernate.version}
junit
@@ -40,6 +43,21 @@
h2
1.4.194
+
+ org.hibernate
+ hibernate-spatial
+ ${hibernate.version}
+
+
+ mysql
+ mysql-connector-java
+ ${mysql.version}
+
+
+ ch.vorburger.mariaDB4j
+ mariaDB4j
+ ${mariaDB4j.version}
+
hibernate5
diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java
index c3bf8c2aa9..f1fc22d29a 100644
--- a/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java
+++ b/hibernate5/src/main/java/com/baeldung/hibernate/HibernateUtil.java
@@ -5,6 +5,7 @@ import com.baeldung.hibernate.pojo.EntityDescription;
import com.baeldung.hibernate.pojo.OrderEntry;
import com.baeldung.hibernate.pojo.OrderEntryIdClass;
import com.baeldung.hibernate.pojo.OrderEntryPK;
+import com.baeldung.hibernate.pojo.PointEntity;
import com.baeldung.hibernate.pojo.Product;
import com.baeldung.hibernate.pojo.Phone;
import com.baeldung.hibernate.pojo.TemporalValues;
@@ -23,6 +24,7 @@ import com.baeldung.hibernate.pojo.inheritance.Person;
import com.baeldung.hibernate.pojo.inheritance.Pet;
import com.baeldung.hibernate.pojo.inheritance.Vehicle;
+import org.apache.commons.lang3.StringUtils;
import org.hibernate.SessionFactory;
import org.hibernate.boot.Metadata;
import org.hibernate.boot.MetadataSources;
@@ -36,8 +38,14 @@ import java.util.Properties;
public class HibernateUtil {
private static SessionFactory sessionFactory;
+ private static String PROPERTY_FILE_NAME;
public static SessionFactory getSessionFactory() throws IOException {
+ return getSessionFactory(null);
+ }
+
+ public static SessionFactory getSessionFactory(String propertyFileName) throws IOException {
+ PROPERTY_FILE_NAME = propertyFileName;
if (sessionFactory == null) {
ServiceRegistry serviceRegistry = configureServiceRegistry();
sessionFactory = makeSessionFactory(serviceRegistry);
@@ -70,6 +78,7 @@ public class HibernateUtil {
metadataSources.addAnnotatedClass(Vehicle.class);
metadataSources.addAnnotatedClass(Car.class);
metadataSources.addAnnotatedClass(Bag.class);
+ metadataSources.addAnnotatedClass(PointEntity.class);
Metadata metadata = metadataSources.buildMetadata();
return metadata.getSessionFactoryBuilder()
@@ -86,12 +95,11 @@ public class HibernateUtil {
private static Properties getProperties() throws IOException {
Properties properties = new Properties();
URL propertiesURL = Thread.currentThread()
- .getContextClassLoader()
- .getResource("hibernate.properties");
+ .getContextClassLoader()
+ .getResource(StringUtils.defaultString(PROPERTY_FILE_NAME, "hibernate.properties"));
try (FileInputStream inputStream = new FileInputStream(propertiesURL.getFile())) {
properties.load(inputStream);
}
return properties;
}
-
}
\ No newline at end of file
diff --git a/hibernate5/src/main/java/com/baeldung/hibernate/pojo/PointEntity.java b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/PointEntity.java
new file mode 100644
index 0000000000..223f5dcbde
--- /dev/null
+++ b/hibernate5/src/main/java/com/baeldung/hibernate/pojo/PointEntity.java
@@ -0,0 +1,41 @@
+package com.baeldung.hibernate.pojo;
+
+import com.vividsolutions.jts.geom.Point;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Entity
+public class PointEntity {
+
+ @Id
+ @GeneratedValue
+ private Long id;
+
+ private Point point;
+
+ public PointEntity() {
+ }
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public Point getPoint() {
+ return point;
+ }
+
+ public void setPoint(Point point) {
+ this.point = point;
+ }
+
+ @Override
+ public String toString() {
+ return "PointEntity{" + "id=" + id + ", point=" + point + '}';
+ }
+}
diff --git a/hibernate5/src/test/java/com/baeldung/hibernate/HibernateSpatialTest.java b/hibernate5/src/test/java/com/baeldung/hibernate/HibernateSpatialTest.java
new file mode 100644
index 0000000000..6d0aa0a4cd
--- /dev/null
+++ b/hibernate5/src/test/java/com/baeldung/hibernate/HibernateSpatialTest.java
@@ -0,0 +1,97 @@
+package com.baeldung.hibernate;
+
+import com.baeldung.hibernate.pojo.PointEntity;
+import com.vividsolutions.jts.geom.Geometry;
+import com.vividsolutions.jts.geom.Point;
+import com.vividsolutions.jts.io.ParseException;
+import com.vividsolutions.jts.io.WKTReader;
+import org.hibernate.Session;
+import org.hibernate.Transaction;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.persistence.Query;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class HibernateSpatialTest {
+
+ private Session session;
+ private Transaction transaction;
+
+ @Before
+ public void setUp() throws IOException {
+ session = HibernateUtil.getSessionFactory("hibernate-spatial.properties")
+ .openSession();
+ transaction = session.beginTransaction();
+ }
+
+ @After
+ public void tearDown() {
+ transaction.rollback();
+ session.close();
+ }
+
+ @Test
+ public void shouldConvertWktToGeometry() throws ParseException {
+ Geometry geometry = wktToGeometry("POINT (2 5)");
+ assertEquals("Point", geometry.getGeometryType());
+ assertTrue(geometry instanceof Point);
+ }
+
+ @Test
+ public void shouldInsertAndSelectPoints() throws ParseException {
+ PointEntity entity = new PointEntity();
+ entity.setPoint((Point) wktToGeometry("POINT (1 1)"));
+
+ session.persist(entity);
+ PointEntity fromDb = session.find(PointEntity.class, entity.getId());
+ assertEquals("POINT (1 1)", fromDb.getPoint().toString());
+ }
+
+ @Test
+ public void shouldSelectDisjointPoints() throws ParseException {
+ insertPoint("POINT (1 2)");
+ insertPoint("POINT (3 4)");
+ insertPoint("POINT (5 6)");
+
+ Point point = (Point) wktToGeometry("POINT (3 4)");
+ Query query = session.createQuery("select p from PointEntity p "
+ + "where disjoint(p.point, :point) = true", PointEntity.class);
+ query.setParameter("point", point);
+ assertEquals("POINT (1 2)", ((PointEntity) query.getResultList().get(0)).getPoint().toString());
+ assertEquals("POINT (5 6)", ((PointEntity) query.getResultList().get(1)).getPoint().toString());
+ }
+
+ @Test
+ public void shouldSelectAllPointsWithinPolygon() throws ParseException {
+ insertPoint("POINT (1 1)");
+ insertPoint("POINT (1 2)");
+ insertPoint("POINT (3 4)");
+ insertPoint("POINT (5 6)");
+
+ Query query = session.createQuery("select p from PointEntity p where within(p.point, :area) = true",
+ PointEntity.class);
+ query.setParameter("area", wktToGeometry("POLYGON((0 0, 0 5, 5 5, 5 0, 0 0))"));
+ assertEquals(3, query.getResultList().size());
+ assertEquals("POINT (1 1)", ((PointEntity) query.getResultList().get(0)).getPoint().toString());
+ assertEquals("POINT (1 2)", ((PointEntity) query.getResultList().get(1)).getPoint().toString());
+ assertEquals("POINT (3 4)", ((PointEntity) query.getResultList().get(2)).getPoint().toString());
+ }
+
+ private void insertPoint(String point) throws ParseException {
+ PointEntity entity = new PointEntity();
+ entity.setPoint((Point) wktToGeometry(point));
+ session.persist(entity);
+ }
+
+ private Geometry wktToGeometry(String wellKnownText) throws ParseException {
+ WKTReader fromText = new WKTReader();
+ Geometry geom = null;
+ geom = fromText.read(wellKnownText);
+ return geom;
+ }
+}
diff --git a/hibernate5/src/test/resources/hibernate-spatial.properties b/hibernate5/src/test/resources/hibernate-spatial.properties
new file mode 100644
index 0000000000..e85cd49cc3
--- /dev/null
+++ b/hibernate5/src/test/resources/hibernate-spatial.properties
@@ -0,0 +1,10 @@
+hibernate.dialect=org.hibernate.spatial.dialect.mysql.MySQL56SpatialDialect
+hibernate.connection.driver_class=com.mysql.jdbc.Driver
+hibernate.connection.url=jdbc:mysql://localhost:3306/hibernate-spatial
+hibernate.connection.username=root
+hibernate.connection.password=pass
+hibernate.connection.pool_size=5
+hibernate.show_sql=true
+hibernate.format_sql=true
+hibernate.max_fetch_depth=5
+hibernate.hbm2ddl.auto=create-drop
\ No newline at end of file
diff --git a/libraries/helloWorld.docx b/libraries/helloWorld.docx
new file mode 100644
index 0000000000..a58ff2d80a
Binary files /dev/null and b/libraries/helloWorld.docx differ
diff --git a/logging-modules/log-mdc/pom.xml b/logging-modules/log-mdc/pom.xml
index 918e052a15..5551585372 100644
--- a/logging-modules/log-mdc/pom.xml
+++ b/logging-modules/log-mdc/pom.xml
@@ -12,7 +12,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/logging-modules/log4j/README.md b/logging-modules/log4j/README.md
index 3c0258142c..8aae1b5826 100644
--- a/logging-modules/log4j/README.md
+++ b/logging-modules/log4j/README.md
@@ -2,6 +2,5 @@
- [Introduction to Java Logging](http://www.baeldung.com/java-logging-intro)
- [Introduction to SLF4J](http://www.baeldung.com/slf4j-with-log4j2-logback)
- [Generate equals() and hashCode() with Eclipse](http://www.baeldung.com/java-eclipse-equals-and-hashcode)
-- [A Guide To Java Regular Expressions API](http://www.baeldung.com/regular-expressions-java)
- [Introduction to SLF4J](http://www.baeldung.com/slf4j-with-log4j2-logback)
- [A Guide to Rolling File Appenders](http://www.baeldung.com/java-logging-rolling-file-appenders)
diff --git a/logging-modules/log4j/pom.xml b/logging-modules/log4j/pom.xml
index a3bfb0a33a..6a3fbde393 100644
--- a/logging-modules/log4j/pom.xml
+++ b/logging-modules/log4j/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/logging-modules/log4j2/pom.xml b/logging-modules/log4j2/pom.xml
index 58bc4b74e7..48608fbc80 100644
--- a/logging-modules/log4j2/pom.xml
+++ b/logging-modules/log4j2/pom.xml
@@ -9,7 +9,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/lucene/pom.xml b/lucene/pom.xml
index 42b81a7d4a..6659d9ac32 100644
--- a/lucene/pom.xml
+++ b/lucene/pom.xml
@@ -31,7 +31,5 @@
4.12
test
-
-
\ No newline at end of file
diff --git a/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java b/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java
index 40a35fad86..97b1ec7b5d 100644
--- a/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java
+++ b/lucene/src/main/java/com/baeldung/lucene/InMemoryLuceneIndex.java
@@ -7,18 +7,22 @@ import java.util.List;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
+import org.apache.lucene.document.SortedDocValuesField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
+import org.apache.lucene.index.Term;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.Sort;
import org.apache.lucene.search.TopDocs;
import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.BytesRef;
public class InMemoryLuceneIndex {
@@ -45,6 +49,7 @@ public class InMemoryLuceneIndex {
document.add(new TextField("title", title, Field.Store.YES));
document.add(new TextField("body", body, Field.Store.YES));
+ document.add(new SortedDocValuesField("title", new BytesRef(title)));
writter.addDocument(document);
writter.close();
@@ -73,6 +78,51 @@ public class InMemoryLuceneIndex {
}
+ public void deleteDocument(Term term) {
+ try {
+ IndexWriterConfig indexWriterConfig = new IndexWriterConfig(analyzer);
+ IndexWriter writter = new IndexWriter(memoryIndex, indexWriterConfig);
+ writter.deleteDocuments(term);
+ writter.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public List searchIndex(Query query) {
+ try {
+ IndexReader indexReader = DirectoryReader.open(memoryIndex);
+ IndexSearcher searcher = new IndexSearcher(indexReader);
+ TopDocs topDocs = searcher.search(query, 10);
+ List documents = new ArrayList<>();
+ for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
+ documents.add(searcher.doc(scoreDoc.doc));
+ }
+
+ return documents;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+
+ }
+
+ public List searchIndex(Query query, Sort sort) {
+ try {
+ IndexReader indexReader = DirectoryReader.open(memoryIndex);
+ IndexSearcher searcher = new IndexSearcher(indexReader);
+ TopDocs topDocs = searcher.search(query, 10, sort);
+ List documents = new ArrayList<>();
+ for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
+ documents.add(searcher.doc(scoreDoc.doc));
+ }
+
+ return documents;
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return null;
+
+ }
+
}
-
-
diff --git a/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java b/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java
index c3a498a4b8..acf688cb99 100644
--- a/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java
+++ b/lucene/src/test/java/com/baeldung/lucene/LuceneInMemorySearchTest.java
@@ -4,7 +4,19 @@ import java.util.List;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.FuzzyQuery;
+import org.apache.lucene.search.PhraseQuery;
+import org.apache.lucene.search.PrefixQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Sort;
+import org.apache.lucene.search.SortField;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.search.WildcardQuery;
import org.apache.lucene.store.RAMDirectory;
+import org.apache.lucene.util.BytesRef;
import org.junit.Assert;
import org.junit.Test;
@@ -20,4 +32,121 @@ public class LuceneInMemorySearchTest {
Assert.assertEquals("Hello world", documents.get(0).get("title"));
}
-}
+ @Test
+ public void givenTermQueryWhenFetchedDocumentThenCorrect() {
+ InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer());
+ inMemoryLuceneIndex.indexDocument("activity", "running in track");
+ inMemoryLuceneIndex.indexDocument("activity", "Cars are running on road");
+
+ Term term = new Term("body", "running");
+ Query query = new TermQuery(term);
+
+ List documents = inMemoryLuceneIndex.searchIndex(query);
+ Assert.assertEquals(2, documents.size());
+ }
+
+ @Test
+ public void givenPrefixQueryWhenFetchedDocumentThenCorrect() {
+ InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer());
+ inMemoryLuceneIndex.indexDocument("article", "Lucene introduction");
+ inMemoryLuceneIndex.indexDocument("article", "Introduction to Lucene");
+
+ Term term = new Term("body", "intro");
+ Query query = new PrefixQuery(term);
+
+ List documents = inMemoryLuceneIndex.searchIndex(query);
+ Assert.assertEquals(2, documents.size());
+ }
+
+ @Test
+ public void givenBooleanQueryWhenFetchedDocumentThenCorrect() {
+ InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer());
+ inMemoryLuceneIndex.indexDocument("Destination", "Las Vegas singapore car");
+ inMemoryLuceneIndex.indexDocument("Commutes in singapore", "Bus Car Bikes");
+
+ Term term1 = new Term("body", "singapore");
+ Term term2 = new Term("body", "car");
+
+ TermQuery query1 = new TermQuery(term1);
+ TermQuery query2 = new TermQuery(term2);
+
+ BooleanQuery booleanQuery = new BooleanQuery.Builder().add(query1, BooleanClause.Occur.MUST)
+ .add(query2, BooleanClause.Occur.MUST).build();
+
+ List documents = inMemoryLuceneIndex.searchIndex(booleanQuery);
+ Assert.assertEquals(1, documents.size());
+ }
+
+ @Test
+ public void givenPhraseQueryWhenFetchedDocumentThenCorrect() {
+ InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer());
+ inMemoryLuceneIndex.indexDocument("quotes", "A rose by any other name would smell as sweet.");
+
+ Query query = new PhraseQuery(1, "body", new BytesRef("smell"), new BytesRef("sweet"));
+ List documents = inMemoryLuceneIndex.searchIndex(query);
+
+ Assert.assertEquals(1, documents.size());
+ }
+
+ @Test
+ public void givenFuzzyQueryWhenFetchedDocumentThenCorrect() {
+ InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer());
+ inMemoryLuceneIndex.indexDocument("article", "Halloween Festival");
+ inMemoryLuceneIndex.indexDocument("decoration", "Decorations for Halloween");
+
+ Term term = new Term("body", "hallowen");
+ Query query = new FuzzyQuery(term);
+
+ List documents = inMemoryLuceneIndex.searchIndex(query);
+ Assert.assertEquals(2, documents.size());
+ }
+
+ @Test
+ public void givenWildCardQueryWhenFetchedDocumentThenCorrect() {
+ InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer());
+ inMemoryLuceneIndex.indexDocument("article", "Lucene introduction");
+ inMemoryLuceneIndex.indexDocument("article", "Introducing Lucene with Spring");
+
+ Term term = new Term("body", "intro*");
+ Query query = new WildcardQuery(term);
+
+ List documents = inMemoryLuceneIndex.searchIndex(query);
+ Assert.assertEquals(2, documents.size());
+ }
+
+ @Test
+ public void givenSortFieldWhenSortedThenCorrect() {
+ InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer());
+ inMemoryLuceneIndex.indexDocument("Ganges", "River in India");
+ inMemoryLuceneIndex.indexDocument("Mekong", "This river flows in south Asia");
+ inMemoryLuceneIndex.indexDocument("Amazon", "Rain forest river");
+ inMemoryLuceneIndex.indexDocument("Rhine", "Belongs to Europe");
+ inMemoryLuceneIndex.indexDocument("Nile", "Longest River");
+
+ Term term = new Term("body", "river");
+ Query query = new WildcardQuery(term);
+
+ SortField sortField = new SortField("title", SortField.Type.STRING_VAL, false);
+ Sort sortByTitle = new Sort(sortField);
+
+ List documents = inMemoryLuceneIndex.searchIndex(query, sortByTitle);
+ Assert.assertEquals(4, documents.size());
+ Assert.assertEquals("Amazon", documents.get(0).getField("title").stringValue());
+ }
+
+ @Test
+ public void whenDocumentDeletedThenCorrect() {
+ InMemoryLuceneIndex inMemoryLuceneIndex = new InMemoryLuceneIndex(new RAMDirectory(), new StandardAnalyzer());
+ inMemoryLuceneIndex.indexDocument("Ganges", "River in India");
+ inMemoryLuceneIndex.indexDocument("Mekong", "This river flows in south Asia");
+
+ Term term = new Term("title", "ganges");
+ inMemoryLuceneIndex.deleteDocument(term);
+
+ Query query = new TermQuery(term);
+
+ List documents = inMemoryLuceneIndex.searchIndex(query);
+ Assert.assertEquals(0, documents.size());
+ }
+
+}
\ No newline at end of file
diff --git a/muleesb/.gitignore b/muleesb/.gitignore
new file mode 100644
index 0000000000..541f92c42e
--- /dev/null
+++ b/muleesb/.gitignore
@@ -0,0 +1 @@
+# Add any directories, files, or patterns you don't want to be tracked by version control
\ No newline at end of file
diff --git a/muleesb/.mule/objectstore/b2fe1a90-c473-11e7-8eb5-98e7f44e8ac8/partition-descriptor b/muleesb/.mule/objectstore/b2fe1a90-c473-11e7-8eb5-98e7f44e8ac8/partition-descriptor
new file mode 100644
index 0000000000..0b8060f303
--- /dev/null
+++ b/muleesb/.mule/objectstore/b2fe1a90-c473-11e7-8eb5-98e7f44e8ac8/partition-descriptor
@@ -0,0 +1 @@
+DEFAULT_PARTITION
\ No newline at end of file
diff --git a/muleesb/.mule/queue-tx-log/tx1.log b/muleesb/.mule/queue-tx-log/tx1.log
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/muleesb/.mule/queue-tx-log/tx2.log b/muleesb/.mule/queue-tx-log/tx2.log
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/muleesb/.mule/queue-xa-tx-log/tx1.log b/muleesb/.mule/queue-xa-tx-log/tx1.log
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/muleesb/.mule/queue-xa-tx-log/tx2.log b/muleesb/.mule/queue-xa-tx-log/tx2.log
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/muleesb/mule-project.xml b/muleesb/mule-project.xml
new file mode 100644
index 0000000000..0d522b0141
--- /dev/null
+++ b/muleesb/mule-project.xml
@@ -0,0 +1,5 @@
+
+
+ muleesb
+
+
diff --git a/muleesb/pom.xml b/muleesb/pom.xml
new file mode 100644
index 0000000000..2c88bf83da
--- /dev/null
+++ b/muleesb/pom.xml
@@ -0,0 +1,214 @@
+
+
+
+ 4.0.0
+ com.mycompany
+ muleesb
+ 1.0.0-SNAPSHOT
+ mule
+ Mule muleesb Application
+
+
+ UTF-8
+ UTF-8
+
+ 3.8.1
+ 1.2
+ 1.3.6
+ 3.9.0
+
+
+
+
+
+ org.mule.tools.maven
+ mule-app-maven-plugin
+ ${mule.tools.version}
+ true
+
+ true
+
+
+
+ org.mule.tools
+ muleesb-maven-plugin
+ 1.0
+
+ 3.7.0
+ /home/abir/AnypointStudio/workspace/variablescopetest
+
+
+
+ deploy
+
+ start
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.7
+
+
+ add-resource
+ generate-resources
+
+ add-resource
+
+
+
+
+ src/main/app/
+
+
+ mappings/
+
+
+ src/main/api/
+
+
+
+
+
+
+
+ com.mulesoft.munit.tools
+ munit-maven-plugin
+ ${munit.version}
+
+
+ test
+ test
+
+ test
+
+
+
+
+
+ true
+
+ html
+
+
+
+
+
+
+
+ src/test/munit
+
+
+ src/test/resources
+
+
+
+
+
+
+
+
+ org.mule.modules
+ mule-module-spring-config
+ ${mule.version}
+ provided
+
+
+
+ org.mule.transports
+ mule-transport-file
+ ${mule.version}
+ provided
+
+
+ org.mule.transports
+ mule-transport-http
+ ${mule.version}
+ provided
+
+
+ org.mule.transports
+ mule-transport-jdbc
+ ${mule.version}
+ provided
+
+
+ org.mule.transports
+ mule-transport-jms
+ ${mule.version}
+ provided
+
+
+ org.mule.transports
+ mule-transport-vm
+ ${mule.version}
+ provided
+
+
+
+ org.mule.modules
+ mule-module-scripting
+ ${mule.version}
+ provided
+
+
+ org.mule.modules
+ mule-module-xml
+ ${mule.version}
+ provided
+
+
+
+ org.mule.tests
+ mule-tests-functional
+ ${mule.version}
+ test
+
+
+ org.mule.modules
+ mule-module-apikit
+ ${mule.version}
+ provided
+
+
+ com.mulesoft.munit
+ mule-munit-support
+ ${mule.munit.support.version}
+ test
+
+
+ com.mulesoft.munit
+ munit-runner
+ ${munit.version}
+ test
+
+
+
+
+
+ Central
+ Central
+ http://repo1.maven.org/maven2/
+ default
+
+
+ mulesoft-releases
+ MuleSoft Releases Repository
+ http://repository.mulesoft.org/releases/
+ default
+
+
+
+
+ mulesoft-release
+ mulesoft release repository
+ default
+ http://repository.mulesoft.org/releases/
+
+ false
+
+
+
+
diff --git a/muleesb/src/main/app/mule-app.properties b/muleesb/src/main/app/mule-app.properties
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/muleesb/src/main/app/mule-deploy.properties b/muleesb/src/main/app/mule-deploy.properties
new file mode 100644
index 0000000000..07eabe9cc6
--- /dev/null
+++ b/muleesb/src/main/app/mule-deploy.properties
@@ -0,0 +1,6 @@
+#** GENERATED CONTENT ** Mule Application Deployment Descriptor
+#Mon Nov 06 15:54:37 BDT 2017
+redeployment.enabled=true
+encoding=UTF-8
+domain=default
+config.resources=variablescopetest.xml
diff --git a/muleesb/src/main/app/variablescopetest.xml b/muleesb/src/main/app/variablescopetest.xml
new file mode 100644
index 0000000000..518b901084
--- /dev/null
+++ b/muleesb/src/main/app/variablescopetest.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/muleesb/src/main/java/com/baeldung/transformer/FromFlow2Component.java b/muleesb/src/main/java/com/baeldung/transformer/FromFlow2Component.java
new file mode 100644
index 0000000000..0e180062a7
--- /dev/null
+++ b/muleesb/src/main/java/com/baeldung/transformer/FromFlow2Component.java
@@ -0,0 +1,18 @@
+package com.baeldung.transformer;
+
+import org.mule.api.MuleEventContext;
+import org.mule.api.MuleMessage;
+import org.mule.api.lifecycle.Callable;
+
+public class FromFlow2Component implements Callable {
+
+ @Override
+ public Object onCall(MuleEventContext eventContext) throws Exception {
+
+ MuleMessage message = eventContext.getMessage();
+ message.setPayload("Converted in flow 2");
+
+ return message;
+ }
+
+}
diff --git a/muleesb/src/main/java/com/baeldung/transformer/InitializationTransformer.java b/muleesb/src/main/java/com/baeldung/transformer/InitializationTransformer.java
new file mode 100644
index 0000000000..1e1ad15be8
--- /dev/null
+++ b/muleesb/src/main/java/com/baeldung/transformer/InitializationTransformer.java
@@ -0,0 +1,29 @@
+package com.baeldung.transformer;
+
+import org.mule.api.MuleMessage;
+import org.mule.api.transformer.TransformerException;
+import org.mule.api.transport.PropertyScope;
+import org.mule.transformer.AbstractMessageTransformer;
+
+public class InitializationTransformer extends AbstractMessageTransformer {
+
+ @Override
+ public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
+ // TODO Auto-generated method stub
+
+ String payload = null;
+
+ try {
+ payload = message.getPayloadAsString();
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ System.out.println("Logged Payload: "+payload);
+ message.setPayload("Payload from Initialization");
+ message.setProperty("outboundKey", "outboundpropertyvalue",PropertyScope.OUTBOUND);
+
+
+ return message;
+ }
+}
\ No newline at end of file
diff --git a/muleesb/src/main/java/com/baeldung/transformer/InvokingMessageComponent.java b/muleesb/src/main/java/com/baeldung/transformer/InvokingMessageComponent.java
new file mode 100644
index 0000000000..105522e5b4
--- /dev/null
+++ b/muleesb/src/main/java/com/baeldung/transformer/InvokingMessageComponent.java
@@ -0,0 +1,16 @@
+package com.baeldung.transformer;
+
+import org.mule.api.MuleMessage;
+import org.mule.api.transformer.TransformerException;
+import org.mule.transformer.AbstractMessageTransformer;
+
+public class InvokingMessageComponent extends AbstractMessageTransformer {
+
+ @Override
+ public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {
+ // TODO Auto-generated method stub
+ String InboundProp = (String) message.getInboundProperty("outboundKey");
+ System.out.println("InboundProp:" + InboundProp);
+ return InboundProp;
+ }
+}
\ No newline at end of file
diff --git a/muleesb/src/main/resources/log4j2.xml b/muleesb/src/main/resources/log4j2.xml
new file mode 100644
index 0000000000..98c4b02433
--- /dev/null
+++ b/muleesb/src/main/resources/log4j2.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/muleesb/src/test/munit/variablescopetest-test-suite.xml b/muleesb/src/test/munit/variablescopetest-test-suite.xml
new file mode 100644
index 0000000000..43e410a327
--- /dev/null
+++ b/muleesb/src/test/munit/variablescopetest-test-suite.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/muleesb/src/test/resources/log4j2-test.xml b/muleesb/src/test/resources/log4j2-test.xml
new file mode 100644
index 0000000000..6351ae041c
--- /dev/null
+++ b/muleesb/src/test/resources/log4j2-test.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/noexception/README.md b/noexception/README.md
index d840191369..9dd4c11190 100644
--- a/noexception/README.md
+++ b/noexception/README.md
@@ -1,2 +1,2 @@
### Relevant Articles:
-- [Introduction to NoException](http://www.baeldung.com/intrduction-to-noexception)
+- [Introduction to NoException](http://www.baeldung.com/introduction-to-noexception)
diff --git a/osgi/pom.xml b/osgi/pom.xml
index 4298a0d3eb..e6ef9c3192 100644
--- a/osgi/pom.xml
+++ b/osgi/pom.xml
@@ -65,7 +65,7 @@
org.osgi
org.osgi.core
- 5.0.0
+ 6.0.0
provided
@@ -77,7 +77,7 @@
org.apache.felix
maven-bundle-plugin
- 1.4.0
+ 3.3.0
true
diff --git a/patterns/template-method/pom.xml b/patterns/behavioral-patterns/pom.xml
similarity index 91%
rename from patterns/template-method/pom.xml
rename to patterns/behavioral-patterns/pom.xml
index 4b863fe0a4..3c40520ce1 100644
--- a/patterns/template-method/pom.xml
+++ b/patterns/behavioral-patterns/pom.xml
@@ -1,8 +1,8 @@
4.0.0
- com.baeldung.templatemethod
- template-method
+ com.baeldung.pattern.templatemethod
+ pattern.templatemethod
1.0
jar
diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/application/Application.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/application/Application.java
similarity index 59%
rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/application/Application.java
rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/application/Application.java
index bd383b4568..9ab34c3cd8 100644
--- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/application/Application.java
+++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/application/Application.java
@@ -1,11 +1,11 @@
-package com.baeldung.templatemethodpattern.application;
+package com.baeldung.pattern.templatemethod.application;
-import com.baeldung.templatemethodpattern.model.Computer;
-import com.baeldung.templatemethodpattern.model.StandardComputer;
-import com.baeldung.templatemethodpattern.model.HighEndComputer;
-import com.baeldung.templatemethodpattern.model.ComputerBuilder;
-import com.baeldung.templatemethodpattern.model.HighEndComputerBuilder;
-import com.baeldung.templatemethodpattern.model.StandardComputerBuilder;
+import com.baeldung.pattern.templatemethod.model.Computer;
+import com.baeldung.pattern.templatemethod.model.StandardComputer;
+import com.baeldung.pattern.templatemethod.model.HighEndComputer;
+import com.baeldung.pattern.templatemethod.model.ComputerBuilder;
+import com.baeldung.pattern.templatemethod.model.HighEndComputerBuilder;
+import com.baeldung.pattern.templatemethod.model.StandardComputerBuilder;
public class Application {
diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/Computer.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/Computer.java
similarity index 77%
rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/Computer.java
rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/Computer.java
index 128eec59ad..1419398f62 100644
--- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/Computer.java
+++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/Computer.java
@@ -1,9 +1,7 @@
-package com.baeldung.templatemethodpattern.model;
+package com.baeldung.pattern.templatemethod.model;
import java.util.HashMap;
import java.util.Map;
-import java.util.ArrayList;
-import java.util.List;
public class Computer {
diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/ComputerBuilder.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/ComputerBuilder.java
similarity index 88%
rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/ComputerBuilder.java
rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/ComputerBuilder.java
index 39052f4776..515a6940f5 100644
--- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/ComputerBuilder.java
+++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/ComputerBuilder.java
@@ -1,5 +1,6 @@
-package com.baeldung.templatemethodpattern.model;
+package com.baeldung.pattern.templatemethod.model;
+import com.baeldung.pattern.templatemethod.model.Computer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputer.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputer.java
similarity index 59%
rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputer.java
rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputer.java
index 16d89f1ad6..0684b1b233 100644
--- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputer.java
+++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputer.java
@@ -1,10 +1,11 @@
-package com.baeldung.templatemethodpattern.model;
+package com.baeldung.pattern.templatemethod.model;
+import com.baeldung.pattern.templatemethod.model.Computer;
import java.util.Map;
public class HighEndComputer extends Computer {
public HighEndComputer(Map computerParts) {
super(computerParts);
- }
+ }
}
diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputerBuilder.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputerBuilder.java
similarity index 92%
rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputerBuilder.java
rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputerBuilder.java
index baa800ca8f..c992aa2bff 100644
--- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/HighEndComputerBuilder.java
+++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/HighEndComputerBuilder.java
@@ -1,4 +1,4 @@
-package com.baeldung.templatemethodpattern.model;
+package com.baeldung.pattern.templatemethod.model;
public class HighEndComputerBuilder extends ComputerBuilder {
diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputer.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputer.java
similarity index 60%
rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputer.java
rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputer.java
index 14d32d7b64..4e1d857016 100644
--- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputer.java
+++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputer.java
@@ -1,10 +1,11 @@
-package com.baeldung.templatemethodpattern.model;
+package com.baeldung.pattern.templatemethod.model;
+import com.baeldung.pattern.templatemethod.model.Computer;
import java.util.Map;
public class StandardComputer extends Computer {
public StandardComputer(Map computerParts) {
super(computerParts);
- }
+ }
}
diff --git a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputerBuilder.java b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputerBuilder.java
similarity index 92%
rename from patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputerBuilder.java
rename to patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputerBuilder.java
index 78547dc38b..cc81dddc1b 100644
--- a/patterns/template-method/src/main/java/com/baeldung/templatemethodpattern/model/StandardComputerBuilder.java
+++ b/patterns/behavioral-patterns/src/main/java/com/baeldung/pattern/templatemethod/model/StandardComputerBuilder.java
@@ -1,4 +1,4 @@
-package com.baeldung.templatemethodpattern.model;
+package com.baeldung.pattern.templatemethod.model;
public class StandardComputerBuilder extends ComputerBuilder {
diff --git a/patterns/template-method/src/test/java/com/baeldung/templatemethodpatterntest/TemplateMethodPatternTest.java b/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/templatemethod/test/TemplateMethodPatternTest.java
similarity index 89%
rename from patterns/template-method/src/test/java/com/baeldung/templatemethodpatterntest/TemplateMethodPatternTest.java
rename to patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/templatemethod/test/TemplateMethodPatternTest.java
index 1d608ff2c2..679559af9f 100644
--- a/patterns/template-method/src/test/java/com/baeldung/templatemethodpatterntest/TemplateMethodPatternTest.java
+++ b/patterns/behavioral-patterns/src/test/java/com/baeldung/pattern/templatemethod/test/TemplateMethodPatternTest.java
@@ -1,10 +1,8 @@
-package com.baeldung.templatemethodpatterntest;
+package com.baeldung.pattern.templatemethod.test;
-import com.baeldung.templatemethodpattern.model.Computer;
-import com.baeldung.templatemethodpattern.model.HighEndComputerBuilder;
-import com.baeldung.templatemethodpattern.model.StandardComputerBuilder;
-import com.baeldung.templatemethodpattern.model.HighEndComputer;
-import com.baeldung.templatemethodpattern.model.StandardComputer;
+import com.baeldung.pattern.templatemethod.model.Computer;
+import com.baeldung.pattern.templatemethod.model.HighEndComputerBuilder;
+import com.baeldung.pattern.templatemethod.model.StandardComputerBuilder;
import org.junit.Assert;
import static org.junit.Assert.assertEquals;
import org.junit.BeforeClass;
@@ -82,7 +80,7 @@ public class TemplateMethodPatternTest {
assertEquals(2, highEndComputerBuilder.getComputerParts().size());
}
- @Test
+ @Test
public void givenAllHighEndParts_whenComputerisBuilt_thenComputerInstance() {
assertThat(standardComputerBuilder.buildComputer(), instanceOf(Computer.class));
}
diff --git a/patterns/pom.xml b/patterns/pom.xml
index 68e5316f64..1462952e37 100644
--- a/patterns/pom.xml
+++ b/patterns/pom.xml
@@ -9,7 +9,7 @@
front-controller
intercepting-filter
- template-method
+ behavioral-patterns
diff --git a/persistence-modules/java-cassandra/pom.xml b/persistence-modules/java-cassandra/pom.xml
index faaabb9e2e..81e072c3a7 100644
--- a/persistence-modules/java-cassandra/pom.xml
+++ b/persistence-modules/java-cassandra/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/java-mongodb/pom.xml b/persistence-modules/java-mongodb/pom.xml
index aab48921a6..9784b2c5a8 100644
--- a/persistence-modules/java-mongodb/pom.xml
+++ b/persistence-modules/java-mongodb/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/liquibase/pom.xml b/persistence-modules/liquibase/pom.xml
index 020c2516a2..a574ba497c 100644
--- a/persistence-modules/liquibase/pom.xml
+++ b/persistence-modules/liquibase/pom.xml
@@ -6,7 +6,7 @@
parent-modules
com.baeldung
1.0.0-SNAPSHOT
- ../
+ ../../
4.0.0
diff --git a/persistence-modules/querydsl/pom.xml b/persistence-modules/querydsl/pom.xml
index 27f383e0c6..c2943875f1 100644
--- a/persistence-modules/querydsl/pom.xml
+++ b/persistence-modules/querydsl/pom.xml
@@ -15,7 +15,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/redis/pom.xml b/persistence-modules/redis/pom.xml
index ef081a2c69..4321b491eb 100644
--- a/persistence-modules/redis/pom.xml
+++ b/persistence-modules/redis/pom.xml
@@ -15,7 +15,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/solr/pom.xml b/persistence-modules/solr/pom.xml
index 2fd0bdd721..966bd8755b 100644
--- a/persistence-modules/solr/pom.xml
+++ b/persistence-modules/solr/pom.xml
@@ -12,7 +12,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/spring-data-cassandra/pom.xml b/persistence-modules/spring-data-cassandra/pom.xml
index 607d7b90ba..1358210a45 100644
--- a/persistence-modules/spring-data-cassandra/pom.xml
+++ b/persistence-modules/spring-data-cassandra/pom.xml
@@ -13,7 +13,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/spring-data-gemfire/pom.xml b/persistence-modules/spring-data-gemfire/pom.xml
index 9108865b4c..3f7fcd03e5 100644
--- a/persistence-modules/spring-data-gemfire/pom.xml
+++ b/persistence-modules/spring-data-gemfire/pom.xml
@@ -12,7 +12,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/spring-data-neo4j/pom.xml b/persistence-modules/spring-data-neo4j/pom.xml
index 0055850ec3..bdd51e9659 100644
--- a/persistence-modules/spring-data-neo4j/pom.xml
+++ b/persistence-modules/spring-data-neo4j/pom.xml
@@ -10,7 +10,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/spring-data-redis/pom.xml b/persistence-modules/spring-data-redis/pom.xml
index b184d7e369..6cb49f11cf 100644
--- a/persistence-modules/spring-data-redis/pom.xml
+++ b/persistence-modules/spring-data-redis/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/spring-data-solr/pom.xml b/persistence-modules/spring-data-solr/pom.xml
index 0759c1dbc0..e24d8314ba 100644
--- a/persistence-modules/spring-data-solr/pom.xml
+++ b/persistence-modules/spring-data-solr/pom.xml
@@ -12,7 +12,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/spring-hibernate-3/pom.xml b/persistence-modules/spring-hibernate-3/pom.xml
index 8eee819572..f1873a84d3 100644
--- a/persistence-modules/spring-hibernate-3/pom.xml
+++ b/persistence-modules/spring-hibernate-3/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/spring-hibernate-5/pom.xml b/persistence-modules/spring-hibernate-5/pom.xml
index f1f3d10347..57eb1aeffb 100644
--- a/persistence-modules/spring-hibernate-5/pom.xml
+++ b/persistence-modules/spring-hibernate-5/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java
index 61d821e85e..614de6d3ad 100644
--- a/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java
+++ b/persistence-modules/spring-hibernate-5/src/test/java/com/baeldung/hibernate/manytomany/HibernateManyToManyAnnotationJavaConfigMainIntegrationTest.java
@@ -1,6 +1,5 @@
package com.baeldung.hibernate.manytomany;
-
import java.util.HashSet;
import java.util.Set;
import org.hibernate.Session;
@@ -17,10 +16,8 @@ import com.baeldung.hibernate.manytomany.model.Employee;
import com.baeldung.hibernate.manytomany.model.Project;
import com.baeldung.manytomany.spring.PersistenceConfig;
-
-
@RunWith(SpringJUnit4ClassRunner.class)
-@ContextConfiguration(classes = {PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class)
+@ContextConfiguration(classes = { PersistenceConfig.class }, loader = AnnotationConfigContextLoader.class)
public class HibernateManyToManyAnnotationJavaConfigMainIntegrationTest {
@Autowired
@@ -28,7 +25,6 @@ public class HibernateManyToManyAnnotationJavaConfigMainIntegrationTest {
private Session session;
-
@Before
public final void before() {
session = sessionFactory.openSession();
@@ -43,11 +39,11 @@ public class HibernateManyToManyAnnotationJavaConfigMainIntegrationTest {
@Test
public final void whenEntitiesAreCreated_thenNoExceptions() {
- Set projects = new HashSet();
- projects.add(new Project("IT Project"));
- projects.add(new Project("Networking Project"));
- session.persist(new Employee("Peter", "Oven", projects));
- session.persist(new Employee("Allan", "Norman", projects));
+ Set projects = new HashSet();
+ projects.add(new Project("IT Project"));
+ projects.add(new Project("Networking Project"));
+ session.persist(new Employee("Peter", "Oven", projects));
+ session.persist(new Employee("Allan", "Norman", projects));
}
}
diff --git a/persistence-modules/spring-jpa/.gitignore b/persistence-modules/spring-jpa/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/persistence-modules/spring-jpa/.gitignore
@@ -0,0 +1,13 @@
+*.class
+
+#folders#
+/target
+/neoDb*
+/data
+/src/main/webapp/WEB-INF/classes
+*/META-INF/*
+
+# Packaged files #
+*.jar
+*.war
+*.ear
\ No newline at end of file
diff --git a/spring-jpa/README.md b/persistence-modules/spring-jpa/README.md
similarity index 100%
rename from spring-jpa/README.md
rename to persistence-modules/spring-jpa/README.md
diff --git a/spring-jpa/pom.xml b/persistence-modules/spring-jpa/pom.xml
similarity index 98%
rename from spring-jpa/pom.xml
rename to persistence-modules/spring-jpa/pom.xml
index 960dcbc588..04c64fafc3 100644
--- a/spring-jpa/pom.xml
+++ b/persistence-modules/spring-jpa/pom.xml
@@ -13,6 +13,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
+ ../
diff --git a/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJNDIConfig.java
diff --git a/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfig.java
diff --git a/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigL2Cache.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigL2Cache.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigL2Cache.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigL2Cache.java
diff --git a/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/PersistenceJPAConfigXml.java
diff --git a/spring-jpa/src/main/java/org/baeldung/config/ProductConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/ProductConfig.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/ProductConfig.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/ProductConfig.java
diff --git a/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/SpringWebConfig.java
diff --git a/spring-jpa/src/main/java/org/baeldung/config/StudentJPAH2Config.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJPAH2Config.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/StudentJPAH2Config.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJPAH2Config.java
diff --git a/spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/StudentJpaConfig.java
diff --git a/spring-jpa/src/main/java/org/baeldung/config/UserConfig.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/UserConfig.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/UserConfig.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/UserConfig.java
diff --git a/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/config/WebInitializer.java
diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDao.java
diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDataSourceRouter.java
diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabase.java
diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientDatabaseContextHolder.java
diff --git a/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/dsrouting/ClientService.java
diff --git a/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepository.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepository.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepository.java
diff --git a/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepositoryImpl.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepositoryImpl.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepositoryImpl.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedRepositoryImpl.java
diff --git a/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedStudentRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedStudentRepository.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedStudentRepository.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/extended/persistence/dao/ExtendedStudentRepository.java
diff --git a/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/dao/StudentRepository.java
diff --git a/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/inmemory/persistence/model/Student.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/AbstractJpaDAO.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/FooDao.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/dao/IFooDao.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Bar.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/model/Foo.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/product/ProductRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/product/ProductRepository.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/product/ProductRepository.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/product/ProductRepository.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/PossessionRepository.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/UserRepository.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/UserRepository.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/UserRepository.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/dao/user/UserRepository.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/product/Product.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/product/Product.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/product/Product.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/product/Product.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/Possession.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/multiple/model/user/User.java
diff --git a/spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/persistence/service/FooService.java
diff --git a/spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/sqlfiles/Country.java
diff --git a/spring-jpa/src/main/java/org/baeldung/web/MainController.java b/persistence-modules/spring-jpa/src/main/java/org/baeldung/web/MainController.java
similarity index 100%
rename from spring-jpa/src/main/java/org/baeldung/web/MainController.java
rename to persistence-modules/spring-jpa/src/main/java/org/baeldung/web/MainController.java
diff --git a/spring-jpa/src/main/resources/context.xml b/persistence-modules/spring-jpa/src/main/resources/context.xml
similarity index 100%
rename from spring-jpa/src/main/resources/context.xml
rename to persistence-modules/spring-jpa/src/main/resources/context.xml
diff --git a/persistence-modules/spring-jpa/src/main/resources/logback.xml b/persistence-modules/spring-jpa/src/main/resources/logback.xml
new file mode 100644
index 0000000000..ec0dc2469a
--- /dev/null
+++ b/persistence-modules/spring-jpa/src/main/resources/logback.xml
@@ -0,0 +1,19 @@
+
+
+
+
+ web - %date [%thread] %-5level %logger{36} - %message%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-jpa/src/main/resources/persistence-h2.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-h2.properties
similarity index 100%
rename from spring-jpa/src/main/resources/persistence-h2.properties
rename to persistence-modules/spring-jpa/src/main/resources/persistence-h2.properties
diff --git a/spring-jpa/src/main/resources/persistence-jndi.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-jndi.properties
similarity index 100%
rename from spring-jpa/src/main/resources/persistence-jndi.properties
rename to persistence-modules/spring-jpa/src/main/resources/persistence-jndi.properties
diff --git a/spring-jpa/src/main/resources/persistence-multiple-db.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-multiple-db.properties
similarity index 100%
rename from spring-jpa/src/main/resources/persistence-multiple-db.properties
rename to persistence-modules/spring-jpa/src/main/resources/persistence-multiple-db.properties
diff --git a/spring-jpa/src/main/resources/persistence-mysql.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-mysql.properties
similarity index 100%
rename from spring-jpa/src/main/resources/persistence-mysql.properties
rename to persistence-modules/spring-jpa/src/main/resources/persistence-mysql.properties
diff --git a/spring-jpa/src/main/resources/persistence-student-h2.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-student-h2.properties
similarity index 100%
rename from spring-jpa/src/main/resources/persistence-student-h2.properties
rename to persistence-modules/spring-jpa/src/main/resources/persistence-student-h2.properties
diff --git a/spring-jpa/src/main/resources/persistence-student.properties b/persistence-modules/spring-jpa/src/main/resources/persistence-student.properties
similarity index 100%
rename from spring-jpa/src/main/resources/persistence-student.properties
rename to persistence-modules/spring-jpa/src/main/resources/persistence-student.properties
diff --git a/spring-jpa/src/main/resources/persistence.xml b/persistence-modules/spring-jpa/src/main/resources/persistence.xml
similarity index 100%
rename from spring-jpa/src/main/resources/persistence.xml
rename to persistence-modules/spring-jpa/src/main/resources/persistence.xml
diff --git a/spring-jpa/src/main/resources/server.xml b/persistence-modules/spring-jpa/src/main/resources/server.xml
similarity index 100%
rename from spring-jpa/src/main/resources/server.xml
rename to persistence-modules/spring-jpa/src/main/resources/server.xml
diff --git a/spring-jpa/src/main/resources/sqlfiles.properties b/persistence-modules/spring-jpa/src/main/resources/sqlfiles.properties
similarity index 100%
rename from spring-jpa/src/main/resources/sqlfiles.properties
rename to persistence-modules/spring-jpa/src/main/resources/sqlfiles.properties
diff --git a/spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp b/persistence-modules/spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp
similarity index 100%
rename from spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp
rename to persistence-modules/spring-jpa/src/main/webapp/WEB-INF/views/jsp/index.jsp
diff --git a/spring-jpa/src/test/java/META-INF/persistence.xml b/persistence-modules/spring-jpa/src/test/java/META-INF/persistence.xml
similarity index 100%
rename from spring-jpa/src/test/java/META-INF/persistence.xml
rename to persistence-modules/spring-jpa/src/test/java/META-INF/persistence.xml
diff --git a/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingIntegrationTest.java
diff --git a/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/dsrouting/DataSourceRoutingTestConfiguration.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/deletion/config/PersistenceJPAConfigDeletion.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/config/PersistenceJPAConfigDeletion.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/deletion/config/PersistenceJPAConfigDeletion.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/config/PersistenceJPAConfigDeletion.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Bar.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Bar.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Bar.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Bar.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Baz.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Baz.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Baz.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Baz.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Foo.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Foo.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Foo.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/deletion/model/Foo.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/repository/ExtendedStudentRepositoryIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/repository/ExtendedStudentRepositoryIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/repository/ExtendedStudentRepositoryIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/repository/ExtendedStudentRepositoryIntegrationTest.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/repository/InMemoryDBIntegrationTest.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/DeletionIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/DeletionIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/service/DeletionIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/DeletionIntegrationTest.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooPaginationPersistenceIntegrationTest.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServicePersistenceIntegrationTest.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingIntegrationTest.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/FooServiceSortingWitNullsManualIntegrationTest.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/JpaMultipleDBIntegrationTest.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/PersistenceTestSuite.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/PersistenceTestSuite.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/service/PersistenceTestSuite.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/PersistenceTestSuite.java
diff --git a/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java b/persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java
similarity index 100%
rename from spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java
rename to persistence-modules/spring-jpa/src/test/java/org/baeldung/persistence/service/SecondLevelCacheIntegrationTest.java
diff --git a/persistence-modules/spring-jpa/src/test/resources/.gitignore b/persistence-modules/spring-jpa/src/test/resources/.gitignore
new file mode 100644
index 0000000000..83c05e60c8
--- /dev/null
+++ b/persistence-modules/spring-jpa/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
diff --git a/spring-jpa/src/test/resources/dsrouting-db.sql b/persistence-modules/spring-jpa/src/test/resources/dsrouting-db.sql
similarity index 100%
rename from spring-jpa/src/test/resources/dsrouting-db.sql
rename to persistence-modules/spring-jpa/src/test/resources/dsrouting-db.sql
diff --git a/spring-jpa/src/test/resources/persistence-student.properties b/persistence-modules/spring-jpa/src/test/resources/persistence-student.properties
similarity index 100%
rename from spring-jpa/src/test/resources/persistence-student.properties
rename to persistence-modules/spring-jpa/src/test/resources/persistence-student.properties
diff --git a/pom.xml b/pom.xml
index 20f7c4ffad..cac0cc5845 100644
--- a/pom.xml
+++ b/pom.xml
@@ -141,6 +141,7 @@
spark-java
spring-5-mvc
+ spring-acl
spring-activiti
spring-akka
spring-amqp
@@ -177,7 +178,7 @@
spring-jmeter-jenkins
spring-jms
spring-jooq
- spring-jpa
+ persistence-modules/spring-jpa
spring-kafka
spring-katharsis
spring-ldap
diff --git a/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitConfigTest.java b/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitConfigTest.java
new file mode 100644
index 0000000000..6b0a6f9808
--- /dev/null
+++ b/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitConfigTest.java
@@ -0,0 +1,33 @@
+package com.baeldung.jupiter;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
+
+/**
+ * @SpringJUnitConfig(SpringJUnitConfigTest.Config.class) is equivalent to:
+ *
+ * @ExtendWith(SpringExtension.class)
+ * @ContextConfiguration(classes = SpringJUnitConfigTest.Config.class )
+ *
+ */
+@SpringJUnitConfig(SpringJUnitConfigTest.Config.class)
+public class SpringJUnitConfigTest {
+
+ @Configuration
+ static class Config {
+ }
+
+ @Autowired
+ private ApplicationContext applicationContext;
+
+ @Test
+ void givenAppContext_WhenInjected_ThenItShouldNotBeNull() {
+ assertNotNull(applicationContext);
+ }
+
+}
diff --git a/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitWebConfigTest.java b/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitWebConfigTest.java
new file mode 100644
index 0000000000..c679dce77f
--- /dev/null
+++ b/spring-5/src/test/java/com/baeldung/jupiter/SpringJUnitWebConfigTest.java
@@ -0,0 +1,34 @@
+package com.baeldung.jupiter;
+
+import static org.junit.Assert.assertNotNull;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.test.context.junit.jupiter.web.SpringJUnitWebConfig;
+import org.springframework.web.context.WebApplicationContext;
+
+/**
+ * @SpringJUnitWebConfig(SpringJUnitWebConfigTest.Config.class) is equivalent to:
+ *
+ * @ExtendWith(SpringExtension.class)
+ * @WebAppConfiguration
+ * @ContextConfiguration(classes = SpringJUnitWebConfigTest.Config.class )
+ *
+ */
+@SpringJUnitWebConfig(SpringJUnitWebConfigTest.Config.class)
+public class SpringJUnitWebConfigTest {
+
+ @Configuration
+ static class Config {
+ }
+
+ @Autowired
+ private WebApplicationContext webAppContext;
+
+ @Test
+ void givenWebAppContext_WhenInjected_ThenItShouldNotBeNull() {
+ assertNotNull(webAppContext);
+ }
+
+}
diff --git a/spring-acl/pom.xml b/spring-acl/pom.xml
new file mode 100644
index 0000000000..3bcc0cf596
--- /dev/null
+++ b/spring-acl/pom.xml
@@ -0,0 +1,66 @@
+
+
+ 4.0.0
+
+ com.baeldung
+ spring-acl
+ 0.0.1-SNAPSHOT
+ war
+
+ spring-acl
+ Spring ACL
+
+
+ parent-boot-5
+ com.baeldung
+ 0.0.1-SNAPSHOT
+ ../parent-boot-5
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ com.h2database
+ h2
+
+
+
+ org.springframework
+ spring-test
+ test
+
+
+
+ org.springframework.security
+ spring-security-test
+ test
+
+
+
+ org.springframework.security
+ spring-security-acl
+
+
+ org.springframework.security
+ spring-security-config
+
+
+ org.springframework
+ spring-context-support
+
+
+ net.sf.ehcache
+ ehcache-core
+ 2.6.11
+ jar
+
+
+
+
+
diff --git a/spring-acl/src/main/java/org/baeldung/acl/config/ACLContext.java b/spring-acl/src/main/java/org/baeldung/acl/config/ACLContext.java
new file mode 100644
index 0000000000..63a4ea58ef
--- /dev/null
+++ b/spring-acl/src/main/java/org/baeldung/acl/config/ACLContext.java
@@ -0,0 +1,80 @@
+package org.baeldung.acl.config;
+
+import javax.sql.DataSource;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.cache.ehcache.EhCacheFactoryBean;
+import org.springframework.cache.ehcache.EhCacheManagerFactoryBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
+import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
+import org.springframework.security.acls.AclPermissionCacheOptimizer;
+import org.springframework.security.acls.AclPermissionEvaluator;
+import org.springframework.security.acls.domain.AclAuthorizationStrategy;
+import org.springframework.security.acls.domain.AclAuthorizationStrategyImpl;
+import org.springframework.security.acls.domain.ConsoleAuditLogger;
+import org.springframework.security.acls.domain.DefaultPermissionGrantingStrategy;
+import org.springframework.security.acls.domain.EhCacheBasedAclCache;
+import org.springframework.security.acls.jdbc.BasicLookupStrategy;
+import org.springframework.security.acls.jdbc.JdbcMutableAclService;
+import org.springframework.security.acls.jdbc.LookupStrategy;
+import org.springframework.security.acls.model.PermissionGrantingStrategy;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+
+@Configuration
+@EnableAutoConfiguration
+public class ACLContext {
+
+ @Autowired
+ DataSource dataSource;
+
+ @Bean
+ public EhCacheBasedAclCache aclCache() {
+ return new EhCacheBasedAclCache(aclEhCacheFactoryBean().getObject(), permissionGrantingStrategy(), aclAuthorizationStrategy());
+ }
+
+ @Bean
+ public EhCacheFactoryBean aclEhCacheFactoryBean() {
+ EhCacheFactoryBean ehCacheFactoryBean = new EhCacheFactoryBean();
+ ehCacheFactoryBean.setCacheManager(aclCacheManager().getObject());
+ ehCacheFactoryBean.setCacheName("aclCache");
+ return ehCacheFactoryBean;
+ }
+
+ @Bean
+ public EhCacheManagerFactoryBean aclCacheManager() {
+ return new EhCacheManagerFactoryBean();
+ }
+
+ @Bean
+ public PermissionGrantingStrategy permissionGrantingStrategy() {
+ return new DefaultPermissionGrantingStrategy(new ConsoleAuditLogger());
+ }
+
+ @Bean
+ public AclAuthorizationStrategy aclAuthorizationStrategy() {
+ return new AclAuthorizationStrategyImpl(new SimpleGrantedAuthority("ROLE_ADMIN"));
+ }
+
+ @Bean
+ public MethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler() {
+ DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
+ AclPermissionEvaluator permissionEvaluator = new AclPermissionEvaluator(aclService());
+ expressionHandler.setPermissionEvaluator(permissionEvaluator);
+ expressionHandler.setPermissionCacheOptimizer(new AclPermissionCacheOptimizer(aclService()));
+ return expressionHandler;
+ }
+
+ @Bean
+ public LookupStrategy lookupStrategy() {
+ return new BasicLookupStrategy(dataSource, aclCache(), aclAuthorizationStrategy(), new ConsoleAuditLogger());
+ }
+
+ @Bean
+ public JdbcMutableAclService aclService() {
+ return new JdbcMutableAclService(dataSource, lookupStrategy(), aclCache());
+ }
+
+}
\ No newline at end of file
diff --git a/spring-acl/src/main/java/org/baeldung/acl/config/AclMethodSecurityConfiguration.java b/spring-acl/src/main/java/org/baeldung/acl/config/AclMethodSecurityConfiguration.java
new file mode 100644
index 0000000000..110c4a6d24
--- /dev/null
+++ b/spring-acl/src/main/java/org/baeldung/acl/config/AclMethodSecurityConfiguration.java
@@ -0,0 +1,21 @@
+package org.baeldung.acl.config;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration;
+
+@Configuration
+@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
+public class AclMethodSecurityConfiguration extends GlobalMethodSecurityConfiguration {
+
+ @Autowired
+ MethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler;
+
+ @Override
+ protected MethodSecurityExpressionHandler createExpressionHandler() {
+ return defaultMethodSecurityExpressionHandler;
+ }
+
+}
diff --git a/spring-acl/src/main/java/org/baeldung/acl/config/JPAPersistenceConfig.java b/spring-acl/src/main/java/org/baeldung/acl/config/JPAPersistenceConfig.java
new file mode 100644
index 0000000000..9b87efa92c
--- /dev/null
+++ b/spring-acl/src/main/java/org/baeldung/acl/config/JPAPersistenceConfig.java
@@ -0,0 +1,16 @@
+package org.baeldung.acl.config;
+
+import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+@Configuration
+@EnableTransactionManagement
+@EnableJpaRepositories(basePackages = "org.baeldung.acl.persistence.dao")
+@PropertySource("classpath:org.baeldung.acl.datasource.properties")
+@EntityScan(basePackages={ "org.baeldung.acl.persistence.entity" })
+public class JPAPersistenceConfig {
+
+}
diff --git a/spring-acl/src/main/java/org/baeldung/acl/persistence/dao/NoticeMessageRepository.java b/spring-acl/src/main/java/org/baeldung/acl/persistence/dao/NoticeMessageRepository.java
new file mode 100644
index 0000000000..8662c88d6c
--- /dev/null
+++ b/spring-acl/src/main/java/org/baeldung/acl/persistence/dao/NoticeMessageRepository.java
@@ -0,0 +1,24 @@
+package org.baeldung.acl.persistence.dao;
+
+import java.util.List;
+
+import org.baeldung.acl.persistence.entity.NoticeMessage;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.query.Param;
+import org.springframework.security.access.prepost.PostAuthorize;
+import org.springframework.security.access.prepost.PostFilter;
+import org.springframework.security.access.prepost.PreAuthorize;
+
+public interface NoticeMessageRepository extends JpaRepository{
+
+ @PostFilter("hasPermission(filterObject, 'READ')")
+ List findAll();
+
+ @PostAuthorize("hasPermission(returnObject, 'READ')")
+ NoticeMessage findById(Integer id);
+
+ @SuppressWarnings("unchecked")
+ @PreAuthorize("hasPermission(#noticeMessage, 'WRITE')")
+ NoticeMessage save(@Param("noticeMessage")NoticeMessage noticeMessage);
+
+}
diff --git a/spring-acl/src/main/java/org/baeldung/acl/persistence/entity/NoticeMessage.java b/spring-acl/src/main/java/org/baeldung/acl/persistence/entity/NoticeMessage.java
new file mode 100644
index 0000000000..23f01a8edb
--- /dev/null
+++ b/spring-acl/src/main/java/org/baeldung/acl/persistence/entity/NoticeMessage.java
@@ -0,0 +1,29 @@
+package org.baeldung.acl.persistence.entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="system_message")
+public class NoticeMessage {
+
+ @Id
+ @Column
+ private Integer id;
+ @Column
+ private String content;
+ public Integer getId() {
+ return id;
+ }
+ public void setId(Integer id) {
+ this.id = id;
+ }
+ public String getContent() {
+ return content;
+ }
+ public void setContent(String content) {
+ this.content = content;
+ }
+}
\ No newline at end of file
diff --git a/spring-acl/src/main/resources/acl-data.sql b/spring-acl/src/main/resources/acl-data.sql
new file mode 100644
index 0000000000..6c01eaacc2
--- /dev/null
+++ b/spring-acl/src/main/resources/acl-data.sql
@@ -0,0 +1,28 @@
+INSERT INTO system_message(id,content) VALUES (1,'First Level Message');
+INSERT INTO system_message(id,content) VALUES (2,'Second Level Message');
+INSERT INTO system_message(id,content) VALUES (3,'Third Level Message');
+
+INSERT INTO acl_class (id, class) VALUES
+(1, 'org.baeldung.acl.persistence.entity.NoticeMessage');
+
+INSERT INTO acl_sid (id, principal, sid) VALUES
+(1, 1, 'manager'),
+(2, 1, 'hr'),
+(3, 1, 'admin'),
+(4, 0, 'ROLE_EDITOR');
+
+INSERT INTO acl_object_identity (id, object_id_class, object_id_identity, parent_object, owner_sid, entries_inheriting) VALUES
+(1, 1, 1, NULL, 3, 0),
+(2, 1, 2, NULL, 3, 0),
+(3, 1, 3, NULL, 3, 0)
+;
+
+INSERT INTO acl_entry (id, acl_object_identity, ace_order, sid, mask, granting, audit_success, audit_failure) VALUES
+(1, 1, 1, 1, 1, 1, 1, 1),
+(2, 1, 2, 1, 2, 1, 1, 1),
+(3, 1, 3, 4, 1, 1, 1, 1),
+(4, 2, 1, 2, 1, 1, 1, 1),
+(5, 2, 2, 4, 1, 1, 1, 1),
+(6, 3, 1, 4, 1, 1, 1, 1),
+(7, 3, 2, 4, 2, 1, 1, 1)
+;
\ No newline at end of file
diff --git a/spring-acl/src/main/resources/acl-schema.sql b/spring-acl/src/main/resources/acl-schema.sql
new file mode 100644
index 0000000000..58e9394b2b
--- /dev/null
+++ b/spring-acl/src/main/resources/acl-schema.sql
@@ -0,0 +1,58 @@
+create table system_message (id integer not null, content varchar(255), primary key (id));
+
+CREATE TABLE IF NOT EXISTS acl_sid (
+ id bigint(20) NOT NULL AUTO_INCREMENT,
+ principal tinyint(1) NOT NULL,
+ sid varchar(100) NOT NULL,
+ PRIMARY KEY (id),
+ UNIQUE KEY unique_uk_1 (sid,principal)
+);
+
+CREATE TABLE IF NOT EXISTS acl_class (
+ id bigint(20) NOT NULL AUTO_INCREMENT,
+ class varchar(255) NOT NULL,
+ PRIMARY KEY (id),
+ UNIQUE KEY unique_uk_2 (class)
+);
+
+CREATE TABLE IF NOT EXISTS acl_entry (
+ id bigint(20) NOT NULL AUTO_INCREMENT,
+ acl_object_identity bigint(20) NOT NULL,
+ ace_order int(11) NOT NULL,
+ sid bigint(20) NOT NULL,
+ mask int(11) NOT NULL,
+ granting tinyint(1) NOT NULL,
+ audit_success tinyint(1) NOT NULL,
+ audit_failure tinyint(1) NOT NULL,
+ PRIMARY KEY (id),
+ UNIQUE KEY unique_uk_4 (acl_object_identity,ace_order)
+);
+
+CREATE TABLE IF NOT EXISTS acl_object_identity (
+ id bigint(20) NOT NULL AUTO_INCREMENT,
+ object_id_class bigint(20) NOT NULL,
+ object_id_identity bigint(20) NOT NULL,
+ parent_object bigint(20) DEFAULT NULL,
+ owner_sid bigint(20) DEFAULT NULL,
+ entries_inheriting tinyint(1) NOT NULL,
+ PRIMARY KEY (id),
+ UNIQUE KEY unique_uk_3 (object_id_class,object_id_identity)
+);
+
+ALTER TABLE acl_entry
+ADD FOREIGN KEY (acl_object_identity) REFERENCES acl_object_identity(id);
+
+ALTER TABLE acl_entry
+ADD FOREIGN KEY (sid) REFERENCES acl_sid(id);
+
+--
+-- Constraints for table acl_object_identity
+--
+ALTER TABLE acl_object_identity
+ADD FOREIGN KEY (parent_object) REFERENCES acl_object_identity (id);
+
+ALTER TABLE acl_object_identity
+ADD FOREIGN KEY (object_id_class) REFERENCES acl_class (id);
+
+ALTER TABLE acl_object_identity
+ADD FOREIGN KEY (owner_sid) REFERENCES acl_sid (id);
\ No newline at end of file
diff --git a/spring-acl/src/main/resources/org.baeldung.acl.datasource.properties b/spring-acl/src/main/resources/org.baeldung.acl.datasource.properties
new file mode 100644
index 0000000000..739dd3f07c
--- /dev/null
+++ b/spring-acl/src/main/resources/org.baeldung.acl.datasource.properties
@@ -0,0 +1,12 @@
+spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
+spring.datasource.username=sa
+spring.datasource.password=
+spring.datasource.driverClassName=org.h2.Driver
+spring.jpa.hibernate.ddl-auto=update
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
+
+spring.h2.console.path=/myconsole
+spring.h2.console.enabled=true
+spring.datasource.initialize=true
+spring.datasource.schema=classpath:acl-schema.sql
+spring.datasource.data=classpath:acl-data.sql
\ No newline at end of file
diff --git a/spring-acl/src/test/java/org/baeldung/acl/SpringAclTest.java b/spring-acl/src/test/java/org/baeldung/acl/SpringAclTest.java
new file mode 100644
index 0000000000..fd9069d9bc
--- /dev/null
+++ b/spring-acl/src/test/java/org/baeldung/acl/SpringAclTest.java
@@ -0,0 +1,119 @@
+package org.baeldung.acl;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.baeldung.acl.persistence.dao.NoticeMessageRepository;
+import org.baeldung.acl.persistence.entity.NoticeMessage;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.access.AccessDeniedException;
+import org.springframework.security.test.context.support.WithMockUser;
+import org.springframework.security.test.context.support.WithSecurityContextTestExecutionListener;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestExecutionListeners;
+import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
+import org.springframework.test.context.support.DirtiesContextTestExecutionListener;
+import org.springframework.test.context.transaction.TransactionalTestExecutionListener;
+import org.springframework.test.context.web.ServletTestExecutionListener;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration
+@TestExecutionListeners(listeners={ServletTestExecutionListener.class,
+ DependencyInjectionTestExecutionListener.class,
+ DirtiesContextTestExecutionListener.class,
+ TransactionalTestExecutionListener.class,
+ WithSecurityContextTestExecutionListener.class})
+public class SpringAclTest extends AbstractJUnit4SpringContextTests{
+
+ private static Integer FIRST_MESSAGE_ID = 1;
+ private static Integer SECOND_MESSAGE_ID = 2;
+ private static Integer THIRD_MESSAGE_ID = 3;
+ private static String EDITTED_CONTENT = "EDITED";
+
+ @Configuration
+ @ComponentScan("org.baeldung.acl.*")
+ public static class SpringConfig {
+
+ }
+
+ @Autowired
+ NoticeMessageRepository repo;
+
+ @Test
+ @WithMockUser(username="manager")
+ public void givenUsernameManager_whenFindAllMessage_thenReturnFirstMessage(){
+ List details = repo.findAll();
+ assertNotNull(details);
+ assertEquals(1,details.size());
+ assertEquals(FIRST_MESSAGE_ID,details.get(0).getId());
+ }
+
+ @Test
+ @WithMockUser(username="manager")
+ public void givenUsernameManager_whenFindFirstMessageByIdAndUpdateFirstMessageContent_thenOK(){
+ NoticeMessage firstMessage = repo.findById(FIRST_MESSAGE_ID);
+ assertNotNull(firstMessage);
+ assertEquals(FIRST_MESSAGE_ID,firstMessage.getId());
+
+ firstMessage.setContent(EDITTED_CONTENT);
+ repo.save(firstMessage);
+
+ NoticeMessage editedFirstMessage = repo.findById(FIRST_MESSAGE_ID);
+ assertNotNull(editedFirstMessage);
+ assertEquals(FIRST_MESSAGE_ID,editedFirstMessage.getId());
+ assertEquals(EDITTED_CONTENT,editedFirstMessage.getContent());
+ }
+
+ @Test
+ @WithMockUser(username="hr")
+ public void givenUsernameHr_whenFindMessageById2_thenOK(){
+ NoticeMessage secondMessage = repo.findById(SECOND_MESSAGE_ID);
+ assertNotNull(secondMessage);
+ assertEquals(SECOND_MESSAGE_ID,secondMessage.getId());
+ }
+
+ @Test(expected=AccessDeniedException.class)
+ @WithMockUser(username="hr")
+ public void givenUsernameHr_whenUpdateMessageWithId2_thenFail(){
+ NoticeMessage secondMessage = new NoticeMessage();
+ secondMessage.setId(SECOND_MESSAGE_ID);
+ secondMessage.setContent(EDITTED_CONTENT);
+ repo.save(secondMessage);
+ }
+
+ @Test
+ @WithMockUser(roles={"EDITOR"})
+ public void givenRoleEditor_whenFindAllMessage_thenReturnThreeMessage(){
+ List details = repo.findAll();
+ assertNotNull(details);
+ assertEquals(3,details.size());
+ }
+
+ @Test
+ @WithMockUser(roles={"EDITOR"})
+ public void givenRoleEditor_whenUpdateThirdMessage_thenOK(){
+ NoticeMessage thirdMessage = new NoticeMessage();
+ thirdMessage.setId(THIRD_MESSAGE_ID);
+ thirdMessage.setContent(EDITTED_CONTENT);
+ repo.save(thirdMessage);
+ }
+
+ @Test(expected=AccessDeniedException.class)
+ @WithMockUser(roles={"EDITOR"})
+ public void givenRoleEditor_whenFindFirstMessageByIdAndUpdateFirstMessageContent_thenFail(){
+ NoticeMessage firstMessage = repo.findById(FIRST_MESSAGE_ID);
+ assertNotNull(firstMessage);
+ assertEquals(FIRST_MESSAGE_ID,firstMessage.getId());
+ firstMessage.setContent(EDITTED_CONTENT);
+ repo.save(firstMessage);
+ }
+}
+
\ No newline at end of file
diff --git a/spring-aop/src/main/resources/logback.xml b/spring-aop/src/main/resources/logback.xml
index ec0dc2469a..3245e94f08 100644
--- a/spring-aop/src/main/resources/logback.xml
+++ b/spring-aop/src/main/resources/logback.xml
@@ -13,7 +13,11 @@
-
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud/pom.xml b/spring-cloud/pom.xml
index e6d78f292d..d11455f90c 100644
--- a/spring-cloud/pom.xml
+++ b/spring-cloud/pom.xml
@@ -19,6 +19,7 @@
spring-cloud-stream
spring-cloud-connectors-heroku
spring-cloud-aws
+ spring-cloud-consul
pom
diff --git a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/SpringCloudAwsApplication.java b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/SpringCloudAwsApplication.java
index 2c3909b3eb..81bbc579ec 100644
--- a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/SpringCloudAwsApplication.java
+++ b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/SpringCloudAwsApplication.java
@@ -2,8 +2,10 @@ package com.baeldung.spring.cloud.aws;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
+@ImportResource("classpath:aws-config.xml")
public class SpringCloudAwsApplication {
public static void main(String[] args) {
diff --git a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2EnableMetadata.java b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2EnableMetadata.java
new file mode 100644
index 0000000000..03a7db26de
--- /dev/null
+++ b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2EnableMetadata.java
@@ -0,0 +1,9 @@
+package com.baeldung.spring.cloud.aws.ec2;
+
+import org.springframework.cloud.aws.context.config.annotation.EnableContextInstanceData;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@EnableContextInstanceData
+public class EC2EnableMetadata {
+}
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2Metadata.java b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2Metadata.java
new file mode 100644
index 0000000000..9466c14560
--- /dev/null
+++ b/spring-cloud/spring-cloud-aws/src/main/java/com/baeldung/spring/cloud/aws/ec2/EC2Metadata.java
@@ -0,0 +1,62 @@
+package com.baeldung.spring.cloud.aws.ec2;
+
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Lazy;
+import org.springframework.stereotype.Component;
+
+@Lazy
+@Component
+public class EC2Metadata {
+
+ @Value("${ami-id:N/A}")
+ private String amiId;
+
+ @Value("${hostname:N/A}")
+ private String hostname;
+
+ @Value("${instance-type:N/A}")
+ private String instanceType;
+
+ @Value("${services/domain:N/A}")
+ private String serviceDomain;
+
+ @Value("#{instanceData['Name'] ?: 'N/A'}")
+ private String name;
+
+ public String getAmiId() {
+ return amiId;
+ }
+
+ public String getHostname() {
+ return hostname;
+ }
+
+ public String getInstanceType() {
+ return instanceType;
+ }
+
+ public String getServiceDomain() {
+ return serviceDomain;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("EC2Metadata [amiId=");
+ builder.append(amiId);
+ builder.append(", hostname=");
+ builder.append(hostname);
+ builder.append(", instanceType=");
+ builder.append(instanceType);
+ builder.append(", serviceDomain=");
+ builder.append(serviceDomain);
+ builder.append(", name=");
+ builder.append(name);
+ builder.append("]");
+ return builder.toString();
+ }
+}
diff --git a/spring-cloud/spring-cloud-aws/src/main/resources/aws-config.xml b/spring-cloud/spring-cloud-aws/src/main/resources/aws-config.xml
new file mode 100644
index 0000000000..5ca48f6b1e
--- /dev/null
+++ b/spring-cloud/spring-cloud-aws/src/main/resources/aws-config.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-aws/src/test/java/com/baeldung/spring/cloud/aws/ec2/EC2MetadataIntegrationTest.java b/spring-cloud/spring-cloud-aws/src/test/java/com/baeldung/spring/cloud/aws/ec2/EC2MetadataIntegrationTest.java
new file mode 100644
index 0000000000..1e75134194
--- /dev/null
+++ b/spring-cloud/spring-cloud-aws/src/test/java/com/baeldung/spring/cloud/aws/ec2/EC2MetadataIntegrationTest.java
@@ -0,0 +1,61 @@
+package com.baeldung.spring.cloud.aws.ec2;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import com.amazonaws.regions.Regions;
+import com.amazonaws.services.ec2.AmazonEC2;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+@TestPropertySource("classpath:application-test.properties")
+public class EC2MetadataIntegrationTest {
+
+ private static final Logger logger = LoggerFactory.getLogger(EC2MetadataIntegrationTest.class);
+
+ private boolean serverEc2;
+
+ @Before
+ public void setUp() {
+ serverEc2 = Regions.getCurrentRegion() != null;
+ }
+
+ @Autowired
+ private EC2Metadata eC2Metadata;
+
+ @Autowired
+ private AmazonEC2 amazonEC2;
+
+ @Test
+ public void whenEC2ClinentNotNull_thenSuccess() {
+ assertThat(amazonEC2).isNotNull();
+ }
+
+ @Test
+ public void whenEC2MetadataNotNull_thenSuccess() {
+ assertThat(eC2Metadata).isNotNull();
+ }
+
+ @Test
+ public void whenMetdataValuesNotNull_thenSuccess() {
+ Assume.assumeTrue(serverEc2);
+ assertThat(eC2Metadata.getAmiId()).isNotEqualTo("N/A");
+ assertThat(eC2Metadata.getInstanceType()).isNotEqualTo("N/A");
+ }
+
+ @Test
+ public void whenMetadataLogged_thenSuccess() {
+ logger.info("Environment is EC2: {}", serverEc2);
+ logger.info(eC2Metadata.toString());
+ }
+}
diff --git a/spring-cloud/spring-cloud-consul/pom.xml b/spring-cloud/spring-cloud-consul/pom.xml
new file mode 100644
index 0000000000..0a0650ec8b
--- /dev/null
+++ b/spring-cloud/spring-cloud-consul/pom.xml
@@ -0,0 +1,58 @@
+
+
+ 4.0.0
+
+ org.baeldung
+ spring-cloud-consul
+ jar
+
+ spring-cloud-consul
+
+
+ com.baeldung.spring.cloud
+ spring-cloud
+ 1.0.0-SNAPSHOT
+
+
+
+ UTF-8
+ 3.6.0
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-consul-all
+ 1.3.0.RELEASE
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-consul-config
+ 1.3.0.RELEASE
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ 1.8
+ 1.8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot-maven-plugin.version}
+
+
+
+
+
diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DiscoveryClientApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DiscoveryClientApplication.java
new file mode 100644
index 0000000000..e5e18d71ff
--- /dev/null
+++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DiscoveryClientApplication.java
@@ -0,0 +1,53 @@
+package com.baeldung.spring.cloud.consul;
+
+import java.net.URI;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.cloud.client.ServiceInstance;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+@RestController
+public class DiscoveryClientApplication {
+
+ @Bean
+ public RestTemplate restTemplate() {
+ return new RestTemplate();
+ }
+
+ @Autowired
+ private RestTemplate restTemplate;
+
+ @Autowired
+ private DiscoveryClient discoveryClient;
+
+ @RequestMapping("/discoveryClient")
+ public String home() {
+ return this.restTemplate.getForEntity(serviceUrl().resolve("/ping"), String.class)
+ .getBody();
+ }
+
+ public URI serviceUrl() {
+ List list = discoveryClient.getInstances("myApp");
+ if (list != null && list.size() > 0) {
+ return list.get(0)
+ .getUri();
+ }
+
+ return null;
+ }
+
+ public static void main(String[] args) {
+ new SpringApplicationBuilder(DiscoveryClientApplication.class).web(true)
+ .run(args);
+ }
+}
diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DistributedPropertiesApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DistributedPropertiesApplication.java
new file mode 100644
index 0000000000..12ecd96b26
--- /dev/null
+++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/DistributedPropertiesApplication.java
@@ -0,0 +1,36 @@
+package com.baeldung.spring.cloud.consul;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.baeldung.spring.cloud.consul.properties.MyProperties;
+
+@SpringBootApplication
+@RestController
+public class DistributedPropertiesApplication {
+
+ @Value("${my.prop}")
+ String value;
+
+ @Autowired
+ private MyProperties properties;
+
+ @RequestMapping("/getConfigFromValue")
+ public String getConfigFromValue() {
+ return value;
+ }
+
+ @RequestMapping("/getConfigFromProperty")
+ public String getConfigFromProperty() {
+ return properties.getProp();
+ }
+
+ public static void main(String[] args) {
+ new SpringApplicationBuilder(DistributedPropertiesApplication.class).web(true)
+ .run(args);
+ }
+}
diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/RibbonClientApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/RibbonClientApplication.java
new file mode 100644
index 0000000000..620c3553ba
--- /dev/null
+++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/RibbonClientApplication.java
@@ -0,0 +1,34 @@
+package com.baeldung.spring.cloud.consul;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.client.RestTemplate;
+
+@SpringBootApplication
+@RestController
+public class RibbonClientApplication {
+
+ @LoadBalanced
+ @Bean
+ public RestTemplate loadbalancedRestTemplate() {
+ return new RestTemplate();
+ }
+
+ @Autowired
+ RestTemplate restTemplate;
+
+ @RequestMapping("/ribbonClient")
+ public String home() {
+ return this.restTemplate.getForObject("http://myApp/ping", String.class);
+ }
+
+ public static void main(String[] args) {
+ new SpringApplicationBuilder(RibbonClientApplication.class).web(true)
+ .run(args);
+ }
+}
diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/ServiceDiscoveryApplication.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/ServiceDiscoveryApplication.java
new file mode 100644
index 0000000000..5da8105d01
--- /dev/null
+++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/ServiceDiscoveryApplication.java
@@ -0,0 +1,29 @@
+package com.baeldung.spring.cloud.consul;
+
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.builder.SpringApplicationBuilder;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@SpringBootApplication
+@RestController
+public class ServiceDiscoveryApplication {
+ @RequestMapping("/my-health-check")
+ public ResponseEntity myCustomCheck() {
+ String message = "Testing my healh check function";
+ return new ResponseEntity<>(message, HttpStatus.FORBIDDEN);
+ }
+
+ @RequestMapping("/ping")
+ public String ping() {
+ return "pong";
+ }
+
+ public static void main(String[] args) {
+ new SpringApplicationBuilder(ServiceDiscoveryApplication.class).web(true)
+ .run(args);
+ }
+
+}
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/MyProperties.java b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/MyProperties.java
new file mode 100644
index 0000000000..7accac168d
--- /dev/null
+++ b/spring-cloud/spring-cloud-consul/src/main/java/com/baeldung/spring/cloud/consul/properties/MyProperties.java
@@ -0,0 +1,20 @@
+package com.baeldung.spring.cloud.consul.properties;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.context.annotation.Configuration;
+
+@RefreshScope
+@Configuration
+@ConfigurationProperties("my")
+public class MyProperties {
+ private String prop;
+
+ public String getProp() {
+ return prop;
+ }
+
+ public void setProp(String prop) {
+ this.prop = prop;
+ }
+}
diff --git a/spring-cloud/spring-cloud-consul/src/main/resources/application.yml b/spring-cloud/spring-cloud-consul/src/main/resources/application.yml
new file mode 100644
index 0000000000..ccdc3fdeee
--- /dev/null
+++ b/spring-cloud/spring-cloud-consul/src/main/resources/application.yml
@@ -0,0 +1,14 @@
+spring:
+ application:
+ name: myApp
+ cloud:
+ consul:
+ host: localhost
+ port: 8500
+ discovery:
+ healthCheckPath: /my-health-check
+ healthCheckInterval: 20s
+ enabled: true
+ instanceId: ${spring.application.name}:${random.value}
+server:
+ port: 0
\ No newline at end of file
diff --git a/spring-cloud/spring-cloud-consul/src/main/resources/bootstrap.yml b/spring-cloud/spring-cloud-consul/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000000..6318170135
--- /dev/null
+++ b/spring-cloud/spring-cloud-consul/src/main/resources/bootstrap.yml
@@ -0,0 +1,9 @@
+spring:
+ application:
+ name: myApp
+ cloud:
+ consul:
+ host: localhost
+ port: 8500
+ config:
+ enabled: true
\ No newline at end of file
diff --git a/spring-security-mvc-boot/src/main/java/org/baeldung/Application.java b/spring-security-mvc-boot/src/main/java/org/baeldung/Application.java
index b3c98c3e71..8a40744bdc 100644
--- a/spring-security-mvc-boot/src/main/java/org/baeldung/Application.java
+++ b/spring-security-mvc-boot/src/main/java/org/baeldung/Application.java
@@ -5,12 +5,13 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.FilterType;
@Configuration
@EnableAutoConfiguration
-@ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.voter.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multipleauthproviders.*"),
- @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multiplelogin.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multipleentrypoints.*") })
+@ComponentScan({ "org.baeldung.config", "org.baeldung.persistence", "org.baeldung.security", "org.baeldung.web" })
+// @ComponentScan(excludeFilters = { @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.voter.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multipleauthproviders.*"),
+// @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multiplelogin.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.multipleentrypoints.*"),
+// @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.rolesauthorities.*"), @ComponentScan.Filter(type = FilterType.REGEX, pattern = "org.baeldung.acl.*") })
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
diff --git a/spring-security-mvc-boot/src/test/java/org/baeldung/SpringContextIntegrationTest.java b/spring-security-mvc-boot/src/test/java/org/baeldung/SpringContextIntegrationTest.java
new file mode 100644
index 0000000000..cf1ac7de89
--- /dev/null
+++ b/spring-security-mvc-boot/src/test/java/org/baeldung/SpringContextIntegrationTest.java
@@ -0,0 +1,15 @@
+package org.baeldung;
+
+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(classes = Application.class)
+public class SpringContextIntegrationTest {
+
+ @Test
+ public void whenSpringContextIsBootstrapped_thenNoExceptions() {
+ }
+}
diff --git a/testing-modules/groovy-spock/pom.xml b/testing-modules/groovy-spock/pom.xml
index f4e61e6786..3d67657224 100644
--- a/testing-modules/groovy-spock/pom.xml
+++ b/testing-modules/groovy-spock/pom.xml
@@ -17,7 +17,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/testing-modules/junit-5/pom.xml b/testing-modules/junit-5/pom.xml
index 2be8937d04..684a9253d5 100644
--- a/testing-modules/junit-5/pom.xml
+++ b/testing-modules/junit-5/pom.xml
@@ -14,7 +14,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/testing-modules/mockito-2/pom.xml b/testing-modules/mockito-2/pom.xml
index 0291ac4ec1..2d119ae8af 100644
--- a/testing-modules/mockito-2/pom.xml
+++ b/testing-modules/mockito-2/pom.xml
@@ -12,7 +12,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/testing-modules/mockito/pom.xml b/testing-modules/mockito/pom.xml
index aa3dd9b20a..0e83c46926 100644
--- a/testing-modules/mockito/pom.xml
+++ b/testing-modules/mockito/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/testing-modules/mocks/pom.xml b/testing-modules/mocks/pom.xml
index 959c1851d6..6473f07c13 100644
--- a/testing-modules/mocks/pom.xml
+++ b/testing-modules/mocks/pom.xml
@@ -6,7 +6,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
mocks
diff --git a/testing-modules/rest-assured/pom.xml b/testing-modules/rest-assured/pom.xml
index 0c0826c5c3..1006e9a373 100644
--- a/testing-modules/rest-assured/pom.xml
+++ b/testing-modules/rest-assured/pom.xml
@@ -10,7 +10,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/testing-modules/rest-testing/pom.xml b/testing-modules/rest-testing/pom.xml
index 4b838720da..ea63ee0e58 100644
--- a/testing-modules/rest-testing/pom.xml
+++ b/testing-modules/rest-testing/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/testing-modules/selenium-junit-testng/pom.xml b/testing-modules/selenium-junit-testng/pom.xml
index 14169e5749..418dd495a4 100644
--- a/testing-modules/selenium-junit-testng/pom.xml
+++ b/testing-modules/selenium-junit-testng/pom.xml
@@ -9,7 +9,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/testing-modules/testing/pom.xml b/testing-modules/testing/pom.xml
index 3ad503558f..7aff0a93e0 100644
--- a/testing-modules/testing/pom.xml
+++ b/testing-modules/testing/pom.xml
@@ -10,7 +10,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/testing-modules/testng/pom.xml b/testing-modules/testng/pom.xml
index f7a50954fc..7aed1837e5 100644
--- a/testing-modules/testng/pom.xml
+++ b/testing-modules/testng/pom.xml
@@ -11,7 +11,7 @@
com.baeldung
parent-modules
1.0.0-SNAPSHOT
- ../
+ ../../
diff --git a/undertow/dependency-reduced-pom.xml b/undertow/dependency-reduced-pom.xml
new file mode 100644
index 0000000000..0654c82b74
--- /dev/null
+++ b/undertow/dependency-reduced-pom.xml
@@ -0,0 +1,40 @@
+
+
+ 4.0.0
+ com.baeldung.undertow
+ undertow
+ undertow
+ 1.0-SNAPSHOT
+ http://maven.apache.org
+
+ ${project.artifactId}
+
+
+ maven-shade-plugin
+
+
+ package
+
+ shade
+
+
+
+
+
+ maven-jar-plugin
+
+
+
+ com.baeldung.undertow.SimpleServer
+
+
+
+
+
+
+
+ 1.8
+ 1.8
+
+
+