Merge remote-tracking branch 'upstream/master' into craedel-log4j2
This commit is contained in:
commit
50322e14b6
2
annotations/readme.md
Normal file
2
annotations/readme.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
### Relevant Articles:
|
||||||
|
- [Java Annotation Processing and Creating a Builder](http://www.baeldung.com/java-annotation-processing-builder)
|
2
apache-cxf/cxf-introduction/README.md
Normal file
2
apache-cxf/cxf-introduction/README.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
### Relevant Articles:
|
||||||
|
- [Introduction to Apache CXF](http://www.baeldung.com/introduction-to-apache-cxf)
|
@ -11,6 +11,7 @@
|
|||||||
</parent>
|
</parent>
|
||||||
<properties>
|
<properties>
|
||||||
<cxf.version>3.1.6</cxf.version>
|
<cxf.version>3.1.6</cxf.version>
|
||||||
|
<surefire.version>2.19.1</surefire.version>
|
||||||
</properties>
|
</properties>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
@ -26,7 +27,7 @@
|
|||||||
<version>2.19.1</version>
|
<version>2.19.1</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<excludes>
|
<excludes>
|
||||||
<exclude>**/StudentTest.java</exclude>
|
<exclude>**/*LiveTest.java</exclude>
|
||||||
</excludes>
|
</excludes>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
@ -44,4 +45,5 @@
|
|||||||
<version>${cxf.version}</version>
|
<version>${cxf.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
||||||
|
@ -2,20 +2,16 @@ package com.baeldung.cxf.introduction;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
import org.junit.Before;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.xml.namespace.QName;
|
import javax.xml.namespace.QName;
|
||||||
import javax.xml.ws.Service;
|
import javax.xml.ws.Service;
|
||||||
import javax.xml.ws.soap.SOAPBinding;
|
import javax.xml.ws.soap.SOAPBinding;
|
||||||
|
|
||||||
import com.baeldung.cxf.introduction.Baeldung;
|
import org.junit.Before;
|
||||||
import com.baeldung.cxf.introduction.Student;
|
import org.junit.Test;
|
||||||
import com.baeldung.cxf.introduction.StudentImpl;
|
|
||||||
|
|
||||||
public class StudentTest {
|
public class StudentLiveTest {
|
||||||
private static QName SERVICE_NAME = new QName("http://introduction.cxf.baeldung.com/", "Baeldung");
|
private static QName SERVICE_NAME = new QName("http://introduction.cxf.baeldung.com/", "Baeldung");
|
||||||
private static QName PORT_NAME = new QName("http://introduction.cxf.baeldung.com/", "BaeldungPort");
|
private static QName PORT_NAME = new QName("http://introduction.cxf.baeldung.com/", "BaeldungPort");
|
||||||
|
|
||||||
@ -25,7 +21,7 @@ public class StudentTest {
|
|||||||
|
|
||||||
{
|
{
|
||||||
service = Service.create(SERVICE_NAME);
|
service = Service.create(SERVICE_NAME);
|
||||||
String endpointAddress = "http://localhost:8080/baeldung";
|
final String endpointAddress = "http://localhost:8080/baeldung";
|
||||||
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
|
service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING, endpointAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,28 +33,28 @@ public class StudentTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenUsingHelloMethod_thenCorrect() {
|
public void whenUsingHelloMethod_thenCorrect() {
|
||||||
String endpointResponse = baeldungProxy.hello("Baeldung");
|
final String endpointResponse = baeldungProxy.hello("Baeldung");
|
||||||
String localResponse = baeldungImpl.hello("Baeldung");
|
final String localResponse = baeldungImpl.hello("Baeldung");
|
||||||
assertEquals(localResponse, endpointResponse);
|
assertEquals(localResponse, endpointResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void whenUsingHelloStudentMethod_thenCorrect() {
|
public void whenUsingHelloStudentMethod_thenCorrect() {
|
||||||
Student student = new StudentImpl("John Doe");
|
final Student student = new StudentImpl("John Doe");
|
||||||
String endpointResponse = baeldungProxy.helloStudent(student);
|
final String endpointResponse = baeldungProxy.helloStudent(student);
|
||||||
String localResponse = baeldungImpl.helloStudent(student);
|
final String localResponse = baeldungImpl.helloStudent(student);
|
||||||
assertEquals(localResponse, endpointResponse);
|
assertEquals(localResponse, endpointResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void usingGetStudentsMethod_thenCorrect() {
|
public void usingGetStudentsMethod_thenCorrect() {
|
||||||
Student student1 = new StudentImpl("Adam");
|
final Student student1 = new StudentImpl("Adam");
|
||||||
baeldungProxy.helloStudent(student1);
|
baeldungProxy.helloStudent(student1);
|
||||||
|
|
||||||
Student student2 = new StudentImpl("Eve");
|
final Student student2 = new StudentImpl("Eve");
|
||||||
baeldungProxy.helloStudent(student2);
|
baeldungProxy.helloStudent(student2);
|
||||||
|
|
||||||
Map<Integer, Student> students = baeldungProxy.getStudents();
|
final Map<Integer, Student> students = baeldungProxy.getStudents();
|
||||||
assertEquals("Adam", students.get(1).getName());
|
assertEquals("Adam", students.get(1).getName());
|
||||||
assertEquals("Eve", students.get(2).getName());
|
assertEquals("Eve", students.get(2).getName());
|
||||||
}
|
}
|
55
apache-cxf/cxf-jaxrs-implementation/pom.xml
Normal file
55
apache-cxf/cxf-jaxrs-implementation/pom.xml
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>cxf-jaxrs-implementation</artifactId>
|
||||||
|
<parent>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<artifactId>apache-cxf</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
<properties>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
<cxf.version>3.1.7</cxf.version>
|
||||||
|
<httpclient.version>4.5.2</httpclient.version>
|
||||||
|
<surefire.version>2.19.1</surefire.version>
|
||||||
|
</properties>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
|
<artifactId>exec-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<mainClass>com.baeldung.cxf.jaxrs.implementation.RestfulServer</mainClass>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>2.19.1</version>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/*LiveTest.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.cxf</groupId>
|
||||||
|
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
|
||||||
|
<version>${cxf.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.cxf</groupId>
|
||||||
|
<artifactId>cxf-rt-transports-http-jetty</artifactId>
|
||||||
|
<version>${cxf.version}</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
|
<artifactId>httpclient</artifactId>
|
||||||
|
<version>${httpclient.version}</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
@ -0,0 +1,86 @@
|
|||||||
|
package com.baeldung.cxf.jaxrs.implementation;
|
||||||
|
|
||||||
|
import javax.ws.rs.*;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@XmlRootElement(name = "Course")
|
||||||
|
public class Course {
|
||||||
|
private int id;
|
||||||
|
private String name;
|
||||||
|
private List<Student> students = new ArrayList<>();
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Student> getStudents() {
|
||||||
|
return students;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStudents(List<Student> students) {
|
||||||
|
this.students = students;
|
||||||
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("{studentId}")
|
||||||
|
public Student getStudent(@PathParam("studentId") int studentId) {
|
||||||
|
return findById(studentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@POST
|
||||||
|
public Response createStudent(Student student) {
|
||||||
|
for (Student element : students) {
|
||||||
|
if (element.getId() == student.getId()) {
|
||||||
|
return Response.status(Response.Status.CONFLICT).build();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
students.add(student);
|
||||||
|
return Response.ok(student).build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@DELETE
|
||||||
|
@Path("{studentId}")
|
||||||
|
public Response deleteStudent(@PathParam("studentId") int studentId) {
|
||||||
|
Student student = findById(studentId);
|
||||||
|
if (student == null) {
|
||||||
|
return Response.status(Response.Status.NOT_FOUND).build();
|
||||||
|
}
|
||||||
|
students.remove(student);
|
||||||
|
return Response.ok().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Student findById(int id) {
|
||||||
|
for (Student student : students) {
|
||||||
|
if (student.getId() == id) {
|
||||||
|
return student;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return id + name.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
return (obj instanceof Course) && (id == ((Course) obj).getId()) && (name.equals(((Course) obj).getName()));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,72 @@
|
|||||||
|
package com.baeldung.cxf.jaxrs.implementation;
|
||||||
|
|
||||||
|
import javax.ws.rs.*;
|
||||||
|
import javax.ws.rs.core.Response;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
@Path("baeldung")
|
||||||
|
@Produces("text/xml")
|
||||||
|
public class CourseRepository {
|
||||||
|
private Map<Integer, Course> courses = new HashMap<>();
|
||||||
|
|
||||||
|
{
|
||||||
|
Student student1 = new Student();
|
||||||
|
Student student2 = new Student();
|
||||||
|
student1.setId(1);
|
||||||
|
student1.setName("Student A");
|
||||||
|
student2.setId(2);
|
||||||
|
student2.setName("Student B");
|
||||||
|
|
||||||
|
List<Student> course1Students = new ArrayList<>();
|
||||||
|
course1Students.add(student1);
|
||||||
|
course1Students.add(student2);
|
||||||
|
|
||||||
|
Course course1 = new Course();
|
||||||
|
Course course2 = new Course();
|
||||||
|
course1.setId(1);
|
||||||
|
course1.setName("REST with Spring");
|
||||||
|
course1.setStudents(course1Students);
|
||||||
|
course2.setId(2);
|
||||||
|
course2.setName("Learn Spring Security");
|
||||||
|
|
||||||
|
courses.put(1, course1);
|
||||||
|
courses.put(2, course2);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GET
|
||||||
|
@Path("courses/{courseId}")
|
||||||
|
public Course getCourse(@PathParam("courseId") int courseId) {
|
||||||
|
return findById(courseId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PUT
|
||||||
|
@Path("courses/{courseId}")
|
||||||
|
public Response updateCourse(@PathParam("courseId") int courseId, Course course) {
|
||||||
|
Course existingCourse = findById(courseId);
|
||||||
|
if (existingCourse == null) {
|
||||||
|
return Response.status(Response.Status.NOT_FOUND).build();
|
||||||
|
}
|
||||||
|
if (existingCourse.equals(course)) {
|
||||||
|
return Response.notModified().build();
|
||||||
|
}
|
||||||
|
courses.put(courseId, course);
|
||||||
|
return Response.ok().build();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Path("courses/{courseId}/students")
|
||||||
|
public Course pathToStudent(@PathParam("courseId") int courseId) {
|
||||||
|
return findById(courseId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Course findById(int id) {
|
||||||
|
for (Map.Entry<Integer, Course> course : courses.entrySet()) {
|
||||||
|
if (course.getKey() == id) {
|
||||||
|
return course.getValue();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,21 @@
|
|||||||
|
package com.baeldung.cxf.jaxrs.implementation;
|
||||||
|
|
||||||
|
import org.apache.cxf.endpoint.Server;
|
||||||
|
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
|
||||||
|
import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
|
||||||
|
|
||||||
|
public class RestfulServer {
|
||||||
|
public static void main(String args[]) throws Exception {
|
||||||
|
JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean();
|
||||||
|
factoryBean.setResourceClasses(CourseRepository.class);
|
||||||
|
factoryBean.setResourceProvider(new SingletonResourceProvider(new CourseRepository()));
|
||||||
|
factoryBean.setAddress("http://localhost:8080/");
|
||||||
|
Server server = factoryBean.create();
|
||||||
|
|
||||||
|
System.out.println("Server ready...");
|
||||||
|
Thread.sleep(60 * 1000);
|
||||||
|
System.out.println("Server exiting");
|
||||||
|
server.destroy();
|
||||||
|
System.exit(0);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,35 @@
|
|||||||
|
package com.baeldung.cxf.jaxrs.implementation;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlRootElement;
|
||||||
|
|
||||||
|
@XmlRootElement(name = "Student")
|
||||||
|
public class Student {
|
||||||
|
private int id;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return id + name.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
return (obj instanceof Student) && (id == ((Student) obj).getId()) && (name.equals(((Student) obj).getName()));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
<Course>
|
||||||
|
<id>2</id>
|
||||||
|
<name>Apache CXF Support for RESTful</name>
|
||||||
|
</Course>
|
@ -0,0 +1,4 @@
|
|||||||
|
<Student>
|
||||||
|
<id>2</id>
|
||||||
|
<name>Student B</name>
|
||||||
|
</Student>
|
@ -0,0 +1,4 @@
|
|||||||
|
<Student>
|
||||||
|
<id>3</id>
|
||||||
|
<name>Student C</name>
|
||||||
|
</Student>
|
@ -0,0 +1,4 @@
|
|||||||
|
<Course>
|
||||||
|
<id>3</id>
|
||||||
|
<name>Apache CXF Support for RESTful</name>
|
||||||
|
</Course>
|
@ -0,0 +1,4 @@
|
|||||||
|
<Course>
|
||||||
|
<id>1</id>
|
||||||
|
<name>REST with Spring</name>
|
||||||
|
</Course>
|
@ -0,0 +1,130 @@
|
|||||||
|
package com.baeldung.cxf.jaxrs.implementation;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
import javax.xml.bind.JAXB;
|
||||||
|
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.client.methods.HttpDelete;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.client.methods.HttpPut;
|
||||||
|
import org.apache.http.entity.InputStreamEntity;
|
||||||
|
import org.apache.http.impl.client.CloseableHttpClient;
|
||||||
|
import org.apache.http.impl.client.HttpClients;
|
||||||
|
import org.junit.AfterClass;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class ServiceLiveTest {
|
||||||
|
private static final String BASE_URL = "http://localhost:8080/baeldung/courses/";
|
||||||
|
private static CloseableHttpClient client;
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void createClient() {
|
||||||
|
client = HttpClients.createDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void closeClient() throws IOException {
|
||||||
|
client.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUpdateNonExistentCourse_thenReceiveNotFoundResponse() throws IOException {
|
||||||
|
final HttpPut httpPut = new HttpPut(BASE_URL + "3");
|
||||||
|
final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("non_existent_course.xml");
|
||||||
|
httpPut.setEntity(new InputStreamEntity(resourceStream));
|
||||||
|
httpPut.setHeader("Content-Type", "text/xml");
|
||||||
|
|
||||||
|
final HttpResponse response = client.execute(httpPut);
|
||||||
|
assertEquals(404, response.getStatusLine().getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUpdateUnchangedCourse_thenReceiveNotModifiedResponse() throws IOException {
|
||||||
|
final HttpPut httpPut = new HttpPut(BASE_URL + "1");
|
||||||
|
final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("unchanged_course.xml");
|
||||||
|
httpPut.setEntity(new InputStreamEntity(resourceStream));
|
||||||
|
httpPut.setHeader("Content-Type", "text/xml");
|
||||||
|
|
||||||
|
final HttpResponse response = client.execute(httpPut);
|
||||||
|
assertEquals(304, response.getStatusLine().getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenUpdateValidCourse_thenReceiveOKResponse() throws IOException {
|
||||||
|
final HttpPut httpPut = new HttpPut(BASE_URL + "2");
|
||||||
|
final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("changed_course.xml");
|
||||||
|
httpPut.setEntity(new InputStreamEntity(resourceStream));
|
||||||
|
httpPut.setHeader("Content-Type", "text/xml");
|
||||||
|
|
||||||
|
final HttpResponse response = client.execute(httpPut);
|
||||||
|
assertEquals(200, response.getStatusLine().getStatusCode());
|
||||||
|
|
||||||
|
final Course course = getCourse(2);
|
||||||
|
assertEquals(2, course.getId());
|
||||||
|
assertEquals("Apache CXF Support for RESTful", course.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCreateConflictStudent_thenReceiveConflictResponse() throws IOException {
|
||||||
|
final HttpPost httpPost = new HttpPost(BASE_URL + "1/students");
|
||||||
|
final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("conflict_student.xml");
|
||||||
|
httpPost.setEntity(new InputStreamEntity(resourceStream));
|
||||||
|
httpPost.setHeader("Content-Type", "text/xml");
|
||||||
|
|
||||||
|
final HttpResponse response = client.execute(httpPost);
|
||||||
|
assertEquals(409, response.getStatusLine().getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenCreateValidStudent_thenReceiveOKResponse() throws IOException {
|
||||||
|
final HttpPost httpPost = new HttpPost(BASE_URL + "2/students");
|
||||||
|
final InputStream resourceStream = this.getClass().getClassLoader().getResourceAsStream("created_student.xml");
|
||||||
|
httpPost.setEntity(new InputStreamEntity(resourceStream));
|
||||||
|
httpPost.setHeader("Content-Type", "text/xml");
|
||||||
|
|
||||||
|
final HttpResponse response = client.execute(httpPost);
|
||||||
|
assertEquals(200, response.getStatusLine().getStatusCode());
|
||||||
|
|
||||||
|
final Student student = getStudent(2, 3);
|
||||||
|
assertEquals(3, student.getId());
|
||||||
|
assertEquals("Student C", student.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDeleteInvalidStudent_thenReceiveNotFoundResponse() throws IOException {
|
||||||
|
final HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/3");
|
||||||
|
final HttpResponse response = client.execute(httpDelete);
|
||||||
|
assertEquals(404, response.getStatusLine().getStatusCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void whenDeleteValidStudent_thenReceiveOKResponse() throws IOException {
|
||||||
|
final HttpDelete httpDelete = new HttpDelete(BASE_URL + "1/students/1");
|
||||||
|
final HttpResponse response = client.execute(httpDelete);
|
||||||
|
assertEquals(200, response.getStatusLine().getStatusCode());
|
||||||
|
|
||||||
|
final Course course = getCourse(1);
|
||||||
|
assertEquals(1, course.getStudents().size());
|
||||||
|
assertEquals(2, course.getStudents().get(0).getId());
|
||||||
|
assertEquals("Student B", course.getStudents().get(0).getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
private Course getCourse(int courseOrder) throws IOException {
|
||||||
|
final URL url = new URL(BASE_URL + courseOrder);
|
||||||
|
final InputStream input = url.openStream();
|
||||||
|
return JAXB.unmarshal(new InputStreamReader(input), Course.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Student getStudent(int courseOrder, int studentOrder) throws IOException {
|
||||||
|
final URL url = new URL(BASE_URL + courseOrder + "/students/" + studentOrder);
|
||||||
|
final InputStream input = url.openStream();
|
||||||
|
return JAXB.unmarshal(new InputStreamReader(input), Student.class);
|
||||||
|
}
|
||||||
|
}
|
@ -51,7 +51,7 @@
|
|||||||
<version>${surefire.version}</version>
|
<version>${surefire.version}</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<excludes>
|
<excludes>
|
||||||
<exclude>StudentTest.java</exclude>
|
<exclude>**/*LiveTest.java</exclude>
|
||||||
</excludes>
|
</excludes>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
@ -60,7 +60,7 @@
|
|||||||
|
|
||||||
<profiles>
|
<profiles>
|
||||||
<profile>
|
<profile>
|
||||||
<id>integration</id>
|
<id>live</id>
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
|
@ -6,7 +6,7 @@ import org.junit.Test;
|
|||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||||
|
|
||||||
public class StudentTest {
|
public class StudentLiveTest {
|
||||||
private ApplicationContext context = new AnnotationConfigApplicationContext(ClientConfiguration.class);
|
private ApplicationContext context = new AnnotationConfigApplicationContext(ClientConfiguration.class);
|
||||||
private Baeldung baeldungProxy = (Baeldung) context.getBean("client");
|
private Baeldung baeldungProxy = (Baeldung) context.getBean("client");
|
||||||
|
|
@ -8,6 +8,7 @@
|
|||||||
<modules>
|
<modules>
|
||||||
<module>cxf-introduction</module>
|
<module>cxf-introduction</module>
|
||||||
<module>cxf-spring</module>
|
<module>cxf-spring</module>
|
||||||
|
<module>cxf-jaxrs-implementation</module>
|
||||||
</modules>
|
</modules>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
3
assertj/README.md
Normal file
3
assertj/README.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
### Relevant Articles:
|
||||||
|
- [AssertJ’s Java 8 Features](http://www.baeldung.com/assertJ-java-8-features)
|
||||||
|
- [AssertJ for Guava](http://www.baeldung.com/assertJ-for-guava)
|
@ -1,7 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<groupId>com.baeldung</groupId>
|
<groupId>com.baeldung</groupId>
|
||||||
@ -9,11 +8,18 @@
|
|||||||
<version>1.0.0-SNAPSHOT</version>
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
<artifactId>guava</artifactId>
|
<artifactId>guava</artifactId>
|
||||||
<version>19.0</version>
|
<version>${guava.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.assertj</groupId>
|
||||||
|
<artifactId>assertj-guava</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
@ -26,11 +32,7 @@
|
|||||||
<version>3.5.1</version>
|
<version>3.5.1</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>org.assertj</groupId>
|
|
||||||
<artifactId>assertj-guava</artifactId>
|
|
||||||
<version>3.0.0</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
@ -46,4 +48,9 @@
|
|||||||
</plugin>
|
</plugin>
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<guava.version>19.0</guava.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
2
autovalue/README.md
Normal file
2
autovalue/README.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
### Relevant Articles:
|
||||||
|
- [Introduction to AutoValue](http://www.baeldung.com/introduction-to-autovalue)
|
2
cdi/README.md
Normal file
2
cdi/README.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
### Relevant Articles:
|
||||||
|
- [CDI Interceptor vs Spring AspectJ](http://www.baeldung.com/cdi-interceptor-vs-spring-aspectj)
|
52
cdi/pom.xml
52
cdi/pom.xml
@ -45,8 +45,60 @@
|
|||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>${maven-surefire-plugin.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/*IntegrationTest.java</exclude>
|
||||||
|
<exclude>**/*LiveTest.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<profiles>
|
||||||
|
<profile>
|
||||||
|
<id>integration</id>
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>integration-test</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>test</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/*LiveTest.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
<includes>
|
||||||
|
<include>**/*IntegrationTest.java</include>
|
||||||
|
</includes>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
<configuration>
|
||||||
|
<systemPropertyVariables>
|
||||||
|
<test.mime>json</test.mime>
|
||||||
|
</systemPropertyVariables>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
</profile>
|
||||||
|
</profiles>
|
||||||
<properties>
|
<properties>
|
||||||
<spring.version>4.3.1.RELEASE</spring.version>
|
<spring.version>4.3.1.RELEASE</spring.version>
|
||||||
|
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -10,7 +10,7 @@ import org.junit.Test;
|
|||||||
import com.baeldung.interceptor.AuditedInterceptor;
|
import com.baeldung.interceptor.AuditedInterceptor;
|
||||||
import com.baeldung.service.SuperService;
|
import com.baeldung.service.SuperService;
|
||||||
|
|
||||||
public class TestInterceptor {
|
public class InterceptorIntegrationTest {
|
||||||
Weld weld;
|
Weld weld;
|
||||||
WeldContainer container;
|
WeldContainer container;
|
||||||
|
|
@ -16,19 +16,23 @@ import com.baeldung.spring.service.SpringSuperService;
|
|||||||
|
|
||||||
@RunWith(SpringRunner.class)
|
@RunWith(SpringRunner.class)
|
||||||
@ContextConfiguration(classes = { AppConfig.class })
|
@ContextConfiguration(classes = { AppConfig.class })
|
||||||
public class TestSpringInterceptor {
|
public class SpringInterceptorIntegrationTest {
|
||||||
@Autowired
|
@Autowired
|
||||||
SpringSuperService springSuperService;
|
SpringSuperService springSuperService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private List<String> accumulator;
|
private List<String> accumulator;
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenService_whenServiceAndAspectExecuted_thenOk() {
|
public void givenService_whenServiceAndAspectExecuted_thenOk() {
|
||||||
String code = "123456";
|
String code = "123456";
|
||||||
String result = springSuperService.getInfoFromService(code);
|
String result = springSuperService.getInfoFromService(code);
|
||||||
|
|
||||||
Assert.assertThat(accumulator.size(), is(2));
|
Assert.assertThat(accumulator.size(), is(2));
|
||||||
Assert.assertThat(accumulator.get(0), is("Call to getInfoFromService"));
|
Assert.assertThat(accumulator.get(0), is("Call to getInfoFromService"));
|
||||||
Assert.assertThat(accumulator.get(1), is("Method called successfully: getInfoFromService"));
|
Assert.assertThat(accumulator.get(1), is("Method called successfully: getInfoFromService"));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -1,24 +0,0 @@
|
|||||||
=========
|
|
||||||
|
|
||||||
## Core Java 8 Cookbooks and Examples
|
|
||||||
|
|
||||||
### Relevant Articles:
|
|
||||||
- [Java 8 – Powerful Comparison with Lambdas](http://www.baeldung.com/java-8-sort-lambda)
|
|
||||||
- [Java – Directory Size](http://www.baeldung.com/java-folder-size)
|
|
||||||
- [Java – Try with Resources](http://www.baeldung.com/java-try-with-resources)
|
|
||||||
- [A Guide to the Java ExecutorService](http://www.baeldung.com/java-executor-service-tutorial)
|
|
||||||
- [Java 8 New Features](http://www.baeldung.com/java-8-new-features)
|
|
||||||
- [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips)
|
|
||||||
- [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator)
|
|
||||||
- [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams)
|
|
||||||
- [Java 8 Collectors](http://www.baeldung.com/java-8-collectors)
|
|
||||||
- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer)
|
|
||||||
- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string)
|
|
||||||
- [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces)
|
|
||||||
- [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture)
|
|
||||||
- [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava)
|
|
||||||
- [Guide to Java 8 Collectors](http://www.baeldung.com/java-8-collectors)
|
|
||||||
- [The Java 8 Stream API Tutorial](http://www.baeldung.com/java-8-streams)
|
|
||||||
- [New Features in Java 8](http://www.baeldung.com/java-8-new-features)
|
|
||||||
- [Introduction to Java 8 Streams](http://www.baeldung.com/java-8-streams-introduction)
|
|
||||||
- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join)
|
|
@ -1,142 +0,0 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
|
||||||
<modelVersion>4.0.0</modelVersion>
|
|
||||||
|
|
||||||
<groupId>com.baeldung</groupId>
|
|
||||||
<version>1.0.0-SNAPSHOT</version>
|
|
||||||
<artifactId>core-java8</artifactId>
|
|
||||||
|
|
||||||
<name>core-java8</name>
|
|
||||||
|
|
||||||
<dependencies>
|
|
||||||
|
|
||||||
<!-- utils -->
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-io</groupId>
|
|
||||||
<artifactId>commons-io</artifactId>
|
|
||||||
<version>2.4</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.google.guava</groupId>
|
|
||||||
<artifactId>guava</artifactId>
|
|
||||||
<version>${guava.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.commons</groupId>
|
|
||||||
<artifactId>commons-collections4</artifactId>
|
|
||||||
<version>4.0</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-codec</groupId>
|
|
||||||
<artifactId>commons-codec</artifactId>
|
|
||||||
<version>1.10</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.apache.commons</groupId>
|
|
||||||
<artifactId>commons-lang3</artifactId>
|
|
||||||
<version>3.3.2</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.slf4j</groupId>
|
|
||||||
<artifactId>slf4j-api</artifactId>
|
|
||||||
<version>${org.slf4j.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- test scoped -->
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.hamcrest</groupId>
|
|
||||||
<artifactId>hamcrest-library</artifactId>
|
|
||||||
<version>${org.hamcrest.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>junit</groupId>
|
|
||||||
<artifactId>junit</artifactId>
|
|
||||||
<version>${junit.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.assertj</groupId>
|
|
||||||
<artifactId>assertj-core</artifactId>
|
|
||||||
<version>3.5.1</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>org.mockito</groupId>
|
|
||||||
<artifactId>mockito-core</artifactId>
|
|
||||||
<version>${mockito.version}</version>
|
|
||||||
<scope>test</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
|
|
||||||
<build>
|
|
||||||
<finalName>core-java-8</finalName>
|
|
||||||
<resources>
|
|
||||||
<resource>
|
|
||||||
<directory>src/main/resources</directory>
|
|
||||||
<filtering>true</filtering>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
|
|
||||||
<plugins>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<version>${maven-compiler-plugin.version}</version>
|
|
||||||
<configuration>
|
|
||||||
<source>1.8</source>
|
|
||||||
<target>1.8</target>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
|
||||||
<version>${maven-surefire-plugin.version}</version>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
</plugins>
|
|
||||||
|
|
||||||
</build>
|
|
||||||
|
|
||||||
<properties>
|
|
||||||
|
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
|
||||||
|
|
||||||
<!-- logging -->
|
|
||||||
<org.slf4j.version>1.7.13</org.slf4j.version>
|
|
||||||
<logback.version>1.0.13</logback.version>
|
|
||||||
|
|
||||||
<!-- various -->
|
|
||||||
<hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
|
|
||||||
|
|
||||||
<!-- util -->
|
|
||||||
<guava.version>19.0</guava.version>
|
|
||||||
<commons-lang3.version>3.4</commons-lang3.version>
|
|
||||||
|
|
||||||
<!-- testing -->
|
|
||||||
<org.hamcrest.version>1.3</org.hamcrest.version>
|
|
||||||
<junit.version>4.12</junit.version>
|
|
||||||
<mockito.version>1.10.19</mockito.version>
|
|
||||||
|
|
||||||
<!-- maven plugins -->
|
|
||||||
<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
|
|
||||||
<maven-war-plugin.version>2.6</maven-war-plugin.version>
|
|
||||||
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
|
||||||
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
|
|
||||||
|
|
||||||
</properties>
|
|
||||||
|
|
||||||
</project>
|
|
13
core-java-8/src/main/java/.gitignore
vendored
13
core-java-8/src/main/java/.gitignore
vendored
@ -1,13 +0,0 @@
|
|||||||
*.class
|
|
||||||
|
|
||||||
#folders#
|
|
||||||
/target
|
|
||||||
/neoDb*
|
|
||||||
/data
|
|
||||||
/src/main/webapp/WEB-INF/classes
|
|
||||||
*/META-INF/*
|
|
||||||
|
|
||||||
# Packaged files #
|
|
||||||
*.jar
|
|
||||||
*.war
|
|
||||||
*.ear
|
|
@ -1,91 +0,0 @@
|
|||||||
package com.baeldung.enums;
|
|
||||||
|
|
||||||
import java.util.EnumMap;
|
|
||||||
import java.util.EnumSet;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
public class Pizza {
|
|
||||||
|
|
||||||
private static EnumSet<PizzaStatusEnum> deliveredPizzaStatuses =
|
|
||||||
EnumSet.of(PizzaStatusEnum.DELIVERED);
|
|
||||||
|
|
||||||
private PizzaStatusEnum status;
|
|
||||||
|
|
||||||
public enum PizzaStatusEnum {
|
|
||||||
ORDERED(5) {
|
|
||||||
@Override
|
|
||||||
public boolean isOrdered() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
READY(2) {
|
|
||||||
@Override
|
|
||||||
public boolean isReady() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
DELIVERED(0) {
|
|
||||||
@Override
|
|
||||||
public boolean isDelivered() {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private int timeToDelivery;
|
|
||||||
|
|
||||||
public boolean isOrdered() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isReady() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isDelivered() {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getTimeToDelivery() {
|
|
||||||
return timeToDelivery;
|
|
||||||
}
|
|
||||||
|
|
||||||
PizzaStatusEnum(int timeToDelivery) {
|
|
||||||
this.timeToDelivery = timeToDelivery;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public PizzaStatusEnum getStatus() {
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setStatus(PizzaStatusEnum status) {
|
|
||||||
this.status = status;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isDeliverable() {
|
|
||||||
return this.status.isReady();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void printTimeToDeliver() {
|
|
||||||
System.out.println("Time to delivery is " + this.getStatus().getTimeToDelivery() + " days");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<Pizza> getAllUndeliveredPizzas(List<Pizza> input) {
|
|
||||||
return input.stream().filter((s) -> !deliveredPizzaStatuses.contains(s.getStatus())).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EnumMap<PizzaStatusEnum, List<Pizza>> groupPizzaByStatus(List<Pizza> pzList) {
|
|
||||||
return pzList.stream().collect(
|
|
||||||
Collectors.groupingBy(Pizza::getStatus,
|
|
||||||
() -> new EnumMap<>(PizzaStatusEnum.class), Collectors.toList()));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deliver() {
|
|
||||||
if (isDeliverable()) {
|
|
||||||
PizzaDeliverySystemConfiguration.getInstance().getDeliveryStrategy().deliver(this);
|
|
||||||
this.setStatus(PizzaStatusEnum.DELIVERED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,18 +0,0 @@
|
|||||||
package com.baeldung.enums;
|
|
||||||
|
|
||||||
public enum PizzaDeliveryStrategy {
|
|
||||||
EXPRESS {
|
|
||||||
@Override
|
|
||||||
public void deliver(Pizza pz) {
|
|
||||||
System.out.println("Pizza will be delivered in express mode");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
NORMAL {
|
|
||||||
@Override
|
|
||||||
public void deliver(Pizza pz) {
|
|
||||||
System.out.println("Pizza will be delivered in normal mode");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public abstract void deliver(Pizza pz);
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
package com.baeldung.enums;
|
|
||||||
|
|
||||||
|
|
||||||
public enum PizzaDeliverySystemConfiguration {
|
|
||||||
INSTANCE;
|
|
||||||
|
|
||||||
PizzaDeliverySystemConfiguration() {
|
|
||||||
// Do the configuration initialization which
|
|
||||||
// involves overriding defaults like delivery strategy
|
|
||||||
}
|
|
||||||
|
|
||||||
private PizzaDeliveryStrategy deliveryStrategy = PizzaDeliveryStrategy.NORMAL;
|
|
||||||
|
|
||||||
public static PizzaDeliverySystemConfiguration getInstance() {
|
|
||||||
return INSTANCE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PizzaDeliveryStrategy getDeliveryStrategy() {
|
|
||||||
return deliveryStrategy;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
Hello World from fileTest.txt!!!
|
|
@ -1,16 +0,0 @@
|
|||||||
<configuration>
|
|
||||||
|
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
|
||||||
<encoder>
|
|
||||||
<pattern>web - %date [%thread] %-5level %logger{36} - %message%n
|
|
||||||
</pattern>
|
|
||||||
</encoder>
|
|
||||||
</appender>
|
|
||||||
|
|
||||||
<!-- <logger name="org.springframework" level="WARN" /> -->
|
|
||||||
|
|
||||||
<root level="INFO">
|
|
||||||
<appender-ref ref="STDOUT"/>
|
|
||||||
</root>
|
|
||||||
|
|
||||||
</configuration>
|
|
@ -1 +0,0 @@
|
|||||||
Hello World!
|
|
@ -1 +0,0 @@
|
|||||||
Hello World!
|
|
@ -1 +0,0 @@
|
|||||||
My Name is John
|
|
@ -1 +0,0 @@
|
|||||||
My Name is Tom
|
|
@ -1 +0,0 @@
|
|||||||
My Name is Jane
|
|
@ -1,17 +0,0 @@
|
|||||||
package com.baeldung;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Random;
|
|
||||||
|
|
||||||
public class RandomListElementTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void givenList_whenRandomNumberChosen_shouldReturnARandomElement() {
|
|
||||||
List<Integer> givenList = Arrays.asList(1, 2, 3);
|
|
||||||
Random rand = new Random();
|
|
||||||
givenList.get(rand.nextInt(givenList.size()));
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,78 +0,0 @@
|
|||||||
package com.baeldung.file;
|
|
||||||
|
|
||||||
import org.hamcrest.Matchers;
|
|
||||||
import org.junit.Assert;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLConnection;
|
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.containsString;
|
|
||||||
|
|
||||||
public class FileOperationsTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void givenFileName_whenUsingClassloader_thenFileData() throws IOException {
|
|
||||||
String expectedData = "Hello World from fileTest.txt!!!";
|
|
||||||
|
|
||||||
ClassLoader classLoader = getClass().getClassLoader();
|
|
||||||
InputStream inputStream = classLoader.getResourceAsStream("fileTest.txt");
|
|
||||||
String data = readFromInputStream(inputStream);
|
|
||||||
|
|
||||||
Assert.assertThat(data, containsString(expectedData));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void givenFileNameAsAbsolutePath_whenUsingClasspath_thenFileData() throws IOException {
|
|
||||||
String expectedData = "Hello World from fileTest.txt!!!";
|
|
||||||
|
|
||||||
Class clazz = FileOperationsTest.class;
|
|
||||||
InputStream inputStream = clazz.getResourceAsStream("/fileTest.txt");
|
|
||||||
String data = readFromInputStream(inputStream);
|
|
||||||
|
|
||||||
Assert.assertThat(data, containsString(expectedData));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void givenURLName_whenUsingURL_thenFileData() throws IOException {
|
|
||||||
String expectedData = "Baeldung";
|
|
||||||
|
|
||||||
URL urlObject = new URL("http://www.baeldung.com/");
|
|
||||||
URLConnection urlConnection = urlObject.openConnection();
|
|
||||||
|
|
||||||
InputStream inputStream = urlConnection.getInputStream();
|
|
||||||
String data = readFromInputStream(inputStream);
|
|
||||||
|
|
||||||
Assert.assertThat(data, containsString(expectedData));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void givenFileName_whenUsingJarFile_thenFileData() throws IOException {
|
|
||||||
String expectedData = "BSD License";
|
|
||||||
|
|
||||||
Class clazz = Matchers.class;
|
|
||||||
InputStream inputStream = clazz.getResourceAsStream("/LICENSE.txt");
|
|
||||||
String data = readFromInputStream(inputStream);
|
|
||||||
|
|
||||||
Assert.assertThat(data, containsString(expectedData));
|
|
||||||
}
|
|
||||||
|
|
||||||
private String readFromInputStream(InputStream inputStream) throws IOException {
|
|
||||||
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
|
|
||||||
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
|
|
||||||
StringBuilder resultStringBuilder = new StringBuilder();
|
|
||||||
String line;
|
|
||||||
while ((line = bufferedReader.readLine()) != null) {
|
|
||||||
resultStringBuilder.append(line);
|
|
||||||
resultStringBuilder.append("\n");
|
|
||||||
}
|
|
||||||
bufferedReader.close();
|
|
||||||
inputStreamReader.close();
|
|
||||||
inputStream.close();
|
|
||||||
return resultStringBuilder.toString();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package com.baeldung.util;
|
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
import java.time.LocalDate;
|
|
||||||
import java.time.LocalTime;
|
|
||||||
import java.time.temporal.ChronoField;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.GregorianCalendar;
|
|
||||||
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
public class CurrentDateTimeTest {
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void shouldReturnCurrentDate() {
|
|
||||||
|
|
||||||
final LocalDate now = LocalDate.now();
|
|
||||||
final Calendar calendar = GregorianCalendar.getInstance();
|
|
||||||
|
|
||||||
assertEquals("10-10-2010".length(), now.toString().length());
|
|
||||||
assertEquals(calendar.get(Calendar.DATE), now.get(ChronoField.DAY_OF_MONTH));
|
|
||||||
assertEquals(calendar.get(Calendar.MONTH), now.get(ChronoField.MONTH_OF_YEAR) - 1);
|
|
||||||
assertEquals(calendar.get(Calendar.YEAR), now.get(ChronoField.YEAR));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void shouldReturnCurrentTime() {
|
|
||||||
|
|
||||||
final LocalTime now = LocalTime.now();
|
|
||||||
final Calendar calendar = GregorianCalendar.getInstance();
|
|
||||||
|
|
||||||
assertEquals(calendar.get(Calendar.HOUR_OF_DAY), now.get(ChronoField.HOUR_OF_DAY));
|
|
||||||
assertEquals(calendar.get(Calendar.MINUTE), now.get(ChronoField.MINUTE_OF_HOUR));
|
|
||||||
assertEquals(calendar.get(Calendar.SECOND), now.get(ChronoField.SECOND_OF_MINUTE));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void shouldReturnCurrentTimestamp() {
|
|
||||||
|
|
||||||
final Instant now = Instant.now();
|
|
||||||
final Calendar calendar = GregorianCalendar.getInstance();
|
|
||||||
|
|
||||||
assertEquals(calendar.getTimeInMillis() / 1000, now.getEpochSecond());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1 +0,0 @@
|
|||||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse facilisis neque sed turpis venenatis, non dignissim risus volutpat.
|
|
2
core-java-9/src/test/java/com/baeldung/java9/README.MD
Normal file
2
core-java-9/src/test/java/com/baeldung/java9/README.MD
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
### Relevant Artiles:
|
||||||
|
- [Filtering a Stream of Optionals in Java](http://www.baeldung.com/java-filter-stream-of-optional)
|
@ -13,3 +13,26 @@
|
|||||||
- [Java – Write to File](http://www.baeldung.com/java-write-to-file)
|
- [Java – Write to File](http://www.baeldung.com/java-write-to-file)
|
||||||
- [Java Scanner](http://www.baeldung.com/java-scanner)
|
- [Java Scanner](http://www.baeldung.com/java-scanner)
|
||||||
- [Java Timer](http://www.baeldung.com/java-timer-and-timertask)
|
- [Java Timer](http://www.baeldung.com/java-timer-and-timertask)
|
||||||
|
- [Java – Byte Array to Writer](http://www.baeldung.com/java-convert-byte-array-to-writer)
|
||||||
|
- [How to Run a Shell Command in Java](http://www.baeldung.com/run-shell-command-in-java)
|
||||||
|
- [MD5 Hashing in Java](http://www.baeldung.com/java-md5)
|
||||||
|
- [Guide to the Java ArrayList](http://www.baeldung.com/java-arraylist)
|
||||||
|
- [Guide to Java Reflection](http://www.baeldung.com/java-reflection)
|
||||||
|
- [A Guide to Java Sockets](http://www.baeldung.com/a-guide-to-java-sockets)
|
||||||
|
- [Java 8 Collectors](http://www.baeldung.com/java-8-collectors)
|
||||||
|
- [Guide To CompletableFuture](http://www.baeldung.com/java-completablefuture)
|
||||||
|
- [Guide to Java 8’s Functional Interfaces](http://www.baeldung.com/java-8-functional-interfaces)
|
||||||
|
- [Convert char to String in Java](http://www.baeldung.com/java-convert-char-to-string)
|
||||||
|
- [Random List Element](http://www.baeldung.com/java-random-list-element)
|
||||||
|
- [Convert String to int or Integer in Java](http://www.baeldung.com/java-convert-string-to-int-or-integer)
|
||||||
|
- [Java 8 – Powerful Comparison with Lambdas](http://www.baeldung.com/java-8-sort-lambda)
|
||||||
|
- [Java – Directory Size](http://www.baeldung.com/java-folder-size)
|
||||||
|
- [Java – Try with Resources](http://www.baeldung.com/java-try-with-resources)
|
||||||
|
- [A Guide to the Java ExecutorService](http://www.baeldung.com/java-executor-service-tutorial)
|
||||||
|
- [Java 8 New Features](http://www.baeldung.com/java-8-new-features)
|
||||||
|
- [Lambda Expressions and Functional Interfaces: Tips and Best Practices](http://www.baeldung.com/java-8-lambda-expressions-tips)
|
||||||
|
- [The Double Colon Operator in Java 8](http://www.baeldung.com/java-8-double-colon-operator)
|
||||||
|
- [Java 8 Streams Advanced](http://www.baeldung.com/java-8-streams)
|
||||||
|
- [Introduction to Thread Pools in Java](http://www.baeldung.com/thread-pool-java-and-guava)
|
||||||
|
- [Introduction to Java 8 Streams](http://www.baeldung.com/java-8-streams-introduction)
|
||||||
|
- [Guide to the Fork/Join Framework in Java](http://www.baeldung.com/java-fork-join)
|
@ -1,211 +1,323 @@
|
|||||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
<modelVersion>4.0.0</modelVersion>
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
<groupId>com.baeldung</groupId>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<artifactId>core-java</artifactId>
|
<groupId>com.baeldung</groupId>
|
||||||
<version>0.1.0-SNAPSHOT</version>
|
<artifactId>core-java</artifactId>
|
||||||
|
<version>0.1.0-SNAPSHOT</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<name>core-java</name>
|
<name>core-java</name>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<!-- utils -->
|
<!-- utils -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.sourceforge.collections</groupId>
|
<groupId>net.sourceforge.collections</groupId>
|
||||||
<artifactId>collections-generic</artifactId>
|
<artifactId>collections-generic</artifactId>
|
||||||
<version>4.01</version>
|
<version>4.01</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.google.guava</groupId>
|
<groupId>com.google.guava</groupId>
|
||||||
<artifactId>guava</artifactId>
|
<artifactId>guava</artifactId>
|
||||||
<version>${guava.version}</version>
|
<version>${guava.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-collections4</artifactId>
|
<artifactId>commons-collections4</artifactId>
|
||||||
<version>4.0</version>
|
<version>4.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io</groupId>
|
<groupId>commons-io</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
<version>2.4</version>
|
<version>2.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-lang3</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
<version>${commons-lang3.version}</version>
|
<version>${commons-lang3.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-math3</artifactId>
|
<artifactId>commons-math3</artifactId>
|
||||||
<version>3.3</version>
|
<version>3.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- web -->
|
<!-- web -->
|
||||||
|
|
||||||
<!-- marshalling -->
|
<!-- marshalling -->
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.fasterxml.jackson.core</groupId>
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
<artifactId>jackson-databind</artifactId>
|
<artifactId>jackson-databind</artifactId>
|
||||||
<version>${jackson.version}</version>
|
<version>${jackson.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- logging -->
|
<!-- logging -->
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>slf4j-api</artifactId>
|
<artifactId>slf4j-api</artifactId>
|
||||||
<version>${org.slf4j.version}</version>
|
<version>${org.slf4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>ch.qos.logback</groupId>
|
<groupId>ch.qos.logback</groupId>
|
||||||
<artifactId>logback-classic</artifactId>
|
<artifactId>logback-classic</artifactId>
|
||||||
<version>${logback.version}</version>
|
<version>${logback.version}</version>
|
||||||
<!-- <scope>runtime</scope> -->
|
<!-- <scope>runtime</scope> -->
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>jcl-over-slf4j</artifactId>
|
<artifactId>jcl-over-slf4j</artifactId>
|
||||||
<version>${org.slf4j.version}</version>
|
<version>${org.slf4j.version}</version>
|
||||||
<!-- <scope>runtime</scope> --> <!-- some spring dependencies need to compile against jcl -->
|
<!-- <scope>runtime</scope> --> <!-- some spring dependencies need to compile against jcl -->
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency> <!-- needed to bridge to slf4j for projects that use the log4j APIs directly -->
|
<dependency> <!-- needed to bridge to slf4j for projects that use the log4j APIs directly -->
|
||||||
<groupId>org.slf4j</groupId>
|
<groupId>org.slf4j</groupId>
|
||||||
<artifactId>log4j-over-slf4j</artifactId>
|
<artifactId>log4j-over-slf4j</artifactId>
|
||||||
<version>${org.slf4j.version}</version>
|
<version>${org.slf4j.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- test scoped -->
|
<!-- test scoped -->
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
<version>${junit.version}</version>
|
<version>${junit.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hamcrest</groupId>
|
<groupId>org.hamcrest</groupId>
|
||||||
<artifactId>hamcrest-core</artifactId>
|
<artifactId>hamcrest-core</artifactId>
|
||||||
<version>${org.hamcrest.version}</version>
|
<version>${org.hamcrest.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hamcrest</groupId>
|
<groupId>org.hamcrest</groupId>
|
||||||
<artifactId>hamcrest-library</artifactId>
|
<artifactId>hamcrest-library</artifactId>
|
||||||
<version>${org.hamcrest.version}</version>
|
<version>${org.hamcrest.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.assertj</groupId>
|
<groupId>org.assertj</groupId>
|
||||||
<artifactId>assertj-core</artifactId>
|
<artifactId>assertj-core</artifactId>
|
||||||
<version>${assertj.version}</version>
|
<version>${assertj.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.testng</groupId>
|
<groupId>org.testng</groupId>
|
||||||
<artifactId>testng</artifactId>
|
<artifactId>testng</artifactId>
|
||||||
<version>${testng.version}</version>
|
<version>${testng.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.mockito</groupId>
|
<groupId>org.mockito</groupId>
|
||||||
<artifactId>mockito-core</artifactId>
|
<artifactId>mockito-core</artifactId>
|
||||||
<version>${mockito.version}</version>
|
<version>${mockito.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-codec</groupId>
|
|
||||||
<artifactId>commons-codec</artifactId>
|
|
||||||
<version>1.10</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
<dependency>
|
||||||
|
<groupId>commons-codec</groupId>
|
||||||
|
<artifactId>commons-codec</artifactId>
|
||||||
|
<version>1.10</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<build>
|
</dependencies>
|
||||||
<finalName>core-java</finalName>
|
|
||||||
<resources>
|
|
||||||
<resource>
|
|
||||||
<directory>src/main/resources</directory>
|
|
||||||
<filtering>true</filtering>
|
|
||||||
</resource>
|
|
||||||
</resources>
|
|
||||||
|
|
||||||
<plugins>
|
<build>
|
||||||
|
<finalName>core-java</finalName>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
|
||||||
<plugin>
|
<plugins>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
|
||||||
<version>${maven-compiler-plugin.version}</version>
|
|
||||||
<configuration>
|
|
||||||
<source>1.8</source>
|
|
||||||
<target>1.8</target>
|
|
||||||
</configuration>
|
|
||||||
</plugin>
|
|
||||||
|
|
||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-surefire-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>${maven-surefire-plugin.version}</version>
|
<version>${maven-compiler-plugin.version}</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<excludes>
|
<source>1.8</source>
|
||||||
<exclude>**/*IntegrationTest.java</exclude>
|
<target>1.8</target>
|
||||||
</excludes>
|
</configuration>
|
||||||
</configuration>
|
</plugin>
|
||||||
</plugin>
|
|
||||||
|
|
||||||
</plugins>
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<version>${maven-surefire-plugin.version}</version>
|
||||||
|
<configuration>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/*IntegrationTest.java</exclude>
|
||||||
|
<exclude>**/*LongRunningUnitTest.java</exclude>
|
||||||
|
<exclude>**/*ManualTest.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
</build>
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>copy-dependencies</id>
|
||||||
|
<phase>prepare-package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-dependencies</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${project.build.directory}/libs</outputDirectory>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<properties>
|
<plugin>
|
||||||
<!-- persistence -->
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<hibernate.version>4.3.11.Final</hibernate.version>
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
<mysql-connector-java.version>5.1.38</mysql-connector-java.version>
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<addClasspath>true</addClasspath>
|
||||||
|
<classpathPrefix>libs/</classpathPrefix>
|
||||||
|
<mainClass>org.baeldung.executable.ExecutableMavenJar</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- marshalling -->
|
<plugin>
|
||||||
<jackson.version>2.7.2</jackson.version>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<archive>
|
||||||
|
<manifest>
|
||||||
|
<mainClass>org.baeldung.executable.ExecutableMavenJar</mainClass>
|
||||||
|
</manifest>
|
||||||
|
</archive>
|
||||||
|
<descriptorRefs>
|
||||||
|
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||||
|
</descriptorRefs>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- logging -->
|
<plugin>
|
||||||
<org.slf4j.version>1.7.13</org.slf4j.version>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<logback.version>1.1.3</logback.version>
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<shadedArtifactAttached>true</shadedArtifactAttached>
|
||||||
|
<transformers>
|
||||||
|
<transformer
|
||||||
|
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
|
||||||
|
<mainClass>org.baeldung.executable.ExecutableMavenJar</mainClass>
|
||||||
|
</transformer>
|
||||||
|
</transformers>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- various -->
|
<plugin>
|
||||||
<hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
|
<groupId>com.jolira</groupId>
|
||||||
|
<artifactId>onejar-maven-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<configuration>
|
||||||
|
<mainClass>org.baeldung.executable.ExecutableMavenJar</mainClass>
|
||||||
|
<attachToBuild>true</attachToBuild>
|
||||||
|
<filename>${project.build.finalName}-onejar.${project.packaging}</filename>
|
||||||
|
</configuration>
|
||||||
|
<goals>
|
||||||
|
<goal>one-jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
<!-- util -->
|
<plugin>
|
||||||
<guava.version>19.0</guava.version>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<commons-lang3.version>3.4</commons-lang3.version>
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>repackage</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<classifier>spring-boot</classifier>
|
||||||
|
<mainClass>org.baeldung.executable.ExecutableMavenJar</mainClass>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
|
</plugins>
|
||||||
|
|
||||||
<!-- testing -->
|
</build>
|
||||||
<org.hamcrest.version>1.3</org.hamcrest.version>
|
|
||||||
<junit.version>4.12</junit.version>
|
|
||||||
<mockito.version>1.10.19</mockito.version>
|
|
||||||
<testng.version>6.8</testng.version>
|
|
||||||
<assertj.version>3.5.1</assertj.version>
|
|
||||||
|
|
||||||
<httpcore.version>4.4.1</httpcore.version>
|
<properties>
|
||||||
<httpclient.version>4.5</httpclient.version>
|
<!-- persistence -->
|
||||||
|
<hibernate.version>4.3.11.Final</hibernate.version>
|
||||||
|
<mysql-connector-java.version>5.1.38</mysql-connector-java.version>
|
||||||
|
|
||||||
<rest-assured.version>2.9.0</rest-assured.version>
|
<!-- marshalling -->
|
||||||
|
<jackson.version>2.7.8</jackson.version>
|
||||||
|
|
||||||
<!-- maven plugins -->
|
<!-- logging -->
|
||||||
<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
|
<org.slf4j.version>1.7.13</org.slf4j.version>
|
||||||
<maven-war-plugin.version>2.6</maven-war-plugin.version>
|
<logback.version>1.1.3</logback.version>
|
||||||
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
|
||||||
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
|
|
||||||
<cargo-maven2-plugin.version>1.4.18</cargo-maven2-plugin.version>
|
|
||||||
|
|
||||||
</properties>
|
<!-- various -->
|
||||||
|
<hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
|
||||||
|
|
||||||
|
<!-- util -->
|
||||||
|
<guava.version>19.0</guava.version>
|
||||||
|
<commons-lang3.version>3.4</commons-lang3.version>
|
||||||
|
|
||||||
|
<!-- testing -->
|
||||||
|
<org.hamcrest.version>1.3</org.hamcrest.version>
|
||||||
|
<junit.version>4.12</junit.version>
|
||||||
|
<mockito.version>1.10.19</mockito.version>
|
||||||
|
<testng.version>6.8</testng.version>
|
||||||
|
<assertj.version>3.5.1</assertj.version>
|
||||||
|
|
||||||
|
<httpcore.version>4.4.1</httpcore.version>
|
||||||
|
<httpclient.version>4.5</httpclient.version>
|
||||||
|
|
||||||
|
<rest-assured.version>2.9.0</rest-assured.version>
|
||||||
|
|
||||||
|
<!-- maven plugins -->
|
||||||
|
<maven-compiler-plugin.version>3.5.1</maven-compiler-plugin.version>
|
||||||
|
<maven-war-plugin.version>2.6</maven-war-plugin.version>
|
||||||
|
<maven-surefire-plugin.version>2.19.1</maven-surefire-plugin.version>
|
||||||
|
<maven-resources-plugin.version>2.7</maven-resources-plugin.version>
|
||||||
|
<cargo-maven2-plugin.version>1.4.18</cargo-maven2-plugin.version>
|
||||||
|
|
||||||
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -1,20 +0,0 @@
|
|||||||
package com.baeldung.core.exceptions;
|
|
||||||
|
|
||||||
import java.io.BufferedReader;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileReader;
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class FileNotFoundExceptionExample {
|
|
||||||
|
|
||||||
public static void main(String[] args) throws IOException {
|
|
||||||
BufferedReader rd = null;
|
|
||||||
try {
|
|
||||||
rd = new BufferedReader(new FileReader(new File("notExisting")));
|
|
||||||
rd.readLine();
|
|
||||||
} catch (FileNotFoundException ex) {
|
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
2
core-java/src/main/java/com/baeldung/datetime/README.md
Normal file
2
core-java/src/main/java/com/baeldung/datetime/README.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
### Relevant Articles:
|
||||||
|
- [Introduction to the Java 8 Date/Time API](http://www.baeldung.com/java-8-date-time-intro)
|
@ -5,12 +5,12 @@ import java.time.LocalTime;
|
|||||||
import java.time.Period;
|
import java.time.Period;
|
||||||
|
|
||||||
public class UseDuration {
|
public class UseDuration {
|
||||||
|
|
||||||
public LocalTime modifyDates(LocalTime localTime,Duration duration){
|
public LocalTime modifyDates(LocalTime localTime, Duration duration) {
|
||||||
return localTime.plus(duration);
|
return localTime.plus(duration);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Duration getDifferenceBetweenDates(LocalTime localTime1,LocalTime localTime2){
|
public Duration getDifferenceBetweenDates(LocalTime localTime1, LocalTime localTime2) {
|
||||||
return Duration.between(localTime1, localTime2);
|
return Duration.between(localTime1, localTime2);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -7,39 +7,39 @@ import java.time.temporal.ChronoUnit;
|
|||||||
import java.time.temporal.TemporalAdjusters;
|
import java.time.temporal.TemporalAdjusters;
|
||||||
|
|
||||||
public class UseLocalDate {
|
public class UseLocalDate {
|
||||||
|
|
||||||
public LocalDate getLocalDateUsingFactoryOfMethod(int year, int month, int dayOfMonth){
|
public LocalDate getLocalDateUsingFactoryOfMethod(int year, int month, int dayOfMonth) {
|
||||||
return LocalDate.of(year, month, dayOfMonth);
|
return LocalDate.of(year, month, dayOfMonth);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDate getLocalDateUsingParseMethod(String representation){
|
public LocalDate getLocalDateUsingParseMethod(String representation) {
|
||||||
return LocalDate.parse(representation);
|
return LocalDate.parse(representation);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDate getLocalDateFromClock(){
|
public LocalDate getLocalDateFromClock() {
|
||||||
LocalDate localDate = LocalDate.now();
|
LocalDate localDate = LocalDate.now();
|
||||||
return localDate;
|
return localDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDate getNextDay(LocalDate localDate){
|
public LocalDate getNextDay(LocalDate localDate) {
|
||||||
return localDate.plusDays(1);
|
return localDate.plusDays(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDate getPreviousDay(LocalDate localDate){
|
public LocalDate getPreviousDay(LocalDate localDate) {
|
||||||
return localDate.minus(1, ChronoUnit.DAYS);
|
return localDate.minus(1, ChronoUnit.DAYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DayOfWeek getDayOfWeek(LocalDate localDate){
|
public DayOfWeek getDayOfWeek(LocalDate localDate) {
|
||||||
DayOfWeek day = localDate.getDayOfWeek();
|
DayOfWeek day = localDate.getDayOfWeek();
|
||||||
return day;
|
return day;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDate getFirstDayOfMonth(){
|
public LocalDate getFirstDayOfMonth() {
|
||||||
LocalDate firstDayOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
|
LocalDate firstDayOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth());
|
||||||
return firstDayOfMonth;
|
return firstDayOfMonth;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDateTime getStartOfDay(LocalDate localDate){
|
public LocalDateTime getStartOfDay(LocalDate localDate) {
|
||||||
LocalDateTime startofDay = localDate.atStartOfDay();
|
LocalDateTime startofDay = localDate.atStartOfDay();
|
||||||
return startofDay;
|
return startofDay;
|
||||||
}
|
}
|
@ -3,8 +3,8 @@ package com.baeldung.datetime;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
public class UseLocalDateTime {
|
public class UseLocalDateTime {
|
||||||
|
|
||||||
public LocalDateTime getLocalDateTimeUsingParseMethod(String representation){
|
public LocalDateTime getLocalDateTimeUsingParseMethod(String representation) {
|
||||||
return LocalDateTime.parse(representation);
|
return LocalDateTime.parse(representation);
|
||||||
}
|
}
|
||||||
|
|
@ -4,32 +4,32 @@ import java.time.LocalTime;
|
|||||||
import java.time.temporal.ChronoUnit;
|
import java.time.temporal.ChronoUnit;
|
||||||
|
|
||||||
public class UseLocalTime {
|
public class UseLocalTime {
|
||||||
|
|
||||||
public LocalTime getLocalTimeUsingFactoryOfMethod(int hour, int min, int seconds){
|
public LocalTime getLocalTimeUsingFactoryOfMethod(int hour, int min, int seconds) {
|
||||||
LocalTime localTime = LocalTime.of(hour, min, seconds);
|
LocalTime localTime = LocalTime.of(hour, min, seconds);
|
||||||
return localTime;
|
return localTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalTime getLocalTimeUsingParseMethod(String timeRepresentation){
|
public LocalTime getLocalTimeUsingParseMethod(String timeRepresentation) {
|
||||||
LocalTime localTime = LocalTime.parse(timeRepresentation);
|
LocalTime localTime = LocalTime.parse(timeRepresentation);
|
||||||
return localTime;
|
return localTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalTime getLocalTimeFromClock(){
|
public LocalTime getLocalTimeFromClock() {
|
||||||
LocalTime localTime = LocalTime.now();
|
LocalTime localTime = LocalTime.now();
|
||||||
return localTime;
|
return localTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalTime addAnHour(LocalTime localTime){
|
public LocalTime addAnHour(LocalTime localTime) {
|
||||||
LocalTime newTime = localTime.plus(1,ChronoUnit.HOURS);
|
LocalTime newTime = localTime.plus(1, ChronoUnit.HOURS);
|
||||||
return newTime;
|
return newTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getHourFromLocalTime(LocalTime localTime){
|
public int getHourFromLocalTime(LocalTime localTime) {
|
||||||
return localTime.getHour();
|
return localTime.getHour();
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalTime getLocalTimeWithMinuteSetToValue(LocalTime localTime, int minute){
|
public LocalTime getLocalTimeWithMinuteSetToValue(LocalTime localTime, int minute) {
|
||||||
return localTime.withMinute(minute);
|
return localTime.withMinute(minute);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,12 +4,12 @@ import java.time.LocalDate;
|
|||||||
import java.time.Period;
|
import java.time.Period;
|
||||||
|
|
||||||
public class UsePeriod {
|
public class UsePeriod {
|
||||||
|
|
||||||
public LocalDate modifyDates(LocalDate localDate,Period period){
|
public LocalDate modifyDates(LocalDate localDate, Period period) {
|
||||||
return localDate.plus(period);
|
return localDate.plus(period);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Period getDifferenceBetweenDates(LocalDate localDate1,LocalDate localDate2){
|
public Period getDifferenceBetweenDates(LocalDate localDate1, LocalDate localDate2) {
|
||||||
return Period.between(localDate1, localDate2);
|
return Period.between(localDate1, localDate2);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -6,13 +6,13 @@ import java.util.Calendar;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class UseToInstant {
|
public class UseToInstant {
|
||||||
|
|
||||||
public LocalDateTime convertDateToLocalDate(Date date){
|
public LocalDateTime convertDateToLocalDate(Date date) {
|
||||||
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
|
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());
|
||||||
return localDateTime;
|
return localDateTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
public LocalDateTime convertDateToLocalDate(Calendar calendar){
|
public LocalDateTime convertDateToLocalDate(Calendar calendar) {
|
||||||
LocalDateTime localDateTime = LocalDateTime.ofInstant(calendar.toInstant(), ZoneId.systemDefault());
|
LocalDateTime localDateTime = LocalDateTime.ofInstant(calendar.toInstant(), ZoneId.systemDefault());
|
||||||
return localDateTime;
|
return localDateTime;
|
||||||
}
|
}
|
@ -5,8 +5,8 @@ import java.time.ZoneId;
|
|||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
|
|
||||||
public class UseZonedDateTime {
|
public class UseZonedDateTime {
|
||||||
|
|
||||||
public ZonedDateTime getZonedDateTime(LocalDateTime localDateTime,ZoneId zoneId){
|
public ZonedDateTime getZonedDateTime(LocalDateTime localDateTime, ZoneId zoneId) {
|
||||||
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId);
|
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId);
|
||||||
return zonedDateTime;
|
return zonedDateTime;
|
||||||
}
|
}
|
@ -1,11 +1,5 @@
|
|||||||
package com.baeldung.enums;
|
package com.baeldung.enums;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
||||||
import org.apache.commons.collections15.Predicate;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -13,13 +7,11 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
public class Pizza {
|
public class Pizza {
|
||||||
|
|
||||||
private static EnumSet<PizzaStatus> undeliveredPizzaStatuses =
|
private static EnumSet<PizzaStatusEnum> deliveredPizzaStatuses = EnumSet.of(PizzaStatusEnum.DELIVERED);
|
||||||
EnumSet.of(PizzaStatus.ORDERED, PizzaStatus.READY);
|
|
||||||
|
|
||||||
private PizzaStatus status;
|
private PizzaStatusEnum status;
|
||||||
|
|
||||||
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
|
public enum PizzaStatusEnum {
|
||||||
public enum PizzaStatus {
|
|
||||||
ORDERED(5) {
|
ORDERED(5) {
|
||||||
@Override
|
@Override
|
||||||
public boolean isOrdered() {
|
public boolean isOrdered() {
|
||||||
@ -53,21 +45,20 @@ public class Pizza {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonProperty("timeToDelivery")
|
|
||||||
public int getTimeToDelivery() {
|
public int getTimeToDelivery() {
|
||||||
return timeToDelivery;
|
return timeToDelivery;
|
||||||
}
|
}
|
||||||
|
|
||||||
PizzaStatus(int timeToDelivery) {
|
PizzaStatusEnum(int timeToDelivery) {
|
||||||
this.timeToDelivery = timeToDelivery;
|
this.timeToDelivery = timeToDelivery;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public PizzaStatus getStatus() {
|
public PizzaStatusEnum getStatus() {
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStatus(PizzaStatus status) {
|
public void setStatus(PizzaStatusEnum status) {
|
||||||
this.status = status;
|
this.status = status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -80,31 +71,18 @@ public class Pizza {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static List<Pizza> getAllUndeliveredPizzas(List<Pizza> input) {
|
public static List<Pizza> getAllUndeliveredPizzas(List<Pizza> input) {
|
||||||
return input.stream().filter(
|
return input.stream().filter((s) -> !deliveredPizzaStatuses.contains(s.getStatus())).collect(Collectors.toList());
|
||||||
(s) -> undeliveredPizzaStatuses.contains(s.getStatus()))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static EnumMap<PizzaStatus, List<Pizza>>
|
public static EnumMap<PizzaStatusEnum, List<Pizza>> groupPizzaByStatus(List<Pizza> pzList) {
|
||||||
groupPizzaByStatus(List<Pizza> pzList) {
|
return pzList.stream().collect(Collectors.groupingBy(Pizza::getStatus, () -> new EnumMap<>(PizzaStatusEnum.class), Collectors.toList()));
|
||||||
return pzList.stream().collect(
|
|
||||||
Collectors.groupingBy(Pizza::getStatus,
|
|
||||||
() -> new EnumMap<>(PizzaStatus.class), Collectors.toList()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deliver() {
|
public void deliver() {
|
||||||
if (isDeliverable()) {
|
if (isDeliverable()) {
|
||||||
PizzaDeliverySystemConfiguration.getInstance().getDeliveryStrategy().deliver(this);
|
PizzaDeliverySystemConfiguration.getInstance().getDeliveryStrategy().deliver(this);
|
||||||
this.setStatus(PizzaStatus.DELIVERED);
|
this.setStatus(PizzaStatusEnum.DELIVERED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getJsonString(Pizza pz) throws IOException {
|
|
||||||
ObjectMapper mapper = new ObjectMapper();
|
|
||||||
return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(pz);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Predicate<Pizza> thatAreNotDelivered() {
|
|
||||||
return entry -> undeliveredPizzaStatuses.contains(entry.getStatus());
|
|
||||||
}
|
|
||||||
}
|
}
|
2
core-java/src/main/java/com/baeldung/enums/README.md
Normal file
2
core-java/src/main/java/com/baeldung/enums/README.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
### Relevant Articles:
|
||||||
|
- [A Guide to Java Enums](http://www.baeldung.com/a-guide-to-java-enums)
|
@ -30,8 +30,7 @@ public class CustomRecursiveAction extends RecursiveAction {
|
|||||||
|
|
||||||
private Collection<CustomRecursiveAction> createSubtasks() {
|
private Collection<CustomRecursiveAction> createSubtasks() {
|
||||||
|
|
||||||
List<CustomRecursiveAction> subtasks =
|
List<CustomRecursiveAction> subtasks = new ArrayList<>();
|
||||||
new ArrayList<>();
|
|
||||||
|
|
||||||
String partOne = workLoad.substring(0, workLoad.length() / 2);
|
String partOne = workLoad.substring(0, workLoad.length() / 2);
|
||||||
String partTwo = workLoad.substring(workLoad.length() / 2, workLoad.length());
|
String partTwo = workLoad.substring(workLoad.length() / 2, workLoad.length());
|
@ -1,6 +1,5 @@
|
|||||||
package com.baeldung.forkjoin;
|
package com.baeldung.forkjoin;
|
||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -23,10 +22,7 @@ public class CustomRecursiveTask extends RecursiveTask<Integer> {
|
|||||||
|
|
||||||
if (arr.length > THRESHOLD) {
|
if (arr.length > THRESHOLD) {
|
||||||
|
|
||||||
return ForkJoinTask.invokeAll(createSubtasks())
|
return ForkJoinTask.invokeAll(createSubtasks()).stream().mapToInt(ForkJoinTask::join).sum();
|
||||||
.stream()
|
|
||||||
.mapToInt(ForkJoinTask::join)
|
|
||||||
.sum();
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
return processing(arr);
|
return processing(arr);
|
||||||
@ -35,17 +31,12 @@ public class CustomRecursiveTask extends RecursiveTask<Integer> {
|
|||||||
|
|
||||||
private Collection<CustomRecursiveTask> createSubtasks() {
|
private Collection<CustomRecursiveTask> createSubtasks() {
|
||||||
List<CustomRecursiveTask> dividedTasks = new ArrayList<>();
|
List<CustomRecursiveTask> dividedTasks = new ArrayList<>();
|
||||||
dividedTasks.add(new CustomRecursiveTask(
|
dividedTasks.add(new CustomRecursiveTask(Arrays.copyOfRange(arr, 0, arr.length / 2)));
|
||||||
Arrays.copyOfRange(arr, 0, arr.length / 2)));
|
dividedTasks.add(new CustomRecursiveTask(Arrays.copyOfRange(arr, arr.length / 2, arr.length)));
|
||||||
dividedTasks.add(new CustomRecursiveTask(
|
|
||||||
Arrays.copyOfRange(arr, arr.length / 2, arr.length)));
|
|
||||||
return dividedTasks;
|
return dividedTasks;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Integer processing(int[] arr) {
|
private Integer processing(int[] arr) {
|
||||||
return Arrays.stream(arr)
|
return Arrays.stream(arr).filter(a -> a > 10 && a < 27).map(a -> a * 10).sum();
|
||||||
.filter(a -> a > 10 && a < 27)
|
|
||||||
.map(a -> a * 10)
|
|
||||||
.sum();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package com.baeldung.forkjoin.util;
|
package com.baeldung.forkjoin.util;
|
||||||
|
|
||||||
|
|
||||||
import java.util.concurrent.ForkJoinPool;
|
import java.util.concurrent.ForkJoinPool;
|
||||||
|
|
||||||
public class PoolUtil {
|
public class PoolUtil {
|
@ -0,0 +1,56 @@
|
|||||||
|
package com.baeldung.java.networking.cookies;
|
||||||
|
|
||||||
|
import java.net.*;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class PersistentCookieStore implements CookieStore, Runnable {
|
||||||
|
CookieStore store;
|
||||||
|
|
||||||
|
public PersistentCookieStore() {
|
||||||
|
store = new CookieManager().getCookieStore();
|
||||||
|
// deserialize cookies into store
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread(this));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
// serialize cookies to persistent storage
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(URI uri, HttpCookie cookie) {
|
||||||
|
store.add(uri, cookie);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<HttpCookie> get(URI uri) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<HttpCookie> getCookies() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<URI> getURIs() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean remove(URI uri, HttpCookie cookie) {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean removeAll() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package com.baeldung.java.networking.cookies;
|
||||||
|
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
public class ProxyAcceptCookiePolicy implements CookiePolicy {
|
||||||
|
String acceptedProxy;
|
||||||
|
|
||||||
|
public ProxyAcceptCookiePolicy(String acceptedProxy) {
|
||||||
|
this.acceptedProxy = acceptedProxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean shouldAccept(URI uri, HttpCookie cookie) {
|
||||||
|
String host;
|
||||||
|
try {
|
||||||
|
host = InetAddress.getByName(uri.getHost()).getCanonicalHostName();
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
host = uri.getHost();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!HttpCookie.domainMatches(acceptedProxy, host)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CookiePolicy.ACCEPT_ORIGINAL_SERVER.shouldAccept(uri, cookie);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package com.baeldung.java.networking.udp;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.DatagramPacket;
|
||||||
|
import java.net.DatagramSocket;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
|
||||||
|
public class EchoClient {
|
||||||
|
private DatagramSocket socket;
|
||||||
|
private InetAddress address;
|
||||||
|
|
||||||
|
private byte[] buf;
|
||||||
|
|
||||||
|
public EchoClient() {
|
||||||
|
try {
|
||||||
|
socket = new DatagramSocket();
|
||||||
|
address = InetAddress.getByName("localhost");
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String sendEcho(String msg) {
|
||||||
|
DatagramPacket packet = null;
|
||||||
|
try {
|
||||||
|
buf=msg.getBytes();
|
||||||
|
packet = new DatagramPacket(buf, buf.length, address, 4445);
|
||||||
|
socket.send(packet);
|
||||||
|
packet = new DatagramPacket(buf, buf.length);
|
||||||
|
socket.receive(packet);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
String received = new String(packet.getData(), 0, packet.getLength());
|
||||||
|
return received;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void close() {
|
||||||
|
socket.close();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package com.baeldung.java.networking.udp;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.DatagramPacket;
|
||||||
|
import java.net.DatagramSocket;
|
||||||
|
import java.net.InetAddress;
|
||||||
|
|
||||||
|
public class EchoServer extends Thread {
|
||||||
|
|
||||||
|
protected DatagramSocket socket = null;
|
||||||
|
protected boolean running;
|
||||||
|
protected byte[] buf = new byte[256];
|
||||||
|
|
||||||
|
public EchoServer() throws IOException {
|
||||||
|
socket = new DatagramSocket(4445);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
running = true;
|
||||||
|
|
||||||
|
while (running) {
|
||||||
|
try {
|
||||||
|
|
||||||
|
DatagramPacket packet = new DatagramPacket(buf, buf.length);
|
||||||
|
socket.receive(packet);
|
||||||
|
InetAddress address = packet.getAddress();
|
||||||
|
int port = packet.getPort();
|
||||||
|
packet = new DatagramPacket(buf, buf.length, address, port);
|
||||||
|
String received = new String(packet.getData(), 0, packet.getLength());
|
||||||
|
if (received.equals("end")) {
|
||||||
|
running = false;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
socket.send(packet);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
socket.close();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,46 @@
|
|||||||
|
package com.baeldung.java.nio.selector;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.channels.SocketChannel;
|
||||||
|
|
||||||
|
public class EchoClient {
|
||||||
|
private static SocketChannel client;
|
||||||
|
private static ByteBuffer buffer;
|
||||||
|
private static EchoClient instance;
|
||||||
|
|
||||||
|
public static EchoClient start() {
|
||||||
|
if (instance == null)
|
||||||
|
instance = new EchoClient();
|
||||||
|
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private EchoClient() {
|
||||||
|
try {
|
||||||
|
client = SocketChannel.open(new InetSocketAddress("localhost", 5454));
|
||||||
|
buffer = ByteBuffer.allocate(256);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String sendMessage(String msg) {
|
||||||
|
buffer = ByteBuffer.wrap(msg.getBytes());
|
||||||
|
String response = null;
|
||||||
|
try {
|
||||||
|
client.write(buffer);
|
||||||
|
buffer.clear();
|
||||||
|
client.read(buffer);
|
||||||
|
response = new String(buffer.array()).trim();
|
||||||
|
System.out.println("response=" + response);
|
||||||
|
buffer.clear();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,63 @@
|
|||||||
|
package com.baeldung.java.nio.selector;
|
||||||
|
|
||||||
|
import java.nio.channels.ServerSocketChannel;
|
||||||
|
import java.nio.channels.SocketChannel;
|
||||||
|
import java.nio.channels.Selector;
|
||||||
|
import java.nio.channels.SelectionKey;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class EchoServer {
|
||||||
|
|
||||||
|
public static void main(String[] args)
|
||||||
|
|
||||||
|
throws IOException {
|
||||||
|
Selector selector = Selector.open();
|
||||||
|
ServerSocketChannel serverSocket = ServerSocketChannel.open();
|
||||||
|
serverSocket.bind(new InetSocketAddress("localhost", 5454));
|
||||||
|
serverSocket.configureBlocking(false);
|
||||||
|
serverSocket.register(selector, SelectionKey.OP_ACCEPT);
|
||||||
|
ByteBuffer buffer = ByteBuffer.allocate(256);
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
selector.select();
|
||||||
|
Set<SelectionKey> selectedKeys = selector.selectedKeys();
|
||||||
|
Iterator<SelectionKey> iter = selectedKeys.iterator();
|
||||||
|
while (iter.hasNext()) {
|
||||||
|
|
||||||
|
SelectionKey key = iter.next();
|
||||||
|
|
||||||
|
if (key.isAcceptable()) {
|
||||||
|
SocketChannel client = serverSocket.accept();
|
||||||
|
client.configureBlocking(false);
|
||||||
|
client.register(selector, SelectionKey.OP_READ);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (key.isReadable()) {
|
||||||
|
SocketChannel client = (SocketChannel) key.channel();
|
||||||
|
client.read(buffer);
|
||||||
|
buffer.flip();
|
||||||
|
client.write(buffer);
|
||||||
|
buffer.clear();
|
||||||
|
}
|
||||||
|
iter.remove();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static Process start() throws IOException, InterruptedException {
|
||||||
|
String javaHome = System.getProperty("java.home");
|
||||||
|
String javaBin = javaHome + File.separator + "bin" + File.separator + "java";
|
||||||
|
String classpath = System.getProperty("java.class.path");
|
||||||
|
String className = EchoServer.class.getCanonicalName();
|
||||||
|
|
||||||
|
ProcessBuilder builder = new ProcessBuilder(javaBin, "-cp", classpath, className);
|
||||||
|
|
||||||
|
return builder.start();
|
||||||
|
}
|
||||||
|
}
|
@ -1,27 +0,0 @@
|
|||||||
package com.baeldung.java.regex;
|
|
||||||
|
|
||||||
public class Result {
|
|
||||||
private boolean found = false;
|
|
||||||
private int count = 0;
|
|
||||||
|
|
||||||
public Result() {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFound() {
|
|
||||||
return found;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFound(boolean found) {
|
|
||||||
this.found = found;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getCount() {
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCount(int count) {
|
|
||||||
this.count = count;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -9,7 +9,7 @@ public interface Vehicle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
default long[] startPosition() {
|
default long[] startPosition() {
|
||||||
return new long[]{23, 15};
|
return new long[] { 23, 15 };
|
||||||
}
|
}
|
||||||
|
|
||||||
default String getOverview() {
|
default String getOverview() {
|
@ -1,9 +1,9 @@
|
|||||||
package com.baeldung.java_8_features;
|
package com.baeldung.java_8_features;
|
||||||
|
|
||||||
public class VehicleImpl implements Vehicle {
|
public class VehicleImpl implements Vehicle {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void moveTo(long altitude, long longitude) {
|
public void moveTo(long altitude, long longitude) {
|
||||||
//do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
package com.baeldung.printscreen;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
public class Screenshot {
|
||||||
|
|
||||||
|
private final String path;
|
||||||
|
|
||||||
|
public Screenshot(String path) {
|
||||||
|
this.path = path;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void getScreenshot(int timeToWait) throws Exception {
|
||||||
|
Thread.sleep(timeToWait);
|
||||||
|
Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize());
|
||||||
|
Robot robot = new Robot();
|
||||||
|
BufferedImage img = robot.createScreenCapture(rectangle);
|
||||||
|
ImageIO.write(img, "jpg", new File(path));
|
||||||
|
}
|
||||||
|
}
|
41
core-java/src/main/java/com/baeldung/socket/EchoClient.java
Normal file
41
core-java/src/main/java/com/baeldung/socket/EchoClient.java
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
package com.baeldung.socket;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.*;
|
||||||
|
|
||||||
|
public class EchoClient {
|
||||||
|
private Socket clientSocket;
|
||||||
|
private PrintWriter out;
|
||||||
|
private BufferedReader in;
|
||||||
|
|
||||||
|
public void startConnection(String ip, int port) {
|
||||||
|
try {
|
||||||
|
clientSocket = new Socket(ip, port);
|
||||||
|
out = new PrintWriter(clientSocket.getOutputStream(), true);
|
||||||
|
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
|
||||||
|
} catch (IOException e) {
|
||||||
|
System.out.print(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String sendMessage(String msg) {
|
||||||
|
try {
|
||||||
|
out.println(msg);
|
||||||
|
return in.readLine();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stopConnection() {
|
||||||
|
try {
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
clientSocket.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,70 @@
|
|||||||
|
package com.baeldung.socket;
|
||||||
|
|
||||||
|
import java.net.*;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class EchoMultiServer {
|
||||||
|
private ServerSocket serverSocket;
|
||||||
|
|
||||||
|
public void start(int port) {
|
||||||
|
try {
|
||||||
|
serverSocket = new ServerSocket(port);
|
||||||
|
while (true)
|
||||||
|
new EchoClientHandler(serverSocket.accept()).run();
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
try {
|
||||||
|
|
||||||
|
serverSocket.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class EchoClientHandler extends Thread {
|
||||||
|
private Socket clientSocket;
|
||||||
|
private PrintWriter out;
|
||||||
|
private BufferedReader in;
|
||||||
|
|
||||||
|
public EchoClientHandler(Socket socket) {
|
||||||
|
this.clientSocket = socket;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
out = new PrintWriter(clientSocket.getOutputStream(), true);
|
||||||
|
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
|
||||||
|
String inputLine;
|
||||||
|
while ((inputLine = in.readLine()) != null) {
|
||||||
|
if (".".equals(inputLine)) {
|
||||||
|
out.println("bye");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
out.println(inputLine);
|
||||||
|
}
|
||||||
|
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
clientSocket.close();
|
||||||
|
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
EchoMultiServer server = new EchoMultiServer();
|
||||||
|
server.start(5555);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
49
core-java/src/main/java/com/baeldung/socket/EchoServer.java
Normal file
49
core-java/src/main/java/com/baeldung/socket/EchoServer.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package com.baeldung.socket;
|
||||||
|
|
||||||
|
import java.net.*;
|
||||||
|
import java.io.*;
|
||||||
|
|
||||||
|
public class EchoServer {
|
||||||
|
private ServerSocket serverSocket;
|
||||||
|
private Socket clientSocket;
|
||||||
|
private PrintWriter out;
|
||||||
|
private BufferedReader in;
|
||||||
|
|
||||||
|
public void start(int port) {
|
||||||
|
try {
|
||||||
|
serverSocket = new ServerSocket(port);
|
||||||
|
clientSocket = serverSocket.accept();
|
||||||
|
out = new PrintWriter(clientSocket.getOutputStream(), true);
|
||||||
|
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
|
||||||
|
String inputLine;
|
||||||
|
while ((inputLine = in.readLine()) != null) {
|
||||||
|
if (".".equals(inputLine)) {
|
||||||
|
out.println("good bye");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
out.println(inputLine);
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stop() {
|
||||||
|
try {
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
clientSocket.close();
|
||||||
|
serverSocket.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
EchoServer server = new EchoServer();
|
||||||
|
server.start(4444);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
44
core-java/src/main/java/com/baeldung/socket/GreetClient.java
Normal file
44
core-java/src/main/java/com/baeldung/socket/GreetClient.java
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package com.baeldung.socket;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.net.Socket;
|
||||||
|
|
||||||
|
public class GreetClient {
|
||||||
|
private Socket clientSocket;
|
||||||
|
private PrintWriter out;
|
||||||
|
private BufferedReader in;
|
||||||
|
|
||||||
|
public void startConnection(String ip, int port) {
|
||||||
|
try {
|
||||||
|
clientSocket = new Socket(ip, port);
|
||||||
|
out = new PrintWriter(clientSocket.getOutputStream(), true);
|
||||||
|
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
|
||||||
|
} catch (IOException e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public String sendMessage(String msg) {
|
||||||
|
try {
|
||||||
|
out.println(msg);
|
||||||
|
return in.readLine();
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stopConnection() {
|
||||||
|
try {
|
||||||
|
in.close();
|
||||||
|
out.close();
|
||||||
|
clientSocket.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user