From 25f454688117455174dc27a64c092d55375401e5 Mon Sep 17 00:00:00 2001 From: Kevin Gilmore Date: Fri, 8 Apr 2016 06:37:06 -0500 Subject: [PATCH 001/283] Spring Data Couchbase Article 2 --- spring-data-couchbase-2/.classpath | 2 +- .../data/couchbase/MyCouchbaseConfig.java | 19 ++ .../spring/data/couchbase/model/Student.java | 113 ++++++++++++ .../repos/CustomStudentRepository.java | 9 + .../repos/CustomStudentRepositoryImpl.java | 25 +++ .../couchbase/repos/StudentRepository.java | 11 ++ .../service/StudentRepositoryService.java | 58 ++++++ .../couchbase/service/StudentService.java | 22 +++ .../service/StudentTemplateService.java | 55 ++++++ .../data/couchbase/TestCouchbaseConfig.java | 6 + .../service/StudentRepositoryServiceTest.java | 13 ++ .../couchbase/service/StudentServiceTest.java | 166 ++++++++++++++++++ .../service/StudentTemplateServiceTest.java | 13 ++ 13 files changed, 511 insertions(+), 1 deletion(-) create mode 100644 spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java create mode 100644 spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java create mode 100644 spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java create mode 100644 spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java create mode 100644 spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java create mode 100644 spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java create mode 100644 spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java create mode 100644 spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java create mode 100644 spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java create mode 100644 spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceTest.java diff --git a/spring-data-couchbase-2/.classpath b/spring-data-couchbase-2/.classpath index f4c34adf1f..679a31b6da 100644 --- a/spring-data-couchbase-2/.classpath +++ b/spring-data-couchbase-2/.classpath @@ -4,7 +4,7 @@ - + diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java index 5c0b1a93ca..8e6b971dbf 100644 --- a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java @@ -3,9 +3,13 @@ package org.baeldung.spring.data.couchbase; import java.util.Arrays; import java.util.List; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration; +import org.springframework.data.couchbase.core.mapping.event.ValidatingCouchbaseEventListener; +import org.springframework.data.couchbase.core.query.Consistency; import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepositories; +import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @Configuration @EnableCouchbaseRepositories(basePackages={"org.baeldung.spring.data.couchbase"}) @@ -29,4 +33,19 @@ public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration { protected String getBucketPassword() { return BUCKET_PASSWORD; } + + @Override + protected Consistency getDefaultConsistency() { + return Consistency.READ_YOUR_OWN_WRITES; + } + + @Bean + public LocalValidatorFactoryBean localValidatorFactoryBean() { + return new LocalValidatorFactoryBean(); + } + + @Bean + public ValidatingCouchbaseEventListener validatingCouchbaseEventListener() { + return new ValidatingCouchbaseEventListener(localValidatorFactoryBean()); + } } diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java new file mode 100644 index 0000000000..9c266c2c62 --- /dev/null +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java @@ -0,0 +1,113 @@ +package org.baeldung.spring.data.couchbase.model; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Past; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +import org.joda.time.DateTime; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.Version; +import org.springframework.data.couchbase.core.mapping.Document; + +import com.couchbase.client.java.repository.annotation.Field; + +@Document +public class Student { + private static final String NAME_REGEX = "^[a-zA-Z .'-]+$"; + + @Id + private String id; + @Field + @NotNull + @Size(min=1, max=20) + @Pattern(regexp=NAME_REGEX) + private String firstName; + @Field + @NotNull + @Size(min=1, max=20) + @Pattern(regexp=NAME_REGEX) + private String lastName; + @Field + @Past + private DateTime dateOfBirth; + @Field + @NotNull + private DateTime created; + @Field + private DateTime updated; + @Version + private long version; + + public Student() {} + + public Student(String id, String firstName, String lastName, DateTime dateOfBirth) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + this.dateOfBirth = dateOfBirth; + } + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getFirstName() { + return firstName; + } + public void setFirstName(String firstName) { + this.firstName = firstName; + } + public String getLastName() { + return lastName; + } + public void setLastName(String lastName) { + this.lastName = lastName; + } + public DateTime getDateOfBirth() { + return dateOfBirth; + } + public void setDateOfBirth(DateTime dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + public DateTime getCreated() { + return created; + } + public void setCreated(DateTime created) { + this.created = created; + } + public DateTime getUpdated() { + return updated; + } + public void setUpdated(DateTime updated) { + this.updated = updated; + } + + @Override + public int hashCode() { + int hash = 1; + if(id != null) { + hash = hash * 31 + id.hashCode(); + } + if(firstName != null) { + hash = hash * 31 + firstName.hashCode(); + } + if(lastName != null) { + hash = hash * 31 + lastName.hashCode(); + } + if(dateOfBirth != null) { + hash = hash * 31 + dateOfBirth.hashCode(); + } + return hash; + } + + @Override + public boolean equals(Object obj) { + if((obj == null) || (obj.getClass() != this.getClass())) return false; + if(obj == this) return true; + Student other = (Student) obj; + return this.hashCode() == other.hashCode(); + } +} \ No newline at end of file diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java new file mode 100644 index 0000000000..9a5bf21492 --- /dev/null +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepository.java @@ -0,0 +1,9 @@ +package org.baeldung.spring.data.couchbase.repos; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Student; + +public interface CustomStudentRepository { + List findByFirstNameStartsWith(String s); +} diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java new file mode 100644 index 0000000000..66b672a4fd --- /dev/null +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/CustomStudentRepositoryImpl.java @@ -0,0 +1,25 @@ +package org.baeldung.spring.data.couchbase.repos; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Student; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.couchbase.core.CouchbaseTemplate; + +import com.couchbase.client.java.view.Stale; +import com.couchbase.client.java.view.ViewQuery; + +public class CustomStudentRepositoryImpl implements CustomStudentRepository { + + private static final String DESIGN_DOC = "student"; + + @Autowired + private CouchbaseTemplate template; + + public List findByFirstNameStartsWith(String s) { + return template.findByView(ViewQuery.from(DESIGN_DOC, "byFirstName") + .startKey(s) + .stale(Stale.FALSE), + Student.class); + } +} diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java new file mode 100644 index 0000000000..331ddc553d --- /dev/null +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java @@ -0,0 +1,11 @@ +package org.baeldung.spring.data.couchbase.repos; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Student; +import org.springframework.data.repository.CrudRepository; + +public interface StudentRepository extends CrudRepository, CustomStudentRepository { + List findByFirstName(String firstName); + List findByLastName(String lastName); +} diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java new file mode 100644 index 0000000000..58304afc1c --- /dev/null +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java @@ -0,0 +1,58 @@ +package org.baeldung.spring.data.couchbase.service; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Student; +import org.baeldung.spring.data.couchbase.repos.StudentRepository; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +@Service +@Qualifier("StudentRepositoryService") +public class StudentRepositoryService implements StudentService { + + private StudentRepository repo; + @Autowired + public void setStudentRepository(StudentRepository repo) { + this.repo = repo; + } + + public Student findOne(String id) { + return repo.findOne(id); + } + + public List findAll() { + List people = new ArrayList(); + Iterator it = repo.findAll().iterator(); + while(it.hasNext()) { + people.add(it.next()); + } + return people; + } + + public List findByFirstName(String firstName) { + return repo.findByFirstName(firstName); + } + + public List findByLastName(String lastName) { + return repo.findByLastName(lastName); + } + + public void create(Student student) { + student.setCreated(DateTime.now()); + repo.save(student); + } + + public void update(Student student) { + student.setUpdated(DateTime.now()); + repo.save(student); + } + + public void delete(Student student) { + repo.delete(student); + } +} diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java new file mode 100644 index 0000000000..f483ef0fb6 --- /dev/null +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java @@ -0,0 +1,22 @@ +package org.baeldung.spring.data.couchbase.service; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Student; + +public interface StudentService { + + Student findOne(String id); + + List findAll(); + + List findByFirstName(String firstName); + + List findByLastName(String lastName); + + void create(Student student); + + void update(Student student); + + void delete(Student student); +} diff --git a/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java new file mode 100644 index 0000000000..c3808e0015 --- /dev/null +++ b/spring-data-couchbase-2/src/main/java/org/baeldung/spring/data/couchbase/service/StudentTemplateService.java @@ -0,0 +1,55 @@ +package org.baeldung.spring.data.couchbase.service; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Student; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.couchbase.core.CouchbaseTemplate; +import org.springframework.stereotype.Service; + +import com.couchbase.client.java.view.ViewQuery; + +@Service +@Qualifier("StudentTemplateService") +public class StudentTemplateService implements StudentService { + + private static final String DESIGN_DOC = "student"; + + private CouchbaseTemplate template; + @Autowired + public void setCouchbaseTemplate(CouchbaseTemplate template) { + this.template = template; + } + + public Student findOne(String id) { + return template.findById(id, Student.class); + } + + public List findAll() { + return template.findByView(ViewQuery.from(DESIGN_DOC, "all"), Student.class); + } + + public List findByFirstName(String firstName) { + return template.findByView(ViewQuery.from(DESIGN_DOC, "byFirstName"), Student.class); + } + + public List findByLastName(String lastName) { + return template.findByView(ViewQuery.from(DESIGN_DOC, "byLastName"), Student.class); + } + + public void create(Student student) { + student.setCreated(DateTime.now()); + template.insert(student); + } + + public void update(Student student) { + student.setUpdated(DateTime.now()); + template.update(student); + } + + public void delete(Student student) { + template.remove(student); + } +} diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java index 4edfb165bf..c298ef0a61 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java @@ -1,6 +1,7 @@ package org.baeldung.spring.data.couchbase; import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; +import org.springframework.data.couchbase.core.query.Consistency; public class TestCouchbaseConfig extends MyCouchbaseConfig { @@ -8,4 +9,9 @@ public class TestCouchbaseConfig extends MyCouchbaseConfig { public String typeKey() { return MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE; } + + @Override + public Consistency getDefaultConsistency() { + return Consistency.READ_YOUR_OWN_WRITES; + } } diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java new file mode 100644 index 0000000000..040453fd73 --- /dev/null +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java @@ -0,0 +1,13 @@ +package org.baeldung.spring.data.couchbase.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +public class StudentRepositoryServiceTest extends StudentServiceTest { + + @Autowired + @Qualifier("StudentRepositoryService") + public void setStudentService(StudentService service) { + this.studentService = service; + } +} diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java new file mode 100644 index 0000000000..79948cbedf --- /dev/null +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentServiceTest.java @@ -0,0 +1,166 @@ +package org.baeldung.spring.data.couchbase.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import javax.validation.ConstraintViolationException; + +import org.baeldung.spring.data.couchbase.IntegrationTest; +import org.baeldung.spring.data.couchbase.MyCouchbaseConfig; +import org.baeldung.spring.data.couchbase.model.Student; +import org.joda.time.DateTime; +import org.junit.BeforeClass; +import org.junit.Test; + +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonObject; + +public abstract class StudentServiceTest extends IntegrationTest { + + static final String typeField = "_class"; + static final String joe = "Joe"; + static final String college = "College"; + static final String joeCollegeId = "student:" + joe + ":" + college; + static final DateTime joeCollegeDob = DateTime.now().minusYears(21); + static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); + static final JsonObject jsonJoeCollege = JsonObject.empty() + .put(typeField, Student.class.getName()) + .put("firstName", joe) + .put("lastName", college) + .put("created", DateTime.now().getMillis()) + .put("version", 1); + + static final String judy = "Judy"; + static final String jetson = "Jetson"; + static final String judyJetsonId = "student:" + judy + ":" + jetson; + static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); + static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); + static final JsonObject jsonJudyJetson = JsonObject.empty() + .put(typeField, Student.class.getName()) + .put("firstName", judy) + .put("lastName", jetson) + .put("created", DateTime.now().getMillis()) + .put("version", 1); + + StudentService studentService; + + @BeforeClass + public static void setupBeforeClass() { + Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); + Bucket bucket = cluster.openBucket(MyCouchbaseConfig.BUCKET_NAME, MyCouchbaseConfig.BUCKET_PASSWORD); + bucket.upsert(JsonDocument.create(joeCollegeId, jsonJoeCollege)); + bucket.upsert(JsonDocument.create(judyJetsonId, jsonJudyJetson)); + bucket.close(); + cluster.disconnect(); + } + + @Test + public void whenCreatingStudent_thenDocumentIsPersisted() { + String firstName = "Eric"; + String lastName = "Stratton"; + DateTime dateOfBirth = DateTime.now().minusYears(25); + String id = "student:" + firstName + ":" + lastName; + Student expectedStudent = new Student(id, firstName, lastName, dateOfBirth); + studentService.create(expectedStudent); + Student actualStudent = studentService.findOne(id); + assertNotNull(actualStudent.getCreated()); + assertNotNull(actualStudent); + assertEquals(expectedStudent.getId(), actualStudent.getId()); + } + + @Test(expected=ConstraintViolationException.class) + public void whenCreatingStudentWithInvalidFirstName_thenConstraintViolationException() { + String firstName = "Er+ic"; + String lastName = "Stratton"; + DateTime dateOfBirth = DateTime.now().minusYears(25); + String id = "student:" + firstName + ":" + lastName; + Student student = new Student(id, firstName, lastName, dateOfBirth); + studentService.create(student); + } + + @Test(expected=ConstraintViolationException.class) + public void whenCreatingStudentWithFutureDob_thenConstraintViolationException() { + String firstName = "Jane"; + String lastName = "Doe"; + DateTime dateOfBirth = DateTime.now().plusDays(1); + String id = "student:" + firstName + ":" + lastName; + Student student = new Student(id, firstName, lastName, dateOfBirth); + studentService.create(student); + } + + @Test + public void whenFindingStudentByJohnSmithId_thenReturnsJohnSmith() { + Student actualStudent = studentService.findOne(joeCollegeId); + assertNotNull(actualStudent); + assertNotNull(actualStudent.getCreated()); + assertEquals(joeCollegeId, actualStudent.getId()); + } + + @Test + public void whenFindingAllStudents_thenReturnsTwoOrMoreStudentsIncludingJoeCollegeAndJudyJetson() { + List resultList = studentService.findAll(); + assertNotNull(resultList); + assertFalse(resultList.isEmpty()); + assertTrue(resultContains(resultList, joeCollege)); + assertTrue(resultContains(resultList, judyJetson)); + assertTrue(resultList.size() >= 2); + } + + @Test + public void whenFindingByFirstNameJohn_thenReturnsOnlyStudentsNamedJohn() { + String expectedFirstName = joe; + List resultList = studentService.findByFirstName(expectedFirstName); + assertNotNull(resultList); + assertFalse(resultList.isEmpty()); + assertTrue(allResultsContainExpectedFirstName(resultList, expectedFirstName)); + } + + @Test + public void whenFindingByLastNameSmith_thenReturnsOnlyStudentsNamedSmith() { + String expectedLastName = college; + List resultList = studentService.findByLastName(expectedLastName); + assertNotNull(resultList); + assertFalse(resultList.isEmpty()); + assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); + } + + private boolean resultContains(List resultList, Student student) { + boolean found = false; + for(Student p : resultList) { + if(p.getId().equals(student.getId())) { + found = true; + break; + } + } + return found; + } + + private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { + boolean found = false; + for(Student p : resultList) { + if(p.getFirstName().equals(firstName)) { + found = true; + break; + } + } + return found; + } + + private boolean allResultsContainExpectedLastName(List resultList, String lastName) { + boolean found = false; + for(Student p : resultList) { + if(p.getLastName().equals(lastName)) { + found = true; + break; + } + } + return found; + } +} diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceTest.java new file mode 100644 index 0000000000..dd5be8e059 --- /dev/null +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/StudentTemplateServiceTest.java @@ -0,0 +1,13 @@ +package org.baeldung.spring.data.couchbase.service; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +public class StudentTemplateServiceTest extends StudentServiceTest { + + @Autowired + @Qualifier("StudentTemplateService") + public void setStudentService(StudentService service) { + this.studentService = service; + } +} From c574b94ea34092088373bd96d1ce42a8582b751a Mon Sep 17 00:00:00 2001 From: amedviediev Date: Fri, 15 Apr 2016 23:47:32 +0300 Subject: [PATCH 002/283] - Added code for JUnit 5 article --- junit5/pom.xml | 83 +++++++++++++++++++ .../java/com/baeldung/AssumptionTest.java | 31 +++++++ .../test/java/com/baeldung/ExceptionTest.java | 15 ++++ .../src/test/java/com/baeldung/FirstTest.java | 27 ++++++ .../test/java/com/baeldung/NestedTest.java | 77 +++++++++++++++++ 5 files changed, 233 insertions(+) create mode 100644 junit5/pom.xml create mode 100644 junit5/src/test/java/com/baeldung/AssumptionTest.java create mode 100644 junit5/src/test/java/com/baeldung/ExceptionTest.java create mode 100644 junit5/src/test/java/com/baeldung/FirstTest.java create mode 100644 junit5/src/test/java/com/baeldung/NestedTest.java diff --git a/junit5/pom.xml b/junit5/pom.xml new file mode 100644 index 0000000000..5a2ea61668 --- /dev/null +++ b/junit5/pom.xml @@ -0,0 +1,83 @@ + + + 4.0.0 + + com.baeldung + junit5 + 1.0-SNAPSHOT + + junit5 + Intro to JUnit 5 + + + UTF-8 + 1.8 + + 5.0.0-SNAPSHOT + + + + + snapshots-repo + https://oss.sonatype.org/content/repositories/snapshots + + false + + + + always + true + + + + + + + snapshots-repo + https://oss.sonatype.org/content/repositories/snapshots + + false + + + + always + true + + + + + + + + maven-compiler-plugin + 3.1 + + ${java.version} + ${java.version} + + + + maven-surefire-plugin + 2.19 + + + org.junit + surefire-junit5 + ${junit.gen5.version} + + + + + + + + + org.junit + junit5-api + ${junit.gen5.version} + test + + + \ No newline at end of file diff --git a/junit5/src/test/java/com/baeldung/AssumptionTest.java b/junit5/src/test/java/com/baeldung/AssumptionTest.java new file mode 100644 index 0000000000..6e6e56fe0a --- /dev/null +++ b/junit5/src/test/java/com/baeldung/AssumptionTest.java @@ -0,0 +1,31 @@ +package com.baeldung; + +import org.junit.gen5.api.Test; + +import static org.junit.gen5.api.Assumptions.assumeFalse; +import static org.junit.gen5.api.Assumptions.assumeTrue; +import static org.junit.gen5.api.Assumptions.assumingThat; + +public class AssumptionTest { + + @Test + void trueAssumption() { + assumeTrue(5 > 1); + System.out.println("Was true"); + } + + @Test + void falseAssumption() { + assumeFalse(5 < 1); + System.out.println("Was false"); + } + + @Test + void assumptionThat() { + String someString = "Just a string"; + assumingThat( + someString.equals("Just a string"), + () -> System.out.println("Assumption was correct") + ); + } +} diff --git a/junit5/src/test/java/com/baeldung/ExceptionTest.java b/junit5/src/test/java/com/baeldung/ExceptionTest.java new file mode 100644 index 0000000000..a9a5b8301d --- /dev/null +++ b/junit5/src/test/java/com/baeldung/ExceptionTest.java @@ -0,0 +1,15 @@ +package com.baeldung; + +import org.junit.gen5.api.Test; + +import static org.junit.gen5.api.Assertions.assertEquals; +import static org.junit.gen5.api.Assertions.expectThrows; + +public class ExceptionTest { + + @Test + void shouldThrowException() { + Throwable exception = expectThrows(NullPointerException.class, null); + assertEquals(exception.getClass(), NullPointerException.class); + } +} diff --git a/junit5/src/test/java/com/baeldung/FirstTest.java b/junit5/src/test/java/com/baeldung/FirstTest.java new file mode 100644 index 0000000000..c0dc6f345c --- /dev/null +++ b/junit5/src/test/java/com/baeldung/FirstTest.java @@ -0,0 +1,27 @@ +package com.baeldung; + +import org.junit.gen5.api.Test; + +import static org.junit.gen5.api.Assertions.assertAll; +import static org.junit.gen5.api.Assertions.assertEquals; +import static org.junit.gen5.api.Assertions.assertTrue; + +class FirstTest { + + @Test + void lambdaExpressions() { + String string = ""; + assertTrue(() -> string.isEmpty(), "String should be empty"); + } + + @Test + void groupAssertions() { + int[] numbers = {0,1,2,3,4}; + assertAll("numbers", () -> { + assertEquals(numbers[0], 1); + assertEquals(numbers[3], 3); + assertEquals(numbers[4], 1); + }); + } + +} diff --git a/junit5/src/test/java/com/baeldung/NestedTest.java b/junit5/src/test/java/com/baeldung/NestedTest.java new file mode 100644 index 0000000000..3fbe4f8644 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/NestedTest.java @@ -0,0 +1,77 @@ +package com.baeldung; + +import org.junit.gen5.api.*; + +import java.util.EmptyStackException; +import java.util.Stack; + +public class NestedTest { + Stack stack; + boolean isRun = false; + + @Test + @DisplayName("is instantiated with new Stack()") + void isInstantiatedWithNew() { + new Stack(); + } + + @Nested + @DisplayName("when new") + class WhenNew { + + @BeforeEach + void init() { + stack = new Stack(); + } + + @Test + @DisplayName("is empty") + void isEmpty() { + Assertions.assertTrue(stack.isEmpty()); + } + + @Test + @DisplayName("throws EmptyStackException when popped") + void throwsExceptionWhenPopped() { + Assertions.expectThrows(EmptyStackException.class, () -> stack.pop()); + } + + @Test + @DisplayName("throws EmptyStackException when peeked") + void throwsExceptionWhenPeeked() { + Assertions.expectThrows(EmptyStackException.class, () -> stack.peek()); + } + + @Nested + @DisplayName("after pushing an element") + class AfterPushing { + + String anElement = "an element"; + + @BeforeEach + void init() { + stack.push(anElement); + } + + @Test + @DisplayName("it is no longer empty") + void isEmpty() { + Assertions.assertFalse(stack.isEmpty()); + } + + @Test + @DisplayName("returns the element when popped and is empty") + void returnElementWhenPopped() { + Assertions.assertEquals(anElement, stack.pop()); + Assertions.assertTrue(stack.isEmpty()); + } + + @Test + @DisplayName("returns the element when peeked but remains not empty") + void returnElementWhenPeeked() { + Assertions.assertEquals(anElement, stack.peek()); + Assertions.assertFalse(stack.isEmpty()); + } + } + } +} From c3abba5f2abe5dbdfa08ce5f6cbbb1546458ccf9 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Wed, 27 Apr 2016 08:33:56 +0300 Subject: [PATCH 003/283] scopes examples --- .../scopes/HelloMessageGenerator.java | 15 ++++++ .../main/java/org/baeldung/scopes/Person.java | 37 +++++++++++++ .../org/baeldung/scopes/ScopesController.java | 46 ++++++++++++++++ .../baeldung/spring/config/ScopesConfig.java | 39 ++++++++++++++ spring-all/src/main/resources/scopes.xml | 10 ++++ .../webapp/WEB-INF/view/scopesExample.jsp | 10 ++++ .../WEB-INF/view/scopesFirstRequest.jsp | 11 ++++ .../WEB-INF/view/scopesSecondRequest.jsp | 10 ++++ .../java/org/baeldung/scopes/ScopesTest.java | 52 +++++++++++++++++++ 9 files changed, 230 insertions(+) create mode 100644 spring-all/src/main/java/org/baeldung/scopes/HelloMessageGenerator.java create mode 100644 spring-all/src/main/java/org/baeldung/scopes/Person.java create mode 100644 spring-all/src/main/java/org/baeldung/scopes/ScopesController.java create mode 100644 spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java create mode 100644 spring-all/src/main/resources/scopes.xml create mode 100644 spring-all/src/main/webapp/WEB-INF/view/scopesExample.jsp create mode 100644 spring-all/src/main/webapp/WEB-INF/view/scopesFirstRequest.jsp create mode 100644 spring-all/src/main/webapp/WEB-INF/view/scopesSecondRequest.jsp create mode 100644 spring-all/src/test/java/org/baeldung/scopes/ScopesTest.java diff --git a/spring-all/src/main/java/org/baeldung/scopes/HelloMessageGenerator.java b/spring-all/src/main/java/org/baeldung/scopes/HelloMessageGenerator.java new file mode 100644 index 0000000000..ae1c6157db --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/scopes/HelloMessageGenerator.java @@ -0,0 +1,15 @@ +package org.baeldung.scopes; + +public class HelloMessageGenerator { + + private String message; + + public String getMessage() { + return message; + } + + public void setMessage(final String message) { + this.message = message; + } + +} diff --git a/spring-all/src/main/java/org/baeldung/scopes/Person.java b/spring-all/src/main/java/org/baeldung/scopes/Person.java new file mode 100644 index 0000000000..993921abff --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/scopes/Person.java @@ -0,0 +1,37 @@ +package org.baeldung.scopes; + +public class Person { + private String name; + private int age; + + public Person() { + } + + public Person(final String name, final int age) { + super(); + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public int getAge() { + return age; + } + + public void setAge(final int age) { + this.age = age; + } + + @Override + public String toString() { + return "Person [name=" + name + ", age=" + age + "]"; + } + +} diff --git a/spring-all/src/main/java/org/baeldung/scopes/ScopesController.java b/spring-all/src/main/java/org/baeldung/scopes/ScopesController.java new file mode 100644 index 0000000000..5f29d0333f --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/scopes/ScopesController.java @@ -0,0 +1,46 @@ +package org.baeldung.scopes; + +import javax.annotation.Resource; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class ScopesController { + + @Resource(name = "requestMessage") + HelloMessageGenerator firstRequestMessage; + + @Resource(name = "requestMessage") + HelloMessageGenerator secondRequestMessage; + + @Resource(name = "sessionMessage") + HelloMessageGenerator firstSessionMessage; + + @Resource(name = "sessionMessage") + HelloMessageGenerator secondSessionMessage; + + @RequestMapping("/scopes") + public String getScopes() { + return "scopesExample"; + } + + @RequestMapping("/scopes/firstRequest") + public String getFirstRequest(final Model model) { + firstRequestMessage.setMessage("Good morning!"); + firstSessionMessage.setMessage("Good afternoon!"); + model.addAttribute("requestMessage", firstRequestMessage.getMessage()); + model.addAttribute("sessionMessage", firstSessionMessage.getMessage()); + return "scopesFirstRequest"; + } + + @RequestMapping("/scopes/secondRequest") + public String getSecondRequest(final Model model) { + secondRequestMessage.setMessage("Good evening!"); + model.addAttribute("requestMessage", secondRequestMessage.getMessage()); + model.addAttribute("sessionMessage", secondSessionMessage.getMessage()); + return "scopesSecondRequest"; + } + +} diff --git a/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java b/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java new file mode 100644 index 0000000000..48820636dd --- /dev/null +++ b/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java @@ -0,0 +1,39 @@ +package org.baeldung.spring.config; + +import org.baeldung.scopes.HelloMessageGenerator; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Scope; +import org.springframework.context.annotation.ScopedProxyMode; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.view.JstlView; +import org.springframework.web.servlet.view.UrlBasedViewResolver; + +@Configuration +@ComponentScan("org.baeldung.scopes") +@EnableWebMvc +public class ScopesConfig { + @Bean + public UrlBasedViewResolver setupViewResolver() { + final UrlBasedViewResolver resolver = new UrlBasedViewResolver(); + resolver.setPrefix("/WEB-INF/view/"); + resolver.setSuffix(".jsp"); + resolver.setViewClass(JstlView.class); + return resolver; + } + + @Bean + @Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.TARGET_CLASS) + public HelloMessageGenerator requestMessage() { + return new HelloMessageGenerator(); + } + + @Bean + @Scope(value = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS) + public HelloMessageGenerator sessionMessage() { + return new HelloMessageGenerator(); + } + +} diff --git a/spring-all/src/main/resources/scopes.xml b/spring-all/src/main/resources/scopes.xml new file mode 100644 index 0000000000..faecd727fa --- /dev/null +++ b/spring-all/src/main/resources/scopes.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/spring-all/src/main/webapp/WEB-INF/view/scopesExample.jsp b/spring-all/src/main/webapp/WEB-INF/view/scopesExample.jsp new file mode 100644 index 0000000000..624ff46d5c --- /dev/null +++ b/spring-all/src/main/webapp/WEB-INF/view/scopesExample.jsp @@ -0,0 +1,10 @@ + + + + +

Bean Scopes Examples

+
+ First Request

+ Second Request + + \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/view/scopesFirstRequest.jsp b/spring-all/src/main/webapp/WEB-INF/view/scopesFirstRequest.jsp new file mode 100644 index 0000000000..3804dfd1c6 --- /dev/null +++ b/spring-all/src/main/webapp/WEB-INF/view/scopesFirstRequest.jsp @@ -0,0 +1,11 @@ + + + + +

Bean Scopes First Request

+ + Request bean message: ${requestMessage } + Session bean message: ${sessionMessage } + + + \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/view/scopesSecondRequest.jsp b/spring-all/src/main/webapp/WEB-INF/view/scopesSecondRequest.jsp new file mode 100644 index 0000000000..8e9d727661 --- /dev/null +++ b/spring-all/src/main/webapp/WEB-INF/view/scopesSecondRequest.jsp @@ -0,0 +1,10 @@ + + + + +

Bean Scopes Second Request

+ + Request bean message: ${requestMessage } + Session bean message: ${sessionMessage } + + \ No newline at end of file diff --git a/spring-all/src/test/java/org/baeldung/scopes/ScopesTest.java b/spring-all/src/test/java/org/baeldung/scopes/ScopesTest.java new file mode 100644 index 0000000000..f86fda66ba --- /dev/null +++ b/spring-all/src/test/java/org/baeldung/scopes/ScopesTest.java @@ -0,0 +1,52 @@ +package org.baeldung.scopes; + +import org.junit.Assert; +import org.junit.Test; +import org.springframework.context.ApplicationContext; +import org.springframework.context.support.AbstractApplicationContext; +import org.springframework.context.support.ClassPathXmlApplicationContext; + +public class ScopesTest { + + private static final String NAME = "John Smith"; + private static final int AGE = 30; + + private static final String NAME_OTHER = "Anna Jones"; + private static final int AGE_OTHER = 40; + + @Test + public void testScopeSingleton() { + final ApplicationContext applicationContext = new ClassPathXmlApplicationContext("scopes.xml"); + + final Person personSingletonA = (Person) applicationContext.getBean("personSingleton"); + final Person personSingletonB = (Person) applicationContext.getBean("personSingleton"); + + personSingletonA.setName(NAME); + personSingletonB.setAge(AGE); + + Assert.assertEquals(NAME, personSingletonB.getName()); + Assert.assertEquals(AGE, personSingletonB.getAge()); + + ((AbstractApplicationContext) applicationContext).close(); + } + + @Test + public void testScopePrototype() { + final ApplicationContext applicationContext = new ClassPathXmlApplicationContext("scopes.xml"); + + final Person personPrototypeA = (Person) applicationContext.getBean("personPrototype"); + final Person personPrototypeB = (Person) applicationContext.getBean("personPrototype"); + + personPrototypeA.setName(NAME); + personPrototypeA.setAge(AGE); + + personPrototypeB.setName(NAME_OTHER); + personPrototypeB.setAge(AGE_OTHER); + + Assert.assertEquals(NAME, personPrototypeA.getName()); + Assert.assertEquals(NAME_OTHER, personPrototypeB.getName()); + + ((AbstractApplicationContext) applicationContext).close(); + } + +} From a875e25b18f85c80571c27e145fd2816400f04cc Mon Sep 17 00:00:00 2001 From: amedviediev Date: Mon, 2 May 2016 13:00:21 +0300 Subject: [PATCH 004/283] - Added code for JUnit 5 article --- .../test/java/com/baeldung/AssumptionTest.java | 7 ++++--- .../test/java/com/baeldung/ExceptionTest.java | 5 ++++- junit5/src/test/java/com/baeldung/FirstTest.java | 8 +++++++- .../src/test/java/com/baeldung/TaggedTest.java | 16 ++++++++++++++++ 4 files changed, 31 insertions(+), 5 deletions(-) create mode 100644 junit5/src/test/java/com/baeldung/TaggedTest.java diff --git a/junit5/src/test/java/com/baeldung/AssumptionTest.java b/junit5/src/test/java/com/baeldung/AssumptionTest.java index 6e6e56fe0a..634ec9b21e 100644 --- a/junit5/src/test/java/com/baeldung/AssumptionTest.java +++ b/junit5/src/test/java/com/baeldung/AssumptionTest.java @@ -2,6 +2,7 @@ package com.baeldung; import org.junit.gen5.api.Test; +import static org.junit.gen5.api.Assertions.assertEquals; import static org.junit.gen5.api.Assumptions.assumeFalse; import static org.junit.gen5.api.Assumptions.assumeTrue; import static org.junit.gen5.api.Assumptions.assumingThat; @@ -11,13 +12,13 @@ public class AssumptionTest { @Test void trueAssumption() { assumeTrue(5 > 1); - System.out.println("Was true"); + assertEquals(5 + 2, 7); } @Test void falseAssumption() { assumeFalse(5 < 1); - System.out.println("Was false"); + assertEquals(5 + 2, 7); } @Test @@ -25,7 +26,7 @@ public class AssumptionTest { String someString = "Just a string"; assumingThat( someString.equals("Just a string"), - () -> System.out.println("Assumption was correct") + () -> assertEquals(2 + 2, 4) ); } } diff --git a/junit5/src/test/java/com/baeldung/ExceptionTest.java b/junit5/src/test/java/com/baeldung/ExceptionTest.java index a9a5b8301d..26c44e8b10 100644 --- a/junit5/src/test/java/com/baeldung/ExceptionTest.java +++ b/junit5/src/test/java/com/baeldung/ExceptionTest.java @@ -2,6 +2,8 @@ package com.baeldung; import org.junit.gen5.api.Test; +import java.util.ArrayList; + import static org.junit.gen5.api.Assertions.assertEquals; import static org.junit.gen5.api.Assertions.expectThrows; @@ -9,7 +11,8 @@ public class ExceptionTest { @Test void shouldThrowException() { - Throwable exception = expectThrows(NullPointerException.class, null); + ArrayList list = null; + Throwable exception = expectThrows(NullPointerException.class, list::clear); assertEquals(exception.getClass(), NullPointerException.class); } } diff --git a/junit5/src/test/java/com/baeldung/FirstTest.java b/junit5/src/test/java/com/baeldung/FirstTest.java index c0dc6f345c..d7c6c0368f 100644 --- a/junit5/src/test/java/com/baeldung/FirstTest.java +++ b/junit5/src/test/java/com/baeldung/FirstTest.java @@ -1,5 +1,6 @@ package com.baeldung; +import org.junit.gen5.api.Disabled; import org.junit.gen5.api.Test; import static org.junit.gen5.api.Assertions.assertAll; @@ -11,7 +12,7 @@ class FirstTest { @Test void lambdaExpressions() { String string = ""; - assertTrue(() -> string.isEmpty(), "String should be empty"); + assertTrue(string::isEmpty, "String should be empty"); } @Test @@ -24,4 +25,9 @@ class FirstTest { }); } + @Test + @Disabled + void disabledTest() { + assertTrue(false); + } } diff --git a/junit5/src/test/java/com/baeldung/TaggedTest.java b/junit5/src/test/java/com/baeldung/TaggedTest.java new file mode 100644 index 0000000000..5107c04037 --- /dev/null +++ b/junit5/src/test/java/com/baeldung/TaggedTest.java @@ -0,0 +1,16 @@ +package com.baeldung; + +import org.junit.gen5.api.Tag; +import org.junit.gen5.api.Test; + +import static org.junit.gen5.api.Assertions.assertEquals; + +@Tag("Test case") +public class TaggedTest { + + @Test + @Tag("Method") + void testMethod() { + assertEquals(2+2, 4); + } +} From b0b3a20749525083669e6219c7a5534a4576898b Mon Sep 17 00:00:00 2001 From: Sameera Nelson Date: Wed, 4 May 2016 22:55:34 +0530 Subject: [PATCH 005/283] Adding neo4j project skeleton --- spring-data-neo4j/README.md | 15 ++++ spring-data-neo4j/pom.xml | 69 ++++++++++++++++++ .../src/main/resources/logback.xml | 20 +++++ spring-data-neo4j/src/main/resources/test.png | Bin 0 -> 855 bytes 4 files changed, 104 insertions(+) create mode 100644 spring-data-neo4j/README.md create mode 100644 spring-data-neo4j/pom.xml create mode 100644 spring-data-neo4j/src/main/resources/logback.xml create mode 100644 spring-data-neo4j/src/main/resources/test.png diff --git a/spring-data-neo4j/README.md b/spring-data-neo4j/README.md new file mode 100644 index 0000000000..89eae99f05 --- /dev/null +++ b/spring-data-neo4j/README.md @@ -0,0 +1,15 @@ +## Spring Data Redis + +### Relevant Articles: +- [Introduction to Spring Data Redis](http://www.baeldung.com/spring-data-redis-tutorial) + +### Build the Project with Tests Running +``` +mvn clean install +``` + +### Run Tests Directly +``` +mvn test +``` + diff --git a/spring-data-neo4j/pom.xml b/spring-data-neo4j/pom.xml new file mode 100644 index 0000000000..5d04e0c3b4 --- /dev/null +++ b/spring-data-neo4j/pom.xml @@ -0,0 +1,69 @@ + + + 4.0.0 + com.baeldung + spring-data-neo4j + 1.0 + jar + + + UTF-8 + 4.2.5.RELEASE + 4.1.1.RELEASE + 0.8.0 + + + + + org.springframework.data + spring-data-neo4j + ${spring-data-neo4j} + + + + cglib + cglib-nodep + 2.2 + + + + log4j + log4j + 1.2.16 + + + + org.springframework + spring-core + ${spring.version} + + + + org.springframework + spring-context + ${spring.version} + + + + junit + junit + 4.12 + test + + + + org.springframework + spring-test + ${spring.version} + test + + + + com.lordofthejars + nosqlunit-redis + ${nosqlunit.version} + + + + diff --git a/spring-data-neo4j/src/main/resources/logback.xml b/spring-data-neo4j/src/main/resources/logback.xml new file mode 100644 index 0000000000..215eeede64 --- /dev/null +++ b/spring-data-neo4j/src/main/resources/logback.xml @@ -0,0 +1,20 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-neo4j/src/main/resources/test.png b/spring-data-neo4j/src/main/resources/test.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b5e8027635ff4f0a0b10c0a9a6aa7a014e6086 GIT binary patch literal 855 zcmex=6kE^cmKJ|O{KK0!WiZUHd? zL17V5QBfX#aS1UI2_X?t5k_Vf7B*H^PBu0!em)*P5fKr7L0%pn0bT(feo-D?UVdI4 zpg0dNAHM*Q$HT+J$HNcg@q#%Zh5rvQ2y!sUFvu`73NkPWGBOJ?{y)MX0rV0OKpYGv zIoQ})S%5M+0t`%y%uFn-%&bsZMkb)c1=$oC*g1rh3>^~-jRG5mMVuBM1ge%|WME=O zF^8Fjk%^U!0Vt;gv=3+$3p2tNMkYaKCBqLwfr*X6ijMzpG4L=04G?4&WUyx___R78 z`bEZ3n*%y$c1p?=OzsY{vOIcDRID^@mH5k5n_VmCLN*tlQtc~BqmaI3acZm^A1dHBrChNRU-KfIG`3a9F1Z+JCT zaBkFRt*1+W!zihZ}s%F&cxn?h~EIRD%9;ni-#KyOjOZ3l7 z_6Ks(XSKVYPbdvPm!tpIJj%Ot(S2`WC0AaXj1Ds{Yc~e@JYj`ND^=I^G)#%-Q1qX7 z;Q8}@p=SNS>z3K2PrXivv`$ Date: Thu, 5 May 2016 20:19:48 +0300 Subject: [PATCH 006/283] revised bean scopes examples --- .../src/main/java/org/baeldung/scopes/Person.java | 12 +----------- .../org/baeldung/spring/config/ScopesConfig.java | 6 ++++++ .../test/java/org/baeldung/scopes/ScopesTest.java | 9 --------- 3 files changed, 7 insertions(+), 20 deletions(-) diff --git a/spring-all/src/main/java/org/baeldung/scopes/Person.java b/spring-all/src/main/java/org/baeldung/scopes/Person.java index 993921abff..e6139c31dd 100644 --- a/spring-all/src/main/java/org/baeldung/scopes/Person.java +++ b/spring-all/src/main/java/org/baeldung/scopes/Person.java @@ -8,9 +8,7 @@ public class Person { } public Person(final String name, final int age) { - super(); this.name = name; - this.age = age; } public String getName() { @@ -21,17 +19,9 @@ public class Person { this.name = name; } - public int getAge() { - return age; - } - - public void setAge(final int age) { - this.age = age; - } - @Override public String toString() { - return "Person [name=" + name + ", age=" + age + "]"; + return "Person [name=" + name + "]"; } } diff --git a/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java b/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java index 48820636dd..1de7b32720 100644 --- a/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java +++ b/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java @@ -36,4 +36,10 @@ public class ScopesConfig { return new HelloMessageGenerator(); } + @Bean + @Scope(value = WebApplicationContext.SCOPE_GLOBAL_SESSION, proxyMode = ScopedProxyMode.TARGET_CLASS) + public HelloMessageGenerator globalSessionMessage() { + return new HelloMessageGenerator(); + } + } diff --git a/spring-all/src/test/java/org/baeldung/scopes/ScopesTest.java b/spring-all/src/test/java/org/baeldung/scopes/ScopesTest.java index f86fda66ba..b1dd248c26 100644 --- a/spring-all/src/test/java/org/baeldung/scopes/ScopesTest.java +++ b/spring-all/src/test/java/org/baeldung/scopes/ScopesTest.java @@ -9,10 +9,7 @@ import org.springframework.context.support.ClassPathXmlApplicationContext; public class ScopesTest { private static final String NAME = "John Smith"; - private static final int AGE = 30; - private static final String NAME_OTHER = "Anna Jones"; - private static final int AGE_OTHER = 40; @Test public void testScopeSingleton() { @@ -22,10 +19,7 @@ public class ScopesTest { final Person personSingletonB = (Person) applicationContext.getBean("personSingleton"); personSingletonA.setName(NAME); - personSingletonB.setAge(AGE); - Assert.assertEquals(NAME, personSingletonB.getName()); - Assert.assertEquals(AGE, personSingletonB.getAge()); ((AbstractApplicationContext) applicationContext).close(); } @@ -38,10 +32,7 @@ public class ScopesTest { final Person personPrototypeB = (Person) applicationContext.getBean("personPrototype"); personPrototypeA.setName(NAME); - personPrototypeA.setAge(AGE); - personPrototypeB.setName(NAME_OTHER); - personPrototypeB.setAge(AGE_OTHER); Assert.assertEquals(NAME, personPrototypeA.getName()); Assert.assertEquals(NAME_OTHER, personPrototypeB.getName()); From 7d3840538090c0746ab9e9bfaf0ea55544bdac5f Mon Sep 17 00:00:00 2001 From: Sameera Nelson Date: Mon, 9 May 2016 00:29:00 +0530 Subject: [PATCH 007/283] Adding example project --- .../spring/data/neo4j/BookServiceTest.java | 40 ++++++++++++ .../config/LibraryNeo4jConfiguration.java | 32 ++++++++++ .../spring/data/neo4j/model/Book.java | 54 ++++++++++++++++ .../data/neo4j/repostory/BookRepository.java | 22 +++++++ .../data/neo4j/service/BookService.java | 62 +++++++++++++++++++ 5 files changed, 210 insertions(+) create mode 100644 spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/BookServiceTest.java create mode 100644 spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/LibraryNeo4jConfiguration.java create mode 100644 spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Book.java create mode 100644 spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java create mode 100644 spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/BookServiceTest.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/BookServiceTest.java new file mode 100644 index 0000000000..100465838e --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/BookServiceTest.java @@ -0,0 +1,40 @@ +package com.baeldung.spring.data.neo4j; + +import com.baeldung.spring.data.neo4j.config.LibraryNeo4jConfiguration; +import com.baeldung.spring.data.neo4j.model.Book; +import com.baeldung.spring.data.neo4j.model.Person; +import com.baeldung.spring.data.neo4j.service.BookService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import static org.junit.Assert.assertEquals; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = LibraryNeo4jConfiguration.class) +public class BookServiceTest { + + private static final Log LOGGER = LogFactory.getLog(BookServiceTest.class); + + @Autowired + private BookService bookService; + + @Test + public void testSaveBook() { + final Person author1 = new Person(); + author1.setName("Mark Twain"); + author1.setBorn(1835); + final Book book = new Book(); + book.setTitle("The Adventures of Tom Sawyer"); + book.setReleased(1876); + book.setPerson(author1); + + bookService.save(book); + final Book savedBook = bookService.findBookById(book.getId()); + assertEquals(book.getTitle(), savedBook.getTitle()); + } +} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/LibraryNeo4jConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/LibraryNeo4jConfiguration.java new file mode 100644 index 0000000000..c497c944d1 --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/LibraryNeo4jConfiguration.java @@ -0,0 +1,32 @@ +package com.baeldung.spring.data.neo4j.config; + + +import org.neo4j.ogm.session.SessionFactory; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.data.neo4j.config.Neo4jConfiguration; +import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; +import org.springframework.data.neo4j.server.Neo4jServer; +import org.springframework.data.neo4j.server.RemoteServer; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +@Configuration +@ComponentScan("com.baeldung.spring.data.neo4j") +@EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") +public class LibraryNeo4jConfiguration extends Neo4jConfiguration { + + public static final String URL = System.getenv("NEO4J_URL") != null ? System.getenv("NEO4J_URL") : "http://localhost:7474"; + + @Override + public Neo4jServer neo4jServer() { + return new RemoteServer(URL,"neo4j","password"); + } + + @Override + public SessionFactory getSessionFactory() { + return new SessionFactory("com.baeldung.spring.data.neo4j.model"); + } +} \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Book.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Book.java new file mode 100644 index 0000000000..2c643a4b7c --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Book.java @@ -0,0 +1,54 @@ +package com.baeldung.spring.data.neo4j.model; + +import org.neo4j.graphdb.Direction; +import org.neo4j.ogm.annotation.*; + +import java.util.Collection; +import java.util.List; +import java.util.concurrent.atomic.AtomicLong; + +@NodeEntity +public class Book { + + private static final AtomicLong TS = new AtomicLong(); + + @GraphId + private Long id; + private String title; + private int released; + + @Relationship(type="AUTHORED_BY", direction = Relationship.INCOMING) + private Person person; + + public Book() { + this.id = TS.getAndIncrement(); + } + + public Long getId() { + return id; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getReleased() { + return released; + } + + public void setReleased(int released) { + this.released = released; + } + + public Person getPerson() { + return person; + } + + public void setPerson(Person person) { + this.person = person; + } +} \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java new file mode 100644 index 0000000000..5c980b0381 --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java @@ -0,0 +1,22 @@ +package com.baeldung.spring.data.neo4j.repostory; + +import com.baeldung.spring.data.neo4j.model.Book; +import org.springframework.data.neo4j.annotation.Query; +import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + +@Repository +public interface BookRepository extends GraphRepository { + Book findByTitle(@Param("title") String title); + + @Query("MATCH (m:Book) WHERE m.title =~ ('(?i).*'+{title}+'.*') RETURN m") + Collection findByTitleContaining(@Param("title") String title); + + @Query("MATCH (m:Book)<-[:ACTED_IN]-(a:Person) RETURN m.title as Book, collect(a.name) as cast LIMIT {limit}") + List> graph(@Param("limit") int limit); +} \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java new file mode 100644 index 0000000000..52323f689b --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java @@ -0,0 +1,62 @@ +package com.baeldung.spring.data.neo4j.service; + + +import com.baeldung.spring.data.neo4j.model.Book; +import com.baeldung.spring.data.neo4j.repostory.BookRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +public class BookService { + + @Autowired + private BookRepository bookRepository; + + private Map toD3Format(final Iterator> result) { + List> nodes = new ArrayList>(); + List> rels= new ArrayList>(); + int i=0; + while (result.hasNext()) { + Map row = result.next(); + nodes.add(map("title",row.get("book"),"label","book")); + int target=i; + i++; + for (Object name : (Collection) row.get("cast")) { + Map actor = map("title", name,"label","actor"); + int source = nodes.indexOf(actor); + if (source == -1) { + nodes.add(actor); + source = i++; + } + rels.add(map("source",source,"target",target)); + } + } + return map("nodes", nodes, "links", rels); + } + + private Map map(final String key1, final Object value1, final String key2, final Object value2) { + Map result = new HashMap(2); + result.put(key1,value1); + result.put(key2,value2); + return result; + } + + public Map graph(final int limit) { + Iterator> result = bookRepository.graph(limit).iterator(); + return toD3Format(result); + } + + public Book save(final Book book){ + return bookRepository.save(book); + } + + public Book findBookById(final Long id){ + return bookRepository.findOne(id); + } + + public void deleteAllInGraph(){ + bookRepository.deleteAll(); + } +} \ No newline at end of file From 87496539c705356922c0f102a8de31cdcf0492f0 Mon Sep 17 00:00:00 2001 From: Sameera Nelson Date: Mon, 9 May 2016 00:31:00 +0530 Subject: [PATCH 008/283] Adding example project --- .../java/com/baeldung/spring/data/neo4j/BookServiceTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spring-data-neo4j/src/{main => test}/java/com/baeldung/spring/data/neo4j/BookServiceTest.java (100%) diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/BookServiceTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java similarity index 100% rename from spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/BookServiceTest.java rename to spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java From 78bfd55b9b95f5b1008c9484f58655924787c4a6 Mon Sep 17 00:00:00 2001 From: Sameera Nelson Date: Mon, 9 May 2016 00:33:59 +0530 Subject: [PATCH 009/283] Adding example project --- spring-data-neo4j/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spring-data-neo4j/README.md b/spring-data-neo4j/README.md index 89eae99f05..e62c69f8b9 100644 --- a/spring-data-neo4j/README.md +++ b/spring-data-neo4j/README.md @@ -1,7 +1,7 @@ -## Spring Data Redis +## Spring Data Neo4j ### Relevant Articles: -- [Introduction to Spring Data Redis](http://www.baeldung.com/spring-data-redis-tutorial) +- [Introduction to Spring Data Neo4j](http://www.baeldung.com/spring-data-neo4j-tutorial) ### Build the Project with Tests Running ``` From a317e91d375e9d09aebef69a0c6afad95a3f46ea Mon Sep 17 00:00:00 2001 From: Sameera Nelson Date: Mon, 9 May 2016 00:34:59 +0530 Subject: [PATCH 010/283] Adding example project --- spring-data-neo4j/pom.xml | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/spring-data-neo4j/pom.xml b/spring-data-neo4j/pom.xml index 5d04e0c3b4..72e17250db 100644 --- a/spring-data-neo4j/pom.xml +++ b/spring-data-neo4j/pom.xml @@ -10,7 +10,7 @@ UTF-8 4.2.5.RELEASE - 4.1.1.RELEASE + 4.0.0.RELEASE 0.8.0 @@ -18,19 +18,7 @@ org.springframework.data spring-data-neo4j - ${spring-data-neo4j} - - - - cglib - cglib-nodep - 2.2 - - - - log4j - log4j - 1.2.16 + ${spring-data-neo4j.version} @@ -45,24 +33,29 @@ ${spring.version} + + com.voodoodyne.jackson.jsog + jackson-jsog + 1.1 + compile + + + + log4j + log4j + 1.2.16 + + junit junit 4.12 - test org.springframework spring-test ${spring.version} - test - - - - com.lordofthejars - nosqlunit-redis - ${nosqlunit.version} From f7176e6255e9cf3b72479e1b48d142bcf8e237f5 Mon Sep 17 00:00:00 2001 From: amedviediev Date: Wed, 11 May 2016 00:00:29 +0300 Subject: [PATCH 011/283] - Added code for JUnit 5 article --- .../src/test/java/com/baeldung/ExceptionTest.java | 6 +++--- junit5/src/test/java/com/baeldung/FirstTest.java | 13 ++++++++++--- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/junit5/src/test/java/com/baeldung/ExceptionTest.java b/junit5/src/test/java/com/baeldung/ExceptionTest.java index 26c44e8b10..25b7f0a1cc 100644 --- a/junit5/src/test/java/com/baeldung/ExceptionTest.java +++ b/junit5/src/test/java/com/baeldung/ExceptionTest.java @@ -11,8 +11,8 @@ public class ExceptionTest { @Test void shouldThrowException() { - ArrayList list = null; - Throwable exception = expectThrows(NullPointerException.class, list::clear); - assertEquals(exception.getClass(), NullPointerException.class); + Throwable exception = expectThrows(UnsupportedOperationException.class, + () -> {throw new UnsupportedOperationException("Not supported");}); + assertEquals(exception.getMessage(), "Not supported"); } } diff --git a/junit5/src/test/java/com/baeldung/FirstTest.java b/junit5/src/test/java/com/baeldung/FirstTest.java index d7c6c0368f..aa7bcfdcd0 100644 --- a/junit5/src/test/java/com/baeldung/FirstTest.java +++ b/junit5/src/test/java/com/baeldung/FirstTest.java @@ -3,6 +3,10 @@ package com.baeldung; import org.junit.gen5.api.Disabled; import org.junit.gen5.api.Test; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import static org.junit.gen5.api.Assertions.assertAll; import static org.junit.gen5.api.Assertions.assertEquals; import static org.junit.gen5.api.Assertions.assertTrue; @@ -11,13 +15,16 @@ class FirstTest { @Test void lambdaExpressions() { - String string = ""; - assertTrue(string::isEmpty, "String should be empty"); + List numbers = Arrays.asList(1, 2, 3); + assertTrue(numbers + .stream() + .mapToInt(i -> i) + .sum() > 5, "Sum should be greater than 5"); } @Test void groupAssertions() { - int[] numbers = {0,1,2,3,4}; + int[] numbers = {0, 1, 2, 3, 4}; assertAll("numbers", () -> { assertEquals(numbers[0], 1); assertEquals(numbers[3], 3); From dda24d5d037b3d479059d4b812219ef074bc04fd Mon Sep 17 00:00:00 2001 From: SHYAM RAMATH Date: Thu, 12 May 2016 00:40:29 -0500 Subject: [PATCH 012/283] Re-clone Spring-rest-docs --- spring-rest-docs/pom.xml | 54 ++++- .../src/docs/asciidocs/api-guide.adoc | 203 ++++++++++++++++++ .../main/java/com/example/CRUDController.java | 55 +++++ .../src/main/java/com/example/CrudInput.java | 42 ++++ .../java/com/example/IndexController.java | 19 +- .../java/com/example/MyRestController.java | 16 -- .../example/SpringRestDocsApplication.java | 6 +- .../java/com/example/ApiDocumentation.java | 190 ++++++++++++---- .../example/GettingStartedDocumentation.java | 148 +++++++++++++ 9 files changed, 660 insertions(+), 73 deletions(-) create mode 100644 spring-rest-docs/src/docs/asciidocs/api-guide.adoc create mode 100644 spring-rest-docs/src/main/java/com/example/CRUDController.java create mode 100644 spring-rest-docs/src/main/java/com/example/CrudInput.java delete mode 100644 spring-rest-docs/src/main/java/com/example/MyRestController.java create mode 100644 spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java diff --git a/spring-rest-docs/pom.xml b/spring-rest-docs/pom.xml index decdd3a5df..04ee11d0de 100644 --- a/spring-rest-docs/pom.xml +++ b/spring-rest-docs/pom.xml @@ -21,6 +21,7 @@ UTF-8 1.8 + ${project.build.directory}/generated-snippets @@ -44,16 +45,53 @@ 1.0.1.RELEASE test + + com.jayway.jsonpath + json-path + 2.0.0 + - - - - org.springframework.boot - spring-boot-maven-plugin - - - + + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*Documentation.java + + + + + org.asciidoctor + asciidoctor-maven-plugin + 1.5.2 + + + generate-docs + package + + process-asciidoc + + + html + book + + ${snippetsDirectory} + + src/docs/asciidocs + target/generated-docs + + + + + + diff --git a/spring-rest-docs/src/docs/asciidocs/api-guide.adoc b/spring-rest-docs/src/docs/asciidocs/api-guide.adoc new file mode 100644 index 0000000000..9fbe74c072 --- /dev/null +++ b/spring-rest-docs/src/docs/asciidocs/api-guide.adoc @@ -0,0 +1,203 @@ += RESTful Notes API Guide +Baeldung; +:doctype: book +:icons: font +:source-highlighter: highlightjs +:toc: left +:toclevels: 4 +:sectlinks: + +[[overview]] += Overview + +[[overview-http-verbs]] +== HTTP verbs + +RESTful notes tries to adhere as closely as possible to standard HTTP and REST conventions in its +use of HTTP verbs. + +|=== +| Verb | Usage + +| `GET` +| Used to retrieve a resource + +| `POST` +| Used to create a new resource + +| `PATCH` +| Used to update an existing resource, including partial updates + +| `DELETE` +| Used to delete an existing resource +|=== + +RESTful notes tries to adhere as closely as possible to standard HTTP and REST conventions in its +use of HTTP status codes. + +|=== +| Status code | Usage + +| `200 OK` +| The request completed successfully + +| `201 Created` +| A new resource has been created successfully. The resource's URI is available from the response's +`Location` header + +| `204 No Content` +| An update to an existing resource has been applied successfully + +| `400 Bad Request` +| The request was malformed. The response body will include an error providing further information + +| `404 Not Found` +| The requested resource did not exist +|=== + +[[overview-headers]] +== Headers + +Every response has the following header(s): + +include::{snippets}/headers-example/response-headers.adoc[] + +[[overview-hypermedia]] +== Hypermedia + +RESTful Notes uses hypermedia and resources include links to other resources in their +responses. Responses are in http://stateless.co/hal_specification.html[Hypertext Application +from resource to resource. +Language (HAL)] format. Links can be found beneath the `_links` key. Users of the API should +not create URIs themselves, instead they should use the above-described links to navigate + +[[resources]] += Resources + + + +[[resources-index]] +== Index + +The index provides the entry point into the service. + +[[resources-index-access]] +=== Accessing the index + +A `GET` request is used to access the index + +==== Response structure + +include::{snippets}/index-example/http-response.adoc[] + +==== Example response + +include::{snippets}/index-example/http-response.adoc[] + +==== Example request + +include::{snippets}/index-example/http-request.adoc[] + +==== CURL request + +include::{snippets}/index-example/curl-request.adoc[] + +[[resources-index-links]] +==== Links + +include::{snippets}/index-example/links.adoc[] + + +[[resources-CRUD]] +== CRUD REST Service + +The CRUD provides the entry point into the service. + +[[resources-crud-access]] +=== Accessing the crud GET + +A `GET` request is used to access the CRUD read + +==== Response structure + +include::{snippets}/crud-get-example/http-request.adoc[] + +==== Example response + +include::{snippets}/crud-get-example/http-response.adoc[] + +==== CURL request + +include::{snippets}/crud-get-example/curl-request.adoc[] + +[[resources-crud-access]] +=== Accessing the crud POST + +A `POST` request is used to access the CRUD create + +==== Response structure + +include::{snippets}/crud-create-example/http-request.adoc[] + +==== Example response + +include::{snippets}/crud-create-example/http-response.adoc[] + +==== CURL request + +include::{snippets}/crud-create-example/curl-request.adoc[] + +[[resources-crud-access]] +=== Accessing the crud DELETE + +A `DELETE` request is used to access the CRUD create + +==== Response structure + +include::{snippets}/crud-delete-example/http-request.adoc[] + +==== Example response + +include::{snippets}/crud-delete-example/http-response.adoc[] + +==== CURL request + +include::{snippets}/crud-delete-example/curl-request.adoc[] + +[[resources-crud-access]] +=== Accessing the crud PATCH + +A `PATCH` request is used to access the CRUD create + +==== Response structure + +include::{snippets}/crud-patch-example/http-request.adoc[] + +==== Example response + +include::{snippets}/crud-patch-example/http-response.adoc[] + +==== CURL request + +include::{snippets}/crud-patch-example/curl-request.adoc[] + +[[resources-crud-access]] +=== Accessing the crud PUT + +A `PUT` request is used to access the CRUD create + +==== Response structure + +include::{snippets}/crud-put-example/http-request.adoc[] + +==== Example response + +include::{snippets}/crud-put-example/http-response.adoc[] + +==== CURL request + +include::{snippets}/crud-put-example/curl-request.adoc[] + + + + diff --git a/spring-rest-docs/src/main/java/com/example/CRUDController.java b/spring-rest-docs/src/main/java/com/example/CRUDController.java new file mode 100644 index 0000000000..818b29d3a6 --- /dev/null +++ b/spring-rest-docs/src/main/java/com/example/CRUDController.java @@ -0,0 +1,55 @@ +package com.example; + +import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/crud") +public class CRUDController { + + @RequestMapping(method=RequestMethod.GET) + @ResponseStatus(HttpStatus.OK) + public List read(@RequestBody CrudInput crudInput) { + List returnList=new ArrayList(); + returnList.add(crudInput); + return returnList; + } + + @ResponseStatus(HttpStatus.CREATED) + @RequestMapping(method=RequestMethod.POST) + public HttpHeaders save(@RequestBody CrudInput crudInput) { + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setLocation(linkTo(CRUDController.class).slash(crudInput.getTitle()).toUri()); + return httpHeaders; + } + + @RequestMapping(value = "/{id}", method = RequestMethod.DELETE) + @ResponseStatus(HttpStatus.OK) + HttpHeaders delete(@RequestBody CrudInput crudInput) { + HttpHeaders httpHeaders = new HttpHeaders(); + return httpHeaders; + } + + @RequestMapping(value = "/{id}", method = RequestMethod.PUT) + @ResponseStatus(HttpStatus.ACCEPTED) + void put(@PathVariable("id") long id, @RequestBody CrudInput crudInput) { + + } + + @RequestMapping(value = "/{id}", method = RequestMethod.PATCH) + @ResponseStatus(HttpStatus.NO_CONTENT) + void patch(@PathVariable("id") long id, @RequestBody CrudInput crudInput) { + + } +} diff --git a/spring-rest-docs/src/main/java/com/example/CrudInput.java b/spring-rest-docs/src/main/java/com/example/CrudInput.java new file mode 100644 index 0000000000..3d91b7d45a --- /dev/null +++ b/spring-rest-docs/src/main/java/com/example/CrudInput.java @@ -0,0 +1,42 @@ +package com.example; + +import java.net.URI; +import java.util.Collections; +import java.util.List; + +import org.hibernate.validator.constraints.NotBlank; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + +public class CrudInput { + + //@NotBlank + private final String title; + + private final String body; + + private final List tagUris; + + @JsonCreator + public CrudInput(@JsonProperty("title") String title, + @JsonProperty("body") String body, @JsonProperty("tags") List tagUris) { + this.title = title; + this.body = body; + this.tagUris = tagUris == null ? Collections.emptyList() : tagUris; + } + + public String getTitle() { + return title; + } + + public String getBody() { + return body; + } + + @JsonProperty("tags") + public List getTagUris() { + return this.tagUris; + } + +} \ No newline at end of file diff --git a/spring-rest-docs/src/main/java/com/example/IndexController.java b/spring-rest-docs/src/main/java/com/example/IndexController.java index 92d987f05d..a6b4537c43 100644 --- a/spring-rest-docs/src/main/java/com/example/IndexController.java +++ b/spring-rest-docs/src/main/java/com/example/IndexController.java @@ -1,23 +1,22 @@ package com.example; +import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; + import org.springframework.hateoas.ResourceSupport; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import static org.springframework.hateoas.mvc.ControllerLinkBuilder.linkTo; - @RestController -@RequestMapping("/api") +@RequestMapping("/") public class IndexController { - @RequestMapping(method = RequestMethod.GET) - public ResourceSupport index() { - ResourceSupport index = new ResourceSupport(); - index.add(linkTo(MyRestController.class).withRel("notes")); - index.add(linkTo(MyRestController.class).withRel("tags")); - return index; - } + @RequestMapping(method=RequestMethod.GET) + public ResourceSupport index() { + ResourceSupport index = new ResourceSupport(); + index.add(linkTo(CRUDController.class).withRel("crud")); + return index; + } } \ No newline at end of file diff --git a/spring-rest-docs/src/main/java/com/example/MyRestController.java b/spring-rest-docs/src/main/java/com/example/MyRestController.java deleted file mode 100644 index 896b82abfb..0000000000 --- a/spring-rest-docs/src/main/java/com/example/MyRestController.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.example; - -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; - -@RestController -@RequestMapping("/rest/api") -public class MyRestController { - - @RequestMapping(method = RequestMethod.GET) - public String index() { - return "Hello"; - } - -} diff --git a/spring-rest-docs/src/main/java/com/example/SpringRestDocsApplication.java b/spring-rest-docs/src/main/java/com/example/SpringRestDocsApplication.java index da09f9accc..dd20ef324e 100644 --- a/spring-rest-docs/src/main/java/com/example/SpringRestDocsApplication.java +++ b/spring-rest-docs/src/main/java/com/example/SpringRestDocsApplication.java @@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringRestDocsApplication { - public static void main(String[] args) { - SpringApplication.run(SpringRestDocsApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(SpringRestDocsApplication.class, args); + } } diff --git a/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java b/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java index 5490e90ff5..96ecbe158a 100644 --- a/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java +++ b/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java @@ -1,66 +1,184 @@ package com.example; +import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; +import static org.springframework.restdocs.headers.HeaderDocumentation.responseHeaders; +import static org.springframework.restdocs.hypermedia.HypermediaDocumentation.linkWithRel; +import static org.springframework.restdocs.hypermedia.HypermediaDocumentation.links; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.put; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; +import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; +import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.restdocs.snippet.Attributes.key; +import static org.springframework.restdocs.payload.PayloadDocumentation.requestFields; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.hateoas.MediaTypes; import org.springframework.restdocs.RestDocumentation; +import org.springframework.restdocs.constraints.ConstraintDescriptions; import org.springframework.restdocs.mockmvc.RestDocumentationResultHandler; +import org.springframework.restdocs.payload.FieldDescriptor; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.util.StringUtils; import org.springframework.web.context.WebApplicationContext; -import static org.springframework.restdocs.hypermedia.HypermediaDocumentation.linkWithRel; -import static org.springframework.restdocs.hypermedia.HypermediaDocumentation.links; -import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; -import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.*; -import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; -import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import com.fasterxml.jackson.databind.ObjectMapper; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SpringRestDocsApplication.class) @WebAppConfiguration public class ApiDocumentation { - @Rule - public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); + @Rule + public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); + + @Autowired + private WebApplicationContext context; + + @Autowired + private ObjectMapper objectMapper; + + private RestDocumentationResultHandler document; + + private MockMvc mockMvc; + + @Before + public void setUp() { + this.document = document("{method-name}",preprocessRequest(prettyPrint()),preprocessResponse(prettyPrint())); + this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).apply(documentationConfiguration(this.restDocumentation)).alwaysDo(this.document).build(); + } + - @Autowired - private WebApplicationContext context; + @Test + public void headersExample() throws Exception { + this.document.snippets(responseHeaders(headerWithName("Content-Type").description("The Content-Type of the payload, e.g. `application/hal+json`"))); + this.mockMvc.perform(get("/")).andExpect(status().isOk()); + } + + @Test + public void indexExample() throws Exception { + this.document.snippets(links(linkWithRel("crud").description("The <>")),responseFields(fieldWithPath("_links").description("<> to other resources"))); + this.mockMvc.perform(get("/")).andExpect(status().isOk()); + } + + + @Test + public void crudGetExample() throws Exception { + + Map tag = new HashMap(); + tag.put("name", "GET"); - private RestDocumentationResultHandler document; + String tagLocation =this.mockMvc.perform(get("/crud").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isOk()).andReturn().getResponse().getHeader("Location"); - private MockMvc mockMvc; + Map crud = new HashMap(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", Arrays.asList(tagLocation)); + + this.mockMvc.perform(get("/crud").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isOk()); + } + + @Test + public void crudCreateExample() throws Exception { + Map tag = new HashMap(); + tag.put("name", "CREATE"); - @Before - public void setUp() { - this.document = document("{method-name}", preprocessRequest(prettyPrint()), preprocessResponse(prettyPrint())); + String tagLocation =this.mockMvc.perform(post("/crud").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isCreated()).andReturn().getResponse().getHeader("Location"); - this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) - .apply(documentationConfiguration(this.restDocumentation)) - .alwaysDo(this.document).build(); - } + Map crud = new HashMap(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", Arrays.asList(tagLocation)); - @Test - public void indexExample() throws Exception { - this.document.snippets( - links( - linkWithRel("notes").description("The <>"), - linkWithRel("tags").description("The <>") - ), - responseFields(fieldWithPath("_links").description("<> to other resources"))); + ConstrainedFields fields = new ConstrainedFields(CrudInput.class); + this.document.snippets(requestFields(fields.withPath("title").description("The title of the note"),fields.withPath("body").description("The body of the note"),fields.withPath("tags").description("An array of tag resource URIs"))); + this.mockMvc.perform(post("/crud").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isCreated()); + + + } + + @Test + public void crudDeleteExample() throws Exception { + + Map tag = new HashMap(); + tag.put("name", "DELETE"); + + String tagLocation =this.mockMvc.perform(delete("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isOk()).andReturn().getResponse().getHeader("Location"); + Map crud = new HashMap(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", Arrays.asList(tagLocation)); + + this.mockMvc.perform(delete("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isOk()); + } + + @Test + public void crudPatchExample() throws Exception { + + Map tag = new HashMap(); + tag.put("name", "PATCH"); + + String tagLocation =this.mockMvc.perform(patch("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isNoContent()).andReturn().getResponse().getHeader("Location"); + Map crud = new HashMap(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", Arrays.asList(tagLocation)); + + this.mockMvc.perform(patch("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isNoContent()); + } + + + @Test + public void crudPutExample() throws Exception { + Map tag = new HashMap(); + tag.put("name", "PUT"); + + String tagLocation =this.mockMvc.perform(put("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isAccepted()).andReturn().getResponse().getHeader("Location"); + Map crud = new HashMap(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", Arrays.asList(tagLocation)); + + this.mockMvc.perform(put("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isAccepted()); + } + + + @Test + public void contextLoads() { + } + + private static class ConstrainedFields { - this.mockMvc.perform(get("/api")).andExpect(status().isOk()); - } + private final ConstraintDescriptions constraintDescriptions; - @Test - public void contextLoads() { - } -} \ No newline at end of file + ConstrainedFields(Class input) { + this.constraintDescriptions = new ConstraintDescriptions(input); + } + + private FieldDescriptor withPath(String path) { + return fieldWithPath(path).attributes(key("constraints").value(StringUtils.collectionToDelimitedString(this.constraintDescriptions.descriptionsForProperty(path), ". "))); + } + } + + +} diff --git a/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java b/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java new file mode 100644 index 0000000000..e9fb105438 --- /dev/null +++ b/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java @@ -0,0 +1,148 @@ +package com.example; + +import static org.hamcrest.Matchers.hasSize; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.hateoas.MediaTypes; +import org.springframework.restdocs.RestDocumentation; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jayway.jsonpath.JsonPath; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = SpringRestDocsApplication.class) +@WebAppConfiguration +public class GettingStartedDocumentation { + + @Rule + public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); + + @Autowired + private ObjectMapper objectMapper; + + @Autowired + private WebApplicationContext context; + + private MockMvc mockMvc; + + + @Before + public void setUp() { + this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) + .apply(documentationConfiguration(this.restDocumentation)).alwaysDo(document("{method-name}/{step}/", + preprocessRequest(prettyPrint()),preprocessResponse(prettyPrint()))).build(); + } + + @Test + public void index() throws Exception { + this.mockMvc.perform(get("/").accept(MediaTypes.HAL_JSON)).andExpect(status().isOk()).andExpect(jsonPath("_links.crud", is(notNullValue()))).andExpect(jsonPath("_links.crud", is(notNullValue()))); + } + + + //@Test + public void creatingANote() throws JsonProcessingException, Exception { + String noteLocation = createNote(); + MvcResult note = getNote(noteLocation); + String tagLocation = createTag(); + getTag(tagLocation); + String taggedNoteLocation = createTaggedNote(tagLocation); + MvcResult taggedNote = getNote(taggedNoteLocation); + getTags(getLink(taggedNote, "note-tags")); + tagExistingNote(noteLocation, tagLocation); + getTags(getLink(note, "note-tags")); + } + + String createNote() throws Exception { + Map note = new HashMap(); + note.put("title", "Note creation with cURL"); + note.put("body", "An example of how to create a note using cURL"); + String noteLocation = this.mockMvc.perform(post("/crud").contentType(MediaTypes.HAL_JSON).content(objectMapper.writeValueAsString(note))).andExpect(status().isCreated()).andExpect(header().string("Location", notNullValue())).andReturn().getResponse().getHeader("Location"); + return noteLocation; + } + + MvcResult getNote(String noteLocation) throws Exception { + return this.mockMvc.perform(get(noteLocation)).andExpect(status().isOk()).andExpect(jsonPath("title", is(notNullValue()))).andExpect(jsonPath("body", is(notNullValue()))).andExpect(jsonPath("_links.crud", is(notNullValue()))).andReturn(); + } + + + String createTag() throws Exception, JsonProcessingException { + Map tag = new HashMap(); + tag.put("name", "getting-started"); + String tagLocation = this.mockMvc.perform(post("/crud").contentType(MediaTypes.HAL_JSON).content(objectMapper.writeValueAsString(tag))).andExpect(status().isCreated()).andExpect(header().string("Location", notNullValue())).andReturn().getResponse().getHeader("Location"); + return tagLocation; + } + + void getTag(String tagLocation) throws Exception { + this.mockMvc.perform(get(tagLocation)).andExpect(status().isOk()) + .andExpect(jsonPath("name", is(notNullValue()))) + .andExpect(jsonPath("_links.tagged-notes", is(notNullValue()))); + } + + String createTaggedNote(String tag) throws Exception { + Map note = new HashMap(); + note.put("title", "Tagged note creation with cURL"); + note.put("body", "An example of how to create a tagged note using cURL"); + note.put("tags", Arrays.asList(tag)); + + String noteLocation = this.mockMvc.perform(post("/notes").contentType(MediaTypes.HAL_JSON).content(objectMapper.writeValueAsString(note))) + .andExpect(status().isCreated()).andExpect(header().string("Location", notNullValue())).andReturn().getResponse().getHeader("Location"); + return noteLocation; + } + + void getTags(String noteTagsLocation) throws Exception { + this.mockMvc.perform(get(noteTagsLocation)) + .andExpect(status().isOk()) + .andExpect(jsonPath("_embedded.tags", hasSize(1))); + } + + void tagExistingNote(String noteLocation, String tagLocation) throws Exception { + Map update = new HashMap(); + update.put("tags", Arrays.asList(tagLocation)); + this.mockMvc.perform(patch(noteLocation).contentType(MediaTypes.HAL_JSON).content(objectMapper.writeValueAsString(update))).andExpect(status().isNoContent()); + } + + MvcResult getTaggedExistingNote(String noteLocation) throws Exception { + return this.mockMvc.perform(get(noteLocation)).andExpect(status().isOk()).andReturn(); + } + + void getTagsForExistingNote(String noteTagsLocation) throws Exception { + this.mockMvc.perform(get(noteTagsLocation)) + .andExpect(status().isOk()).andExpect(jsonPath("_embedded.tags", hasSize(1))); + } + + private String getLink(MvcResult result, String rel) + throws UnsupportedEncodingException { + return JsonPath.parse(result.getResponse().getContentAsString()).read("_links." + rel + ".href"); + } + +} From 6f95540287139c5754f6d4f5c02065dc3e8f1937 Mon Sep 17 00:00:00 2001 From: Sameera Nelson Date: Fri, 13 May 2016 18:57:52 +0530 Subject: [PATCH 013/283] Adding Book service interface --- .../data/neo4j/service/BookService.java | 64 +++---------------- .../data/neo4j/service/BookServiceImpl.java | 62 ++++++++++++++++++ .../spring/data/neo4j/BookServiceTest.java | 5 +- 3 files changed, 74 insertions(+), 57 deletions(-) create mode 100644 spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java index 52323f689b..f8983dfd16 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java @@ -1,62 +1,18 @@ package com.baeldung.spring.data.neo4j.service; - import com.baeldung.spring.data.neo4j.model.Book; -import com.baeldung.spring.data.neo4j.repostory.BookRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import java.util.*; +import java.util.Map; -@Service -public class BookService { +/** + * Created by SDN on 5/13/2016. + */ +public interface BookService { + Map graph(int limit); - @Autowired - private BookRepository bookRepository; + Book save(Book book); - private Map toD3Format(final Iterator> result) { - List> nodes = new ArrayList>(); - List> rels= new ArrayList>(); - int i=0; - while (result.hasNext()) { - Map row = result.next(); - nodes.add(map("title",row.get("book"),"label","book")); - int target=i; - i++; - for (Object name : (Collection) row.get("cast")) { - Map actor = map("title", name,"label","actor"); - int source = nodes.indexOf(actor); - if (source == -1) { - nodes.add(actor); - source = i++; - } - rels.add(map("source",source,"target",target)); - } - } - return map("nodes", nodes, "links", rels); - } + Book findBookById(Long id); - private Map map(final String key1, final Object value1, final String key2, final Object value2) { - Map result = new HashMap(2); - result.put(key1,value1); - result.put(key2,value2); - return result; - } - - public Map graph(final int limit) { - Iterator> result = bookRepository.graph(limit).iterator(); - return toD3Format(result); - } - - public Book save(final Book book){ - return bookRepository.save(book); - } - - public Book findBookById(final Long id){ - return bookRepository.findOne(id); - } - - public void deleteAllInGraph(){ - bookRepository.deleteAll(); - } -} \ No newline at end of file + void deleteAllInGraph(); +} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java new file mode 100644 index 0000000000..cd50f8b740 --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java @@ -0,0 +1,62 @@ +package com.baeldung.spring.data.neo4j.service; + + +import com.baeldung.spring.data.neo4j.model.Book; +import com.baeldung.spring.data.neo4j.repostory.BookRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; + +@Service +public class BookServiceImpl implements BookService { + + @Autowired + private BookRepository bookRepository; + + private Map toD3Format(final Iterator> result) { + List> nodes = new ArrayList>(); + List> rels= new ArrayList>(); + int i=0; + while (result.hasNext()) { + Map row = result.next(); + nodes.add(map("title",row.get("book"),"label","book")); + int target=i; + i++; + for (Object name : (Collection) row.get("cast")) { + Map actor = map("title", name,"label","actor"); + int source = nodes.indexOf(actor); + if (source == -1) { + nodes.add(actor); + source = i++; + } + rels.add(map("source",source,"target",target)); + } + } + return map("nodes", nodes, "links", rels); + } + + private Map map(final String key1, final Object value1, final String key2, final Object value2) { + Map result = new HashMap(2); + result.put(key1,value1); + result.put(key2,value2); + return result; + } + + public Map graph(final int limit) { + Iterator> result = bookRepository.graph(limit).iterator(); + return toD3Format(result); + } + + public Book save(final Book book){ + return bookRepository.save(book); + } + + public Book findBookById(final Long id){ + return bookRepository.findOne(id); + } + + public void deleteAllInGraph(){ + bookRepository.deleteAll(); + } +} \ No newline at end of file diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java index 100465838e..9a791f87da 100644 --- a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java +++ b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java @@ -21,7 +21,7 @@ public class BookServiceTest { private static final Log LOGGER = LogFactory.getLog(BookServiceTest.class); @Autowired - private BookService bookService; + private BookService bookServiceImpl; @Test public void testSaveBook() { @@ -33,8 +33,7 @@ public class BookServiceTest { book.setReleased(1876); book.setPerson(author1); - bookService.save(book); - final Book savedBook = bookService.findBookById(book.getId()); + final Book savedBook = bookServiceImpl.save(book); assertEquals(book.getTitle(), savedBook.getTitle()); } } From 6e6b4612f8dd914484118cde4fad6f12c879fbc4 Mon Sep 17 00:00:00 2001 From: Sameera Nelson Date: Fri, 13 May 2016 19:58:19 +0530 Subject: [PATCH 014/283] Adding test cases --- .../spring/data/neo4j/model/Person.java | 52 +++++++++++++++++++ .../data/neo4j/repostory/BookRepository.java | 6 --- .../data/neo4j/service/BookService.java | 8 +-- .../data/neo4j/service/BookServiceImpl.java | 44 ++++------------ .../spring/data/neo4j/BookServiceTest.java | 50 ++++++++++++++++-- 5 files changed, 111 insertions(+), 49 deletions(-) create mode 100644 spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Person.java diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Person.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Person.java new file mode 100644 index 0000000000..53444c8f6c --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Person.java @@ -0,0 +1,52 @@ +package com.baeldung.spring.data.neo4j.model; + +import org.neo4j.ogm.annotation.*; + +import java.util.List; +import java.util.concurrent.atomic.AtomicLong; + +@NodeEntity +public class Person { + + private static final AtomicLong TS = new AtomicLong(); + + @GraphId + private Long id; + private String name; + private int born; + + @Relationship(type = "AUTHORED_BY") + private List books; + + public Person() { + this.id = TS.incrementAndGet(); + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getBorn() { + return born; + } + + public void setBorn(int born) { + this.born = born; + } + + public List getBooks() { + return books; + } + + public void setBooks(List books) { + this.books = books; + } +} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java index 5c980b0381..c76d2862fc 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java @@ -12,11 +12,5 @@ import java.util.Map; @Repository public interface BookRepository extends GraphRepository { - Book findByTitle(@Param("title") String title); - @Query("MATCH (m:Book) WHERE m.title =~ ('(?i).*'+{title}+'.*') RETURN m") - Collection findByTitleContaining(@Param("title") String title); - - @Query("MATCH (m:Book)<-[:ACTED_IN]-(a:Person) RETURN m.title as Book, collect(a.name) as cast LIMIT {limit}") - List> graph(@Param("limit") int limit); } \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java index f8983dfd16..daa988c92d 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java @@ -4,14 +4,14 @@ import com.baeldung.spring.data.neo4j.model.Book; import java.util.Map; -/** - * Created by SDN on 5/13/2016. - */ public interface BookService { - Map graph(int limit); Book save(Book book); + void delete(long bookId); + + long bookCount(); + Book findBookById(Long id); void deleteAllInGraph(); diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java index cd50f8b740..0c07e4acd9 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java @@ -14,49 +14,25 @@ public class BookServiceImpl implements BookService { @Autowired private BookRepository bookRepository; - private Map toD3Format(final Iterator> result) { - List> nodes = new ArrayList>(); - List> rels= new ArrayList>(); - int i=0; - while (result.hasNext()) { - Map row = result.next(); - nodes.add(map("title",row.get("book"),"label","book")); - int target=i; - i++; - for (Object name : (Collection) row.get("cast")) { - Map actor = map("title", name,"label","actor"); - int source = nodes.indexOf(actor); - if (source == -1) { - nodes.add(actor); - source = i++; - } - rels.add(map("source",source,"target",target)); - } - } - return map("nodes", nodes, "links", rels); - } - - private Map map(final String key1, final Object value1, final String key2, final Object value2) { - Map result = new HashMap(2); - result.put(key1,value1); - result.put(key2,value2); - return result; - } - - public Map graph(final int limit) { - Iterator> result = bookRepository.graph(limit).iterator(); - return toD3Format(result); - } - public Book save(final Book book){ return bookRepository.save(book); } + public long bookCount(){ + return bookRepository.count(); + } + public Book findBookById(final Long id){ return bookRepository.findOne(id); } + public void delete(final long bookId){ + bookRepository.delete(bookId); + } + public void deleteAllInGraph(){ bookRepository.deleteAll(); } + + } \ No newline at end of file diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java index 9a791f87da..17c75a1921 100644 --- a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java +++ b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java @@ -4,8 +4,6 @@ import com.baeldung.spring.data.neo4j.config.LibraryNeo4jConfiguration; import com.baeldung.spring.data.neo4j.model.Book; import com.baeldung.spring.data.neo4j.model.Person; import com.baeldung.spring.data.neo4j.service.BookService; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -13,18 +11,17 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = LibraryNeo4jConfiguration.class) public class BookServiceTest { - private static final Log LOGGER = LogFactory.getLog(BookServiceTest.class); - @Autowired private BookService bookServiceImpl; @Test - public void testSaveBook() { + public void testSavingBook() { final Person author1 = new Person(); author1.setName("Mark Twain"); author1.setBorn(1835); @@ -36,4 +33,47 @@ public class BookServiceTest { final Book savedBook = bookServiceImpl.save(book); assertEquals(book.getTitle(), savedBook.getTitle()); } + + @Test + public void testFindingTheSavedBook() { + final Person author1 = new Person(); + author1.setName("Edgar Allan Poe"); + author1.setBorn(1809); + final Book book = new Book(); + book.setTitle("The Cask of Amontillado"); + book.setReleased(1846); + book.setPerson(author1); + + bookServiceImpl.save(book); + final Book retrievedBook = bookServiceImpl.findBookById(book.getId()); + assertEquals(book.getTitle(), retrievedBook.getTitle()); + } + + @Test + public void testCountTheSavedBooks() { + long bookCount = bookServiceImpl.bookCount(); + assertEquals(bookCount, 2); + } + @Test + public void testDeletingASavedBook() { + final Person author1 = new Person(); + author1.setName("Rider Haggard"); + author1.setBorn(1856); + final Book book = new Book(); + book.setTitle("King Solomon's Mines"); + book.setReleased(1885); + book.setPerson(author1); + + final Book savedBook = bookServiceImpl.save(book); + bookServiceImpl.delete(savedBook.getId()); + final Book retrievedBook = bookServiceImpl.findBookById(book.getId()); + assertNull(retrievedBook); + } + + @Test + public void testDeleteAllSavedBook() { + bookServiceImpl.deleteAllInGraph(); + final long bookCount = bookServiceImpl.bookCount(); + assertEquals(bookCount, 0); + } } From 75d0eb499f36f2dfcdfb52a66fea3e86c434b8a5 Mon Sep 17 00:00:00 2001 From: sivabalachandran Date: Sun, 15 May 2016 17:47:30 -0400 Subject: [PATCH 015/283] basics of spring autowire - first cut --- spring-autowire/pom.xml | 63 +++++++++++++++++++ .../com/baeldung/autowire/sample/App.java | 11 ++++ .../baeldung/autowire/sample/AppConfig.java | 10 +++ .../com/baeldung/autowire/sample/Bar.java | 5 ++ .../autowire/sample/BarFormatter.java | 13 ++++ .../com/baeldung/autowire/sample/Foo.java | 5 ++ .../com/baeldung/autowire/sample/FooDAO.java | 5 ++ .../autowire/sample/FooFormatter.java | 13 ++++ .../baeldung/autowire/sample/FooService.java | 17 +++++ .../baeldung/autowire/sample/Formatter.java | 7 +++ .../autowire/sample/FormatterType.java | 17 +++++ .../autowire/sample/FooServiceTest.java | 22 +++++++ 12 files changed, 188 insertions(+) create mode 100644 spring-autowire/pom.xml create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/App.java create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/AppConfig.java create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/Bar.java create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/BarFormatter.java create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/Foo.java create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/FooDAO.java create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/FooFormatter.java create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/FooService.java create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/Formatter.java create mode 100644 spring-autowire/src/main/java/com/baeldung/autowire/sample/FormatterType.java create mode 100644 spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceTest.java diff --git a/spring-autowire/pom.xml b/spring-autowire/pom.xml new file mode 100644 index 0000000000..e28efdae61 --- /dev/null +++ b/spring-autowire/pom.xml @@ -0,0 +1,63 @@ + + 4.0.0 + + com.baeldung + spring-autowire + 0.0.1-SNAPSHOT + jar + + spring-autowire + http://maven.apache.org + + + UTF-8 + 4.2.5.RELEASE + 3.5.1 + 2.19.1 + + + + + junit + junit + 4.11 + + + org.springframework + spring-core + ${org.springframework.version} + + + org.springframework + spring-context + ${org.springframework.version} + + + org.springframework + spring-test + ${org.springframework.version} + test + + + + + spring-autowire + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/App.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/App.java new file mode 100644 index 0000000000..725a9b8406 --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/App.java @@ -0,0 +1,11 @@ +package com.baeldung.autowire.sample; + +import org.springframework.context.annotation.AnnotationConfigApplicationContext; + +public class App { + public static void main(String[] args) { + AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class); + FooService fooService = ctx.getBean(FooService.class); + fooService.doStuff(); + } +} diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/AppConfig.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/AppConfig.java new file mode 100644 index 0000000000..f948e2bf8e --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/AppConfig.java @@ -0,0 +1,10 @@ +package com.baeldung.autowire.sample; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan("com.baeldung.autowire.sample") +public class AppConfig { + +} diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/Bar.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/Bar.java new file mode 100644 index 0000000000..7aa820adef --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/Bar.java @@ -0,0 +1,5 @@ +package com.baeldung.autowire.sample; + +public class Bar { + +} diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/BarFormatter.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/BarFormatter.java new file mode 100644 index 0000000000..fb704453fc --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/BarFormatter.java @@ -0,0 +1,13 @@ +package com.baeldung.autowire.sample; + +import org.springframework.stereotype.Component; + +@FormatterType("Bar") +@Component +public class BarFormatter implements Formatter { + + public String format() { + return "bar"; + } + +} diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/Foo.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/Foo.java new file mode 100644 index 0000000000..b587ab38b8 --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/Foo.java @@ -0,0 +1,5 @@ +package com.baeldung.autowire.sample; + +public class Foo { + +} diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/FooDAO.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/FooDAO.java new file mode 100644 index 0000000000..aec26202ab --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/FooDAO.java @@ -0,0 +1,5 @@ +package com.baeldung.autowire.sample; + +public class FooDAO { + +} diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/FooFormatter.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/FooFormatter.java new file mode 100644 index 0000000000..73966e9e43 --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/FooFormatter.java @@ -0,0 +1,13 @@ +package com.baeldung.autowire.sample; + +import org.springframework.stereotype.Component; + +@FormatterType("Foo") +@Component +public class FooFormatter implements Formatter { + + public String format() { + return "foo"; + } + +} diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/FooService.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/FooService.java new file mode 100644 index 0000000000..eccea4351a --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/FooService.java @@ -0,0 +1,17 @@ +package com.baeldung.autowire.sample; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class FooService { + + @Autowired + @FormatterType("Foo") + private Formatter formatter; + + public String doStuff(){ + return formatter.format(); + } + +} diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/Formatter.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/Formatter.java new file mode 100644 index 0000000000..83716d6e92 --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/Formatter.java @@ -0,0 +1,7 @@ +package com.baeldung.autowire.sample; + +public interface Formatter { + + String format(); + +} diff --git a/spring-autowire/src/main/java/com/baeldung/autowire/sample/FormatterType.java b/spring-autowire/src/main/java/com/baeldung/autowire/sample/FormatterType.java new file mode 100644 index 0000000000..7ffc308c9a --- /dev/null +++ b/spring-autowire/src/main/java/com/baeldung/autowire/sample/FormatterType.java @@ -0,0 +1,17 @@ +package com.baeldung.autowire.sample; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import org.springframework.beans.factory.annotation.Qualifier; + +@Qualifier +@Target({ElementType.FIELD, ElementType.METHOD,ElementType.TYPE, ElementType.PARAMETER}) +@Retention(RetentionPolicy.RUNTIME) +public @interface FormatterType { + + String value(); + +} diff --git a/spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceTest.java b/spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceTest.java new file mode 100644 index 0000000000..4607f527d9 --- /dev/null +++ b/spring-autowire/src/test/java/com/baeldung/autowire/sample/FooServiceTest.java @@ -0,0 +1,22 @@ +package com.baeldung.autowire.sample; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.AnnotationConfigContextLoader; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes=AppConfig.class, loader=AnnotationConfigContextLoader.class) +public class FooServiceTest { + + @Autowired + FooService fooService; + + @Test + public void whenFooFormatterType_thenReturnFoo(){ + Assert.assertEquals("foo", fooService.doStuff()); + } +} From fbd2d577daa7a09bc4bf9489bae420e48ea998e0 Mon Sep 17 00:00:00 2001 From: Slavisa Avramovic Date: Tue, 17 May 2016 07:09:31 +0200 Subject: [PATCH 016/283] image-download - Fine grained exception handling --- .../java/com/baeldung/spring/controller/ImageController.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/ImageController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/ImageController.java index c9e846905a..75a1a91f82 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/ImageController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/ImageController.java @@ -12,6 +12,7 @@ import org.springframework.web.context.support.ServletContextResource; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletResponse; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; @@ -49,7 +50,9 @@ public class ImageController { byte[] media = IOUtils.toByteArray(in); headers.setCacheControl(CacheControl.noCache().getHeaderValue()); responseEntity = new ResponseEntity<>(media, headers, HttpStatus.OK); - } catch (IOException ioe) { + } catch (FileNotFoundException fnfe) { + responseEntity = new ResponseEntity<>(null, headers, HttpStatus.NOT_FOUND); + } catch (Exception e) { responseEntity = new ResponseEntity<>(null, headers, HttpStatus.INTERNAL_SERVER_ERROR); } return responseEntity; From b572a9066c3aac793acb4680ab9cbffab0bc9d94 Mon Sep 17 00:00:00 2001 From: Slavisa Avramovic Date: Tue, 17 May 2016 07:21:01 +0200 Subject: [PATCH 017/283] image-download - removing exception handling --- .../spring/controller/ImageController.java | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/ImageController.java b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/ImageController.java index 75a1a91f82..ef8d1214df 100644 --- a/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/ImageController.java +++ b/spring-mvc-xml/src/main/java/com/baeldung/spring/controller/ImageController.java @@ -42,19 +42,13 @@ public class ImageController { } @RequestMapping(value = "/image-response-entity", method = RequestMethod.GET) - public ResponseEntity getImageAsResponseEntity() { + public ResponseEntity getImageAsResponseEntity() throws IOException { ResponseEntity responseEntity; final HttpHeaders headers = new HttpHeaders(); - try { - final InputStream in = servletContext.getResourceAsStream("/WEB-INF/images/image-example.jpg"); - byte[] media = IOUtils.toByteArray(in); - headers.setCacheControl(CacheControl.noCache().getHeaderValue()); - responseEntity = new ResponseEntity<>(media, headers, HttpStatus.OK); - } catch (FileNotFoundException fnfe) { - responseEntity = new ResponseEntity<>(null, headers, HttpStatus.NOT_FOUND); - } catch (Exception e) { - responseEntity = new ResponseEntity<>(null, headers, HttpStatus.INTERNAL_SERVER_ERROR); - } + final InputStream in = servletContext.getResourceAsStream("/WEB-INF/images/image-example.jpg"); + byte[] media = IOUtils.toByteArray(in); + headers.setCacheControl(CacheControl.noCache().getHeaderValue()); + responseEntity = new ResponseEntity<>(media, headers, HttpStatus.OK); return responseEntity; } From 433bc637efe05d5556a5a520b30159e540c3913a Mon Sep 17 00:00:00 2001 From: alexVengrovsk Date: Mon, 16 May 2016 21:27:46 +0300 Subject: [PATCH 018/283] =?UTF-8?q?Code=20for=20the=20article=20"Java=208?= =?UTF-8?q?=E2=80=99s=20Features"=20alextrentton@gmail.com?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/baeldung/java_8_features/Address.java | 17 ++ .../java_8_features/CustomException.java | 7 + .../com/baeldung/java_8_features/Detail.java | 16 ++ .../java_8_features/OptionalAddress.java | 19 ++ .../java_8_features/OptionalUser.java | 19 ++ .../com/baeldung/java_8_features/User.java | 43 ++++ .../com/baeldung/java_8_features/Vehicle.java | 21 ++ .../baeldung/java_8_features/VehicleImpl.java | 12 + .../com/baeldung/java8/Java8Features.java | 220 ++++++++++++++++++ 9 files changed, 374 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/java_8_features/Address.java create mode 100644 core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java create mode 100644 core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java create mode 100644 core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java create mode 100644 core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java create mode 100644 core-java-8/src/main/java/com/baeldung/java_8_features/User.java create mode 100644 core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java create mode 100644 core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java create mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8Features.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/Address.java b/core-java-8/src/main/java/com/baeldung/java_8_features/Address.java new file mode 100644 index 0000000000..9cd0d902e3 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/Address.java @@ -0,0 +1,17 @@ +package com.baeldung.java_8_features; + +/** + * Created by Alex Vengr + */ +public class Address { + + private String street; + + public String getStreet() { + return street; + } + + public void setStreet(String street) { + this.street = street; + } +} diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java b/core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java new file mode 100644 index 0000000000..651398bfea --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java @@ -0,0 +1,7 @@ +package com.baeldung.java_8_features; + +/** + * Created by Alex Vengr + */ +public class CustomException extends RuntimeException { +} diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java b/core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java new file mode 100644 index 0000000000..8e8187e0a2 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java @@ -0,0 +1,16 @@ +package com.baeldung.java_8_features; + +import java.util.Arrays; +import java.util.List; + +/** + * Created by Alex Vengrov + */ +public class Detail { + + private static final List PARTS = Arrays.asList("turbine", "pump"); + + public List getParts() { + return PARTS; + } +} diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java b/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java new file mode 100644 index 0000000000..925dd5e97b --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java @@ -0,0 +1,19 @@ +package com.baeldung.java_8_features; + +import java.util.Optional; + +/** + * Created by Alex Vengrov + */ +public class OptionalAddress { + + private String street; + + public Optional getStreet() { + return Optional.ofNullable(street); + } + + public void setStreet(String street) { + this.street = street; + } +} diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java b/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java new file mode 100644 index 0000000000..a725a4a817 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java @@ -0,0 +1,19 @@ +package com.baeldung.java_8_features; + +import java.util.Optional; + +/** + * Created by Alex Vengrov + */ +public class OptionalUser { + + private OptionalAddress address; + + public Optional getAddress() { + return Optional.of(address); + } + + public void setAddress(OptionalAddress address) { + this.address = address; + } +} diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/User.java b/core-java-8/src/main/java/com/baeldung/java_8_features/User.java new file mode 100644 index 0000000000..5c496539f2 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/User.java @@ -0,0 +1,43 @@ +package com.baeldung.java_8_features; + +import java.util.Optional; + +/** + * Created by Alex Vengrov + */ +public class User { + + private String name; + + private Address address; + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + + public User() { + } + + public User(String name) { + this.name = name; + } + + public static boolean isRealUser(User user) { + return true; + } + + public String getOrThrow() { + String value = null; + Optional valueOpt = Optional.ofNullable(value); + String result = valueOpt.orElseThrow(CustomException::new).toUpperCase(); + return result; + } + + public boolean isLegalName(String name) { + return name.length() > 3 && name.length() < 16; + } +} diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java b/core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java new file mode 100644 index 0000000000..bf8ea0e09a --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java @@ -0,0 +1,21 @@ +package com.baeldung.java_8_features; + +/** + * Created by Alex Vengrov + */ +public interface Vehicle { + + void moveTo(long altitude, long longitude); + + static String producer() { + return "N&F Vehicles"; + } + + default long[] startPosition() { + return new long[]{23, 15}; + } + + default String getOverview() { + return "ATV made by " + producer(); + } +} diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java b/core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java new file mode 100644 index 0000000000..7d325e3292 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java @@ -0,0 +1,12 @@ +package com.baeldung.java_8_features; + +/** + * Created by 1 on 15.05.2016. + */ +public class VehicleImpl implements Vehicle { + + @Override + public void moveTo(long altitude, long longitude) { + //do nothing + } +} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8Features.java b/core-java-8/src/test/java/com/baeldung/java8/Java8Features.java new file mode 100644 index 0000000000..724b1770ea --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/java8/Java8Features.java @@ -0,0 +1,220 @@ +package com.baeldung.java8; + +import com.baeldung.java_8_features.*; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; + +/** + * Created by Alex Vengrov + */ +public class Java8Features { + + private List list; + + @Before + public void init() { + list = new ArrayList<>(); + list.add("One"); + list.add("OneAndOnly"); + list.add("Derek"); + list.add("Change"); + list.add("factory"); + list.add("justBefore"); + list.add("Italy"); + list.add("Italy"); + list.add("Thursday"); + list.add(""); + list.add(""); + } + + @Test + public void callMethods_whenExpectedResults_thenCorrect() { + + Vehicle vehicle = new VehicleImpl(); + String overview = vehicle.getOverview(); + long[] startPosition = vehicle.startPosition(); + String producer = Vehicle.producer(); + + assertEquals(overview, "ATV made by N&F Vehicles"); + assertEquals(startPosition[0], 23); + assertEquals(startPosition[1], 15); + assertEquals(producer, "N&F Vehicles"); + } + + @Test + public void checkStreamOperations_whenWorkAsSuppose_thenCorrect() { + + String[] arr = new String[]{"a", "b", "c"}; + Stream streamArr = Arrays.stream(arr); + Stream streamOf = Stream.of("a", "b", "c"); + assertEquals(streamArr.count(), 3); + + long count = list.stream().distinct().count(); + assertEquals(count, 9); + + list.parallelStream().forEach(element -> doWork(element)); + + Stream streamFilter = list.stream().filter(element -> element.isEmpty()); + assertEquals(streamFilter.count(), 2); + + List uris = new ArrayList<>(); + uris.add("C:\\My.txt"); + Stream streamMap = uris.stream().map(uri -> Paths.get(uri)); + assertEquals(streamMap.count(), 1); + + List details = new ArrayList<>(); + details.add(new Detail()); + details.add(new Detail()); + Stream streamFlatMap = details.stream() + .flatMap(detail -> detail.getParts().stream()); + assertEquals(streamFlatMap.count(), 4); + + boolean isValid = list.stream().anyMatch(element -> element.contains("h")); + boolean isValidOne = list.stream().allMatch(element -> element.contains("h")); + boolean isValidTwo = list.stream().noneMatch(element -> element.contains("h")); + assertTrue(isValid); + assertFalse(isValidOne); + assertFalse(isValidTwo); + + List integers = new ArrayList<>(); + integers.add(1); + integers.add(1); + integers.add(1); + Integer reduced = integers.stream().reduce(23, (a, b) -> a + b); + assertTrue(reduced == 26); + + List resultList = list.stream() + .map(element -> element.toUpperCase()) + .collect(Collectors.toList()); + assertEquals(resultList.size(), list.size()); + assertTrue(resultList.contains("")); + } + + @Test + public void checkMethodReferences_whenWork_thenCorrect() { + + List users = new ArrayList<>(); + users.add(new User()); + users.add(new User()); + boolean isReal = users.stream().anyMatch(u -> User.isRealUser(u)); + boolean isRealRef = users.stream().anyMatch(User::isRealUser); + assertTrue(isReal); + assertTrue(isRealRef); + + User user = new User(); + boolean isLegalName = list.stream().anyMatch(user::isLegalName); + assertTrue(isLegalName); + + long count = list.stream().filter(String::isEmpty).count(); + assertEquals(count, 2); + + Stream stream = list.stream().map(User::new); + List userList = stream.collect(Collectors.toList()); + assertEquals(userList.size(), list.size()); + assertTrue(userList.get(0) instanceof User); + } + + @Test + public void checkOptional_whenAsExpected_thenCorrect() { + + Optional optionalEmpty = Optional.empty(); + assertFalse(optionalEmpty.isPresent()); + + String str = "value"; + Optional optional = Optional.of(str); + assertEquals(optional.get(), "value"); + + Optional optionalNullable = Optional.ofNullable(str); + Optional optionalNull = Optional.ofNullable(null); + assertEquals(optionalNullable.get(), "value"); + assertFalse(optionalNull.isPresent()); + + List listOpt = Optional.of(list).orElse(new ArrayList<>()); + List listNull = null; + List listOptNull = Optional.ofNullable(listNull).orElse(new ArrayList<>()); + assertTrue(listOpt == list); + assertTrue(listOptNull.isEmpty()); + + Optional user = Optional.ofNullable(getUser()); + String result = user.map(User::getAddress) + .map(Address::getStreet) + .orElse("not specified"); + assertEquals(result, "1st Avenue"); + + Optional optionalUser = Optional.ofNullable(getOptionalUser()); + String resultOpt = optionalUser.flatMap(OptionalUser::getAddress) + .flatMap(OptionalAddress::getStreet) + .orElse("not specified"); + assertEquals(resultOpt, "1st Avenue"); + + Optional userNull = Optional.ofNullable(getUserNull()); + String resultNull = userNull.map(User::getAddress) + .map(Address::getStreet) + .orElse("not specified"); + assertEquals(resultNull, "not specified"); + + Optional optionalUserNull = Optional.ofNullable(getOptionalUserNull()); + String resultOptNull = optionalUserNull.flatMap(OptionalUser::getAddress) + .flatMap(OptionalAddress::getStreet) + .orElse("not specified"); + assertEquals(resultOptNull, "not specified"); + + } + + @Test(expected = CustomException.class) + public void callMethod_whenCustomException_thenCorrect() { + User user = new User(); + String result = user.getOrThrow(); + } + + private User getUser() { + User user = new User(); + Address address = new Address(); + address.setStreet("1st Avenue"); + user.setAddress(address); + return user; + } + + private OptionalUser getOptionalUser() { + OptionalUser user = new OptionalUser(); + OptionalAddress address = new OptionalAddress(); + address.setStreet("1st Avenue"); + user.setAddress(address); + return user; + } + + private OptionalUser getOptionalUserNull() { + OptionalUser user = new OptionalUser(); + OptionalAddress address = new OptionalAddress(); + address.setStreet(null); + user.setAddress(address); + return user; + } + + private User getUserNull() { + User user = new User(); + Address address = new Address(); + address.setStreet(null); + user.setAddress(address); + return user; + } + + private void doWork(String string) { + //just imitate an amount of work + } +} From c4fdeee352dfa8fd9ed09c34d4c1491b39340847 Mon Sep 17 00:00:00 2001 From: amedviediev Date: Sat, 21 May 2016 16:25:09 +0300 Subject: [PATCH 019/283] - Fixed assertAll code --- junit5/src/test/java/com/baeldung/FirstTest.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/junit5/src/test/java/com/baeldung/FirstTest.java b/junit5/src/test/java/com/baeldung/FirstTest.java index aa7bcfdcd0..2fa0f31a38 100644 --- a/junit5/src/test/java/com/baeldung/FirstTest.java +++ b/junit5/src/test/java/com/baeldung/FirstTest.java @@ -25,11 +25,11 @@ class FirstTest { @Test void groupAssertions() { int[] numbers = {0, 1, 2, 3, 4}; - assertAll("numbers", () -> { - assertEquals(numbers[0], 1); - assertEquals(numbers[3], 3); - assertEquals(numbers[4], 1); - }); + assertAll("numbers", + () -> assertEquals(numbers[0], 1), + () -> assertEquals(numbers[3], 3), + () -> assertEquals(numbers[4], 1) + ); } @Test From 263d17142c115eebebbe45845f36cae888c0e04c Mon Sep 17 00:00:00 2001 From: Slavisa Avramovic Date: Sun, 22 May 2016 11:45:07 +0200 Subject: [PATCH 020/283] xml-serialize-deserialize - minor changes --- .../xml/TestXMLSerializeDeserialize.java | 114 +++++++++--------- 1 file changed, 60 insertions(+), 54 deletions(-) diff --git a/jackson/src/test/java/com/baeldung/jackson/xml/TestXMLSerializeDeserialize.java b/jackson/src/test/java/com/baeldung/jackson/xml/TestXMLSerializeDeserialize.java index cd2c422184..92d0bd13d4 100644 --- a/jackson/src/test/java/com/baeldung/jackson/xml/TestXMLSerializeDeserialize.java +++ b/jackson/src/test/java/com/baeldung/jackson/xml/TestXMLSerializeDeserialize.java @@ -17,64 +17,70 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper; public class TestXMLSerializeDeserialize { - @Test - public void whenJavaSerializedToXmlStr_thenCorrect() throws JsonProcessingException{ - XmlMapper xmlMapper = new XmlMapper(); - String xml = xmlMapper.writeValueAsString(new SimpleBean()); - assertNotNull(xml); - } - @Test - public void whenJavaSerializedToXmlFile_thenCorrect() throws IOException{ - XmlMapper xmlMapper = new XmlMapper(); - xmlMapper.writeValue(new File("simple_bean.xml"), new SimpleBean()); - File file=new File("simple_bean.xml"); - assertNotNull(file); - } - @Test - public void whenJavaGotFromXmlStr_thenCorrect() throws IOException { - XmlMapper xmlMapper = new XmlMapper(); - SimpleBean value = xmlMapper.readValue( - "12", SimpleBean.class); - assertTrue(value.getX() == 1 && value.getY() == 2); - } - @Test - public void whenJavaGotFromXmlFile_thenCorrect() throws IOException { - File file = new File("simple_bean.xml"); - XmlMapper xmlMapper = new XmlMapper(); - String xml = inputStreamToString(new FileInputStream(file)); - SimpleBean value = xmlMapper.readValue(xml,SimpleBean.class); - assertTrue(value.getX() == 1 && value.getY() == 2); - } + @Test + public void whenJavaSerializedToXmlStr_thenCorrect() throws JsonProcessingException { + XmlMapper xmlMapper = new XmlMapper(); + String xml = xmlMapper.writeValueAsString(new SimpleBean()); + assertNotNull(xml); + } - public static String inputStreamToString(InputStream is) throws IOException { - BufferedReader br = null; - StringBuilder sb = new StringBuilder(); + @Test + public void whenJavaSerializedToXmlFile_thenCorrect() throws IOException { + XmlMapper xmlMapper = new XmlMapper(); + xmlMapper.writeValue(new File("target/simple_bean.xml"), new SimpleBean()); + File file = new File("target/simple_bean.xml"); + assertNotNull(file); + } - String line; - br = new BufferedReader(new InputStreamReader(is)); - while ((line = br.readLine()) != null) { - sb.append(line); - } - br.close(); - return sb.toString(); + @Test + public void whenJavaGotFromXmlStr_thenCorrect() throws IOException { + XmlMapper xmlMapper = new XmlMapper(); + SimpleBean value = xmlMapper.readValue( + "12", SimpleBean.class); + assertTrue(value.getX() == 1 && value.getY() == 2); + } - } + @Test + public void whenJavaGotFromXmlFile_thenCorrect() throws IOException { + File file = new File("src/test/resources/simple_bean.xml"); + XmlMapper xmlMapper = new XmlMapper(); + String xml = inputStreamToString(new FileInputStream(file)); + SimpleBean value = xmlMapper.readValue(xml, SimpleBean.class); + assertTrue(value.getX() == 1 && value.getY() == 2); + } + + private static String inputStreamToString(InputStream is) throws IOException { + BufferedReader br; + StringBuilder sb = new StringBuilder(); + + String line; + br = new BufferedReader(new InputStreamReader(is)); + while ((line = br.readLine()) != null) { + sb.append(line); + } + br.close(); + return sb.toString(); + } } class SimpleBean { - private int x = 1; - private int y = 2; - public int getX() { - return x; - } - public void setX(int x) { - this.x = x; - } - public int getY() { - return y; - } - public void setY(int y) { - this.y = y; - } - + private int x = 1; + private int y = 2; + + public int getX() { + return x; + } + + public void setX(int x) { + this.x = x; + } + + public int getY() { + return y; + } + + public void setY(int y) { + this.y = y; + } + } From 7335ef2a6519ed765e2fe7f5b89dc94b9ce93cf3 Mon Sep 17 00:00:00 2001 From: Slavisa Avramovic Date: Sun, 22 May 2016 11:52:23 +0200 Subject: [PATCH 021/283] xml-serialize-deserialize - pom formatting --- jackson/pom.xml | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/jackson/pom.xml b/jackson/pom.xml index 77e538bf3d..c7cd172757 100644 --- a/jackson/pom.xml +++ b/jackson/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 com.baeldung jackson @@ -22,13 +22,12 @@ commons-io 2.4 - - - com.fasterxml.jackson.dataformat - jackson-dataformat-xml - 2.7.4 - - + + + com.fasterxml.jackson.dataformat + jackson-dataformat-xml + 2.7.4 + org.apache.commons @@ -62,12 +61,12 @@ com.fasterxml.jackson.datatype jackson-datatype-joda ${jackson.version} - + - - com.fasterxml.jackson.module - jackson-module-jsonSchema - 2.7.2 + + com.fasterxml.jackson.module + jackson-module-jsonSchema + 2.7.2 From e7ec50034af4b641034c3a7200be7cd71ecf5088 Mon Sep 17 00:00:00 2001 From: David Morley Date: Mon, 23 May 2016 06:06:48 -0500 Subject: [PATCH 022/283] Clean up Spring REST Docs examples --- .../java/com/example/ApiDocumentation.java | 348 ++++++++++-------- .../example/GettingStartedDocumentation.java | 242 ++++++------ 2 files changed, 325 insertions(+), 265 deletions(-) diff --git a/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java b/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java index 96ecbe158a..195b9dc514 100644 --- a/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java +++ b/spring-rest-docs/src/test/java/com/example/ApiDocumentation.java @@ -1,29 +1,6 @@ package com.example; -import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; -import static org.springframework.restdocs.headers.HeaderDocumentation.responseHeaders; -import static org.springframework.restdocs.hypermedia.HypermediaDocumentation.linkWithRel; -import static org.springframework.restdocs.hypermedia.HypermediaDocumentation.links; -import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; -import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.delete; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.put; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; -import static org.springframework.restdocs.payload.PayloadDocumentation.fieldWithPath; -import static org.springframework.restdocs.payload.PayloadDocumentation.responseFields; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; -import static org.springframework.restdocs.snippet.Attributes.key; -import static org.springframework.restdocs.payload.PayloadDocumentation.requestFields; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - +import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -39,146 +16,219 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; -import org.springframework.util.StringUtils; import org.springframework.web.context.WebApplicationContext; -import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.HashMap; +import java.util.Map; + +import static java.util.Collections.singletonList; +import static org.springframework.restdocs.headers.HeaderDocumentation.headerWithName; +import static org.springframework.restdocs.headers.HeaderDocumentation.responseHeaders; +import static org.springframework.restdocs.hypermedia.HypermediaDocumentation.linkWithRel; +import static org.springframework.restdocs.hypermedia.HypermediaDocumentation.links; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.*; +import static org.springframework.restdocs.payload.PayloadDocumentation.*; +import static org.springframework.restdocs.snippet.Attributes.key; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import static org.springframework.util.StringUtils.collectionToDelimitedString; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SpringRestDocsApplication.class) @WebAppConfiguration public class ApiDocumentation { - @Rule - public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); - - @Autowired - private WebApplicationContext context; - - @Autowired - private ObjectMapper objectMapper; - - private RestDocumentationResultHandler document; - - private MockMvc mockMvc; - - @Before - public void setUp() { - this.document = document("{method-name}",preprocessRequest(prettyPrint()),preprocessResponse(prettyPrint())); - this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context).apply(documentationConfiguration(this.restDocumentation)).alwaysDo(this.document).build(); - } - + @Rule + public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); - @Test - public void headersExample() throws Exception { - this.document.snippets(responseHeaders(headerWithName("Content-Type").description("The Content-Type of the payload, e.g. `application/hal+json`"))); - this.mockMvc.perform(get("/")).andExpect(status().isOk()); - } - - @Test - public void indexExample() throws Exception { - this.document.snippets(links(linkWithRel("crud").description("The <>")),responseFields(fieldWithPath("_links").description("<> to other resources"))); - this.mockMvc.perform(get("/")).andExpect(status().isOk()); - } - - - @Test - public void crudGetExample() throws Exception { - - Map tag = new HashMap(); - tag.put("name", "GET"); + @Autowired + private WebApplicationContext context; - String tagLocation =this.mockMvc.perform(get("/crud").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isOk()).andReturn().getResponse().getHeader("Location"); + @Autowired + private ObjectMapper objectMapper; - Map crud = new HashMap(); - crud.put("title", "Sample Model"); - crud.put("body", "http://www.baeldung.com/"); - crud.put("tags", Arrays.asList(tagLocation)); - - this.mockMvc.perform(get("/crud").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isOk()); - } - - @Test - public void crudCreateExample() throws Exception { - Map tag = new HashMap(); - tag.put("name", "CREATE"); + private RestDocumentationResultHandler document; - String tagLocation =this.mockMvc.perform(post("/crud").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isCreated()).andReturn().getResponse().getHeader("Location"); + private MockMvc mockMvc; - Map crud = new HashMap(); - crud.put("title", "Sample Model"); - crud.put("body", "http://www.baeldung.com/"); - crud.put("tags", Arrays.asList(tagLocation)); + @Before + public void setUp() { + this.document = document("{method-name}", preprocessRequest(prettyPrint()), preprocessResponse(prettyPrint())); + this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) + .apply(documentationConfiguration(this.restDocumentation)) + .alwaysDo(this.document) + .build(); + } - ConstrainedFields fields = new ConstrainedFields(CrudInput.class); - this.document.snippets(requestFields(fields.withPath("title").description("The title of the note"),fields.withPath("body").description("The body of the note"),fields.withPath("tags").description("An array of tag resource URIs"))); - this.mockMvc.perform(post("/crud").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isCreated()); - - - } - - @Test - public void crudDeleteExample() throws Exception { - - Map tag = new HashMap(); - tag.put("name", "DELETE"); - - String tagLocation =this.mockMvc.perform(delete("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isOk()).andReturn().getResponse().getHeader("Location"); - Map crud = new HashMap(); - crud.put("title", "Sample Model"); - crud.put("body", "http://www.baeldung.com/"); - crud.put("tags", Arrays.asList(tagLocation)); - - this.mockMvc.perform(delete("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isOk()); - } - - @Test - public void crudPatchExample() throws Exception { - - Map tag = new HashMap(); - tag.put("name", "PATCH"); - - String tagLocation =this.mockMvc.perform(patch("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isNoContent()).andReturn().getResponse().getHeader("Location"); - Map crud = new HashMap(); - crud.put("title", "Sample Model"); - crud.put("body", "http://www.baeldung.com/"); - crud.put("tags", Arrays.asList(tagLocation)); - - this.mockMvc.perform(patch("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isNoContent()); - } - - - @Test - public void crudPutExample() throws Exception { - Map tag = new HashMap(); - tag.put("name", "PUT"); - - String tagLocation =this.mockMvc.perform(put("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(tag))).andExpect(status().isAccepted()).andReturn().getResponse().getHeader("Location"); - Map crud = new HashMap(); - crud.put("title", "Sample Model"); - crud.put("body", "http://www.baeldung.com/"); - crud.put("tags", Arrays.asList(tagLocation)); - - this.mockMvc.perform(put("/crud/10").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isAccepted()); - } - - - @Test - public void contextLoads() { - } - - private static class ConstrainedFields { - private final ConstraintDescriptions constraintDescriptions; + @Test + public void headersExample() throws Exception { + this.document.snippets(responseHeaders(headerWithName("Content-Type") + .description("The Content-Type of the payload, e.g. `application/hal+json`"))); + this.mockMvc.perform(get("/")) + .andExpect(status().isOk()); + } + + @Test + public void indexExample() throws Exception { + this.document.snippets( + links(linkWithRel("crud").description("The <>")), + responseFields(fieldWithPath("_links").description("<> to other resources")) + ); + this.mockMvc.perform(get("/")) + .andExpect(status().isOk()); + } + + + @Test + public void crudGetExample() throws Exception { + + Map tag = new HashMap<>(); + tag.put("name", "GET"); + + String tagLocation = this.mockMvc.perform(get("/crud") + .contentType(MediaTypes.HAL_JSON) + .content(this.objectMapper.writeValueAsString(tag))) + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getHeader("Location"); + + Map crud = new HashMap<>(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", singletonList(tagLocation)); + + this.mockMvc.perform(get("/crud") + .contentType(MediaTypes.HAL_JSON) + .content(this.objectMapper.writeValueAsString(crud))) + .andExpect(status().isOk()); + } + + @Test + public void crudCreateExample() throws Exception { + Map tag = new HashMap<>(); + tag.put("name", "CREATE"); + + String tagLocation = this.mockMvc.perform(post("/crud") + .contentType(MediaTypes.HAL_JSON) + .content(this.objectMapper.writeValueAsString(tag))) + .andExpect(status().isCreated()) + .andReturn() + .getResponse() + .getHeader("Location"); + + Map crud = new HashMap<>(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", singletonList(tagLocation)); + + ConstrainedFields fields = new ConstrainedFields(CrudInput.class); + this.document.snippets(requestFields( + fields.withPath("title").description("The title of the note"), + fields.withPath("body").description("The body of the note"), + fields.withPath("tags").description("An array of tag resource URIs"))); + this.mockMvc.perform(post("/crud").contentType(MediaTypes.HAL_JSON).content(this.objectMapper.writeValueAsString(crud))).andExpect(status().isCreated()); + + + } + + @Test + public void crudDeleteExample() throws Exception { + + Map tag = new HashMap<>(); + tag.put("name", "DELETE"); + + String tagLocation = this.mockMvc.perform(delete("/crud/10") + .contentType(MediaTypes.HAL_JSON) + .content(this.objectMapper.writeValueAsString(tag))) + .andExpect(status().isOk()) + .andReturn() + .getResponse() + .getHeader("Location"); + + Map crud = new HashMap<>(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", singletonList(tagLocation)); + + this.mockMvc.perform(delete("/crud/10") + .contentType(MediaTypes.HAL_JSON) + .content(this.objectMapper.writeValueAsString(crud))) + .andExpect(status().isOk()); + } + + @Test + public void crudPatchExample() throws Exception { + + Map tag = new HashMap<>(); + tag.put("name", "PATCH"); + + String tagLocation = this.mockMvc.perform(patch("/crud/10") + .contentType(MediaTypes.HAL_JSON) + .content(this.objectMapper.writeValueAsString(tag))) + .andExpect(status().isNoContent()) + .andReturn() + .getResponse() + .getHeader("Location"); + + Map crud = new HashMap<>(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", singletonList(tagLocation)); + + this.mockMvc.perform(patch("/crud/10") + .contentType(MediaTypes.HAL_JSON) + .content(this.objectMapper.writeValueAsString(crud))) + .andExpect(status().isNoContent()); + } + + + @Test + public void crudPutExample() throws Exception { + Map tag = new HashMap<>(); + tag.put("name", "PUT"); + + String tagLocation = this.mockMvc.perform(put("/crud/10") + .contentType(MediaTypes.HAL_JSON) + .content(this.objectMapper.writeValueAsString(tag))) + .andExpect(status().isAccepted()) + .andReturn() + .getResponse() + .getHeader("Location"); + + Map crud = new HashMap<>(); + crud.put("title", "Sample Model"); + crud.put("body", "http://www.baeldung.com/"); + crud.put("tags", singletonList(tagLocation)); + + this.mockMvc.perform(put("/crud/10") + .contentType(MediaTypes.HAL_JSON) + .content(this.objectMapper.writeValueAsString(crud))) + .andExpect(status().isAccepted()); + } + + + @Test + public void contextLoads() { + } + + private static class ConstrainedFields { + + private final ConstraintDescriptions constraintDescriptions; + + ConstrainedFields(Class input) { + this.constraintDescriptions = new ConstraintDescriptions(input); + } + + private FieldDescriptor withPath(String path) { + return fieldWithPath(path) + .attributes(key("constraints") + .value(collectionToDelimitedString(this.constraintDescriptions.descriptionsForProperty(path), ". "))); + } + } - ConstrainedFields(Class input) { - this.constraintDescriptions = new ConstraintDescriptions(input); - } - private FieldDescriptor withPath(String path) { - return fieldWithPath(path).attributes(key("constraints").value(StringUtils.collectionToDelimitedString(this.constraintDescriptions.descriptionsForProperty(path), ". "))); - } - } - - } diff --git a/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java b/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java index e9fb105438..7f3c4db1f9 100644 --- a/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java +++ b/spring-rest-docs/src/test/java/com/example/GettingStartedDocumentation.java @@ -1,25 +1,8 @@ package com.example; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.notNullValue; -import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; -import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.patch; -import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.post; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessRequest; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.preprocessResponse; -import static org.springframework.restdocs.operation.preprocess.Preprocessors.prettyPrint; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.header; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath; -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; - -import java.io.UnsupportedEncodingException; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; - +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.jayway.jsonpath.JsonPath; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -35,114 +18,141 @@ import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.jayway.jsonpath.JsonPath; +import java.io.UnsupportedEncodingException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +import static org.hamcrest.Matchers.*; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; +import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.documentationConfiguration; +import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.*; +import static org.springframework.restdocs.operation.preprocess.Preprocessors.*; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = SpringRestDocsApplication.class) @WebAppConfiguration public class GettingStartedDocumentation { - - @Rule - public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); - @Autowired - private ObjectMapper objectMapper; + @Rule + public final RestDocumentation restDocumentation = new RestDocumentation("target/generated-snippets"); - @Autowired - private WebApplicationContext context; + @Autowired + private ObjectMapper objectMapper; - private MockMvc mockMvc; - - - @Before - public void setUp() { - this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) - .apply(documentationConfiguration(this.restDocumentation)).alwaysDo(document("{method-name}/{step}/", - preprocessRequest(prettyPrint()),preprocessResponse(prettyPrint()))).build(); - } - - @Test - public void index() throws Exception { - this.mockMvc.perform(get("/").accept(MediaTypes.HAL_JSON)).andExpect(status().isOk()).andExpect(jsonPath("_links.crud", is(notNullValue()))).andExpect(jsonPath("_links.crud", is(notNullValue()))); - } - - - //@Test - public void creatingANote() throws JsonProcessingException, Exception { - String noteLocation = createNote(); - MvcResult note = getNote(noteLocation); - String tagLocation = createTag(); - getTag(tagLocation); - String taggedNoteLocation = createTaggedNote(tagLocation); - MvcResult taggedNote = getNote(taggedNoteLocation); - getTags(getLink(taggedNote, "note-tags")); - tagExistingNote(noteLocation, tagLocation); - getTags(getLink(note, "note-tags")); - } - - String createNote() throws Exception { - Map note = new HashMap(); - note.put("title", "Note creation with cURL"); - note.put("body", "An example of how to create a note using cURL"); - String noteLocation = this.mockMvc.perform(post("/crud").contentType(MediaTypes.HAL_JSON).content(objectMapper.writeValueAsString(note))).andExpect(status().isCreated()).andExpect(header().string("Location", notNullValue())).andReturn().getResponse().getHeader("Location"); - return noteLocation; - } + @Autowired + private WebApplicationContext context; - MvcResult getNote(String noteLocation) throws Exception { - return this.mockMvc.perform(get(noteLocation)).andExpect(status().isOk()).andExpect(jsonPath("title", is(notNullValue()))).andExpect(jsonPath("body", is(notNullValue()))).andExpect(jsonPath("_links.crud", is(notNullValue()))).andReturn(); - } - - - String createTag() throws Exception, JsonProcessingException { - Map tag = new HashMap(); - tag.put("name", "getting-started"); - String tagLocation = this.mockMvc.perform(post("/crud").contentType(MediaTypes.HAL_JSON).content(objectMapper.writeValueAsString(tag))).andExpect(status().isCreated()).andExpect(header().string("Location", notNullValue())).andReturn().getResponse().getHeader("Location"); - return tagLocation; - } + private MockMvc mockMvc; - void getTag(String tagLocation) throws Exception { - this.mockMvc.perform(get(tagLocation)).andExpect(status().isOk()) - .andExpect(jsonPath("name", is(notNullValue()))) - .andExpect(jsonPath("_links.tagged-notes", is(notNullValue()))); - } - String createTaggedNote(String tag) throws Exception { - Map note = new HashMap(); - note.put("title", "Tagged note creation with cURL"); - note.put("body", "An example of how to create a tagged note using cURL"); - note.put("tags", Arrays.asList(tag)); + @Before + public void setUp() { + this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context) + .apply(documentationConfiguration(this.restDocumentation)) + .alwaysDo(document("{method-name}/{step}/", + preprocessRequest(prettyPrint()), preprocessResponse(prettyPrint()))) + .build(); + } - String noteLocation = this.mockMvc.perform(post("/notes").contentType(MediaTypes.HAL_JSON).content(objectMapper.writeValueAsString(note))) - .andExpect(status().isCreated()).andExpect(header().string("Location", notNullValue())).andReturn().getResponse().getHeader("Location"); - return noteLocation; - } - - void getTags(String noteTagsLocation) throws Exception { - this.mockMvc.perform(get(noteTagsLocation)) - .andExpect(status().isOk()) - .andExpect(jsonPath("_embedded.tags", hasSize(1))); - } + @Test + public void index() throws Exception { + this.mockMvc.perform(get("/").accept(MediaTypes.HAL_JSON)) + .andExpect(status().isOk()) + .andExpect(jsonPath("_links.crud", is(notNullValue()))) + .andExpect(jsonPath("_links.crud", is(notNullValue()))); + } - void tagExistingNote(String noteLocation, String tagLocation) throws Exception { - Map update = new HashMap(); - update.put("tags", Arrays.asList(tagLocation)); - this.mockMvc.perform(patch(noteLocation).contentType(MediaTypes.HAL_JSON).content(objectMapper.writeValueAsString(update))).andExpect(status().isNoContent()); - } +// String createNote() throws Exception { +// Map note = new HashMap(); +// note.put("title", "Note creation with cURL"); +// note.put("body", "An example of how to create a note using curl"); +// String noteLocation = this.mockMvc.perform(post("/crud") +// .contentType(MediaTypes.HAL_JSON) +// .content(objectMapper.writeValueAsString(note))) +// .andExpect(status().isCreated()) +// .andExpect(header().string("Location", notNullValue())) +// .andReturn() +// .getResponse() +// .getHeader("Location"); +// return noteLocation; +// } +// +// MvcResult getNote(String noteLocation) throws Exception { +// return this.mockMvc.perform(get(noteLocation)) +// .andExpect(status().isOk()) +// .andExpect(jsonPath("title", is(notNullValue()))) +// .andExpect(jsonPath("body", is(notNullValue()))) +// .andExpect(jsonPath("_links.crud", is(notNullValue()))) +// .andReturn(); +// } +// +// +// String createTag() throws Exception, JsonProcessingException { +// Map tag = new HashMap(); +// tag.put("name", "getting-started"); +// String tagLocation = this.mockMvc.perform(post("/crud") +// .contentType(MediaTypes.HAL_JSON) +// .content(objectMapper.writeValueAsString(tag))) +// .andExpect(status().isCreated()) +// .andExpect(header().string("Location", notNullValue())) +// .andReturn() +// .getResponse() +// .getHeader("Location"); +// return tagLocation; +// } +// +// void getTag(String tagLocation) throws Exception { +// this.mockMvc.perform(get(tagLocation)).andExpect(status().isOk()) +// .andExpect(jsonPath("name", is(notNullValue()))) +// .andExpect(jsonPath("_links.tagged-notes", is(notNullValue()))); +// } +// +// String createTaggedNote(String tag) throws Exception { +// Map note = new HashMap(); +// note.put("title", "Tagged note creation with cURL"); +// note.put("body", "An example of how to create a tagged note using cURL"); +// note.put("tags", Arrays.asList(tag)); +// +// String noteLocation = this.mockMvc.perform(post("/notes") +// .contentType(MediaTypes.HAL_JSON) +// .content(objectMapper.writeValueAsString(note))) +// .andExpect(status().isCreated()) +// .andExpect(header().string("Location", notNullValue())) +// .andReturn() +// .getResponse() +// .getHeader("Location"); +// return noteLocation; +// } +// +// void getTags(String noteTagsLocation) throws Exception { +// this.mockMvc.perform(get(noteTagsLocation)) +// .andExpect(status().isOk()) +// .andExpect(jsonPath("_embedded.tags", hasSize(1))); +// } +// +// void tagExistingNote(String noteLocation, String tagLocation) throws Exception { +// Map update = new HashMap(); +// update.put("tags", Arrays.asList(tagLocation)); +// this.mockMvc.perform(patch(noteLocation) +// .contentType(MediaTypes.HAL_JSON) +// .content(objectMapper.writeValueAsString(update))) +// .andExpect(status().isNoContent()); +// } +// +// MvcResult getTaggedExistingNote(String noteLocation) throws Exception { +// return this.mockMvc.perform(get(noteLocation)).andExpect(status().isOk()).andReturn(); +// } +// +// void getTagsForExistingNote(String noteTagsLocation) throws Exception { +// this.mockMvc.perform(get(noteTagsLocation)) +// .andExpect(status().isOk()).andExpect(jsonPath("_embedded.tags", hasSize(1))); +// } +// +// private String getLink(MvcResult result, String rel) +// throws UnsupportedEncodingException { +// return JsonPath.parse(result.getResponse().getContentAsString()).read("_links." + rel + ".href"); +// } - MvcResult getTaggedExistingNote(String noteLocation) throws Exception { - return this.mockMvc.perform(get(noteLocation)).andExpect(status().isOk()).andReturn(); - } - - void getTagsForExistingNote(String noteTagsLocation) throws Exception { - this.mockMvc.perform(get(noteTagsLocation)) - .andExpect(status().isOk()).andExpect(jsonPath("_embedded.tags", hasSize(1))); - } - - private String getLink(MvcResult result, String rel) - throws UnsupportedEncodingException { - return JsonPath.parse(result.getResponse().getContentAsString()).read("_links." + rel + ".href"); - } - } From e641ca0598564fea42547903f8108006ba7244ae Mon Sep 17 00:00:00 2001 From: David Morley Date: Mon, 23 May 2016 06:14:18 -0500 Subject: [PATCH 023/283] Reformat JUnit 5 examples --- junit5/src/test/java/com/baeldung/AssumptionTest.java | 4 +--- junit5/src/test/java/com/baeldung/ExceptionTest.java | 6 +++--- junit5/src/test/java/com/baeldung/FirstTest.java | 5 +---- junit5/src/test/java/com/baeldung/TaggedTest.java | 2 +- 4 files changed, 6 insertions(+), 11 deletions(-) diff --git a/junit5/src/test/java/com/baeldung/AssumptionTest.java b/junit5/src/test/java/com/baeldung/AssumptionTest.java index 634ec9b21e..e4c2b56124 100644 --- a/junit5/src/test/java/com/baeldung/AssumptionTest.java +++ b/junit5/src/test/java/com/baeldung/AssumptionTest.java @@ -3,9 +3,7 @@ package com.baeldung; import org.junit.gen5.api.Test; import static org.junit.gen5.api.Assertions.assertEquals; -import static org.junit.gen5.api.Assumptions.assumeFalse; -import static org.junit.gen5.api.Assumptions.assumeTrue; -import static org.junit.gen5.api.Assumptions.assumingThat; +import static org.junit.gen5.api.Assumptions.*; public class AssumptionTest { diff --git a/junit5/src/test/java/com/baeldung/ExceptionTest.java b/junit5/src/test/java/com/baeldung/ExceptionTest.java index 25b7f0a1cc..5c30ad5b44 100644 --- a/junit5/src/test/java/com/baeldung/ExceptionTest.java +++ b/junit5/src/test/java/com/baeldung/ExceptionTest.java @@ -2,8 +2,6 @@ package com.baeldung; import org.junit.gen5.api.Test; -import java.util.ArrayList; - import static org.junit.gen5.api.Assertions.assertEquals; import static org.junit.gen5.api.Assertions.expectThrows; @@ -12,7 +10,9 @@ public class ExceptionTest { @Test void shouldThrowException() { Throwable exception = expectThrows(UnsupportedOperationException.class, - () -> {throw new UnsupportedOperationException("Not supported");}); + () -> { + throw new UnsupportedOperationException("Not supported"); + }); assertEquals(exception.getMessage(), "Not supported"); } } diff --git a/junit5/src/test/java/com/baeldung/FirstTest.java b/junit5/src/test/java/com/baeldung/FirstTest.java index 2fa0f31a38..4fc6037174 100644 --- a/junit5/src/test/java/com/baeldung/FirstTest.java +++ b/junit5/src/test/java/com/baeldung/FirstTest.java @@ -3,13 +3,10 @@ package com.baeldung; import org.junit.gen5.api.Disabled; import org.junit.gen5.api.Test; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import static org.junit.gen5.api.Assertions.assertAll; -import static org.junit.gen5.api.Assertions.assertEquals; -import static org.junit.gen5.api.Assertions.assertTrue; +import static org.junit.gen5.api.Assertions.*; class FirstTest { diff --git a/junit5/src/test/java/com/baeldung/TaggedTest.java b/junit5/src/test/java/com/baeldung/TaggedTest.java index 5107c04037..dbc82f4022 100644 --- a/junit5/src/test/java/com/baeldung/TaggedTest.java +++ b/junit5/src/test/java/com/baeldung/TaggedTest.java @@ -11,6 +11,6 @@ public class TaggedTest { @Test @Tag("Method") void testMethod() { - assertEquals(2+2, 4); + assertEquals(2 + 2, 4); } } From f972513e2b8608115dfb84301e03a0ccc62c5fbd Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Tue, 24 May 2016 17:41:20 +0200 Subject: [PATCH 024/283] java8features - new java 8 features --- .../com/baeldung/java_8_features/Address.java | 3 - .../java_8_features/CustomException.java | 3 - .../com/baeldung/java_8_features/Detail.java | 3 - .../java_8_features/OptionalAddress.java | 3 - .../java_8_features/OptionalUser.java | 3 - .../com/baeldung/java_8_features/User.java | 3 - .../com/baeldung/java_8_features/Vehicle.java | 3 - .../baeldung/java_8_features/VehicleImpl.java | 3 - ...Java8DefaultStaticIntefaceMethodsTest.java | 27 +++ .../com/baeldung/java8/Java8Features.java | 220 ------------------ .../java8/Java8MethodReferenceTest.java | 67 ++++++ .../com/baeldung/java8/Java8OptionalTest.java | 118 ++++++++++ .../com/baeldung/java8/Java8StreamsTest.java | 113 +++++++++ 13 files changed, 325 insertions(+), 244 deletions(-) create mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java delete mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8Features.java create mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java create mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8OptionalTest.java create mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8StreamsTest.java diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/Address.java b/core-java-8/src/main/java/com/baeldung/java_8_features/Address.java index 9cd0d902e3..1f89503288 100644 --- a/core-java-8/src/main/java/com/baeldung/java_8_features/Address.java +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/Address.java @@ -1,8 +1,5 @@ package com.baeldung.java_8_features; -/** - * Created by Alex Vengr - */ public class Address { private String street; diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java b/core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java index 651398bfea..ff9be6ab06 100644 --- a/core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/CustomException.java @@ -1,7 +1,4 @@ package com.baeldung.java_8_features; -/** - * Created by Alex Vengr - */ public class CustomException extends RuntimeException { } diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java b/core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java index 8e8187e0a2..811937dba7 100644 --- a/core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/Detail.java @@ -3,9 +3,6 @@ package com.baeldung.java_8_features; import java.util.Arrays; import java.util.List; -/** - * Created by Alex Vengrov - */ public class Detail { private static final List PARTS = Arrays.asList("turbine", "pump"); diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java b/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java index 925dd5e97b..8d6c517ac5 100644 --- a/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalAddress.java @@ -2,9 +2,6 @@ package com.baeldung.java_8_features; import java.util.Optional; -/** - * Created by Alex Vengrov - */ public class OptionalAddress { private String street; diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java b/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java index a725a4a817..ff06cd21d6 100644 --- a/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/OptionalUser.java @@ -2,9 +2,6 @@ package com.baeldung.java_8_features; import java.util.Optional; -/** - * Created by Alex Vengrov - */ public class OptionalUser { private OptionalAddress address; diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/User.java b/core-java-8/src/main/java/com/baeldung/java_8_features/User.java index 5c496539f2..3708d276c8 100644 --- a/core-java-8/src/main/java/com/baeldung/java_8_features/User.java +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/User.java @@ -2,9 +2,6 @@ package com.baeldung.java_8_features; import java.util.Optional; -/** - * Created by Alex Vengrov - */ public class User { private String name; diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java b/core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java index bf8ea0e09a..011173bcaf 100644 --- a/core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/Vehicle.java @@ -1,8 +1,5 @@ package com.baeldung.java_8_features; -/** - * Created by Alex Vengrov - */ public interface Vehicle { void moveTo(long altitude, long longitude); diff --git a/core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java b/core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java index 7d325e3292..83e55f5f4d 100644 --- a/core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java +++ b/core-java-8/src/main/java/com/baeldung/java_8_features/VehicleImpl.java @@ -1,8 +1,5 @@ package com.baeldung.java_8_features; -/** - * Created by 1 on 15.05.2016. - */ public class VehicleImpl implements Vehicle { @Override diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java new file mode 100644 index 0000000000..21a5e34b9b --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/java8/Java8DefaultStaticIntefaceMethodsTest.java @@ -0,0 +1,27 @@ +package com.baeldung.java8; + +import com.baeldung.java_8_features.Vehicle; +import com.baeldung.java_8_features.VehicleImpl; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; + +public class Java8DefaultStaticIntefaceMethodsTest { + + @Test + public void callStaticInterfaceMethdosMethods_whenExpectedResults_thenCorrect() { + Vehicle vehicle = new VehicleImpl(); + String overview = vehicle.getOverview(); + long[] startPosition = vehicle.startPosition(); + + assertEquals(overview, "ATV made by N&F Vehicles"); + assertEquals(startPosition[0], 23); + assertEquals(startPosition[1], 15); + } + + @Test + public void callDefaultInterfaceMethods_whenExpectedResults_thenCorrect() { + String producer = Vehicle.producer(); + assertEquals(producer, "N&F Vehicles"); + } +} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8Features.java b/core-java-8/src/test/java/com/baeldung/java8/Java8Features.java deleted file mode 100644 index 724b1770ea..0000000000 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8Features.java +++ /dev/null @@ -1,220 +0,0 @@ -package com.baeldung.java8; - -import com.baeldung.java_8_features.*; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; - -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.mock; - -/** - * Created by Alex Vengrov - */ -public class Java8Features { - - private List list; - - @Before - public void init() { - list = new ArrayList<>(); - list.add("One"); - list.add("OneAndOnly"); - list.add("Derek"); - list.add("Change"); - list.add("factory"); - list.add("justBefore"); - list.add("Italy"); - list.add("Italy"); - list.add("Thursday"); - list.add(""); - list.add(""); - } - - @Test - public void callMethods_whenExpectedResults_thenCorrect() { - - Vehicle vehicle = new VehicleImpl(); - String overview = vehicle.getOverview(); - long[] startPosition = vehicle.startPosition(); - String producer = Vehicle.producer(); - - assertEquals(overview, "ATV made by N&F Vehicles"); - assertEquals(startPosition[0], 23); - assertEquals(startPosition[1], 15); - assertEquals(producer, "N&F Vehicles"); - } - - @Test - public void checkStreamOperations_whenWorkAsSuppose_thenCorrect() { - - String[] arr = new String[]{"a", "b", "c"}; - Stream streamArr = Arrays.stream(arr); - Stream streamOf = Stream.of("a", "b", "c"); - assertEquals(streamArr.count(), 3); - - long count = list.stream().distinct().count(); - assertEquals(count, 9); - - list.parallelStream().forEach(element -> doWork(element)); - - Stream streamFilter = list.stream().filter(element -> element.isEmpty()); - assertEquals(streamFilter.count(), 2); - - List uris = new ArrayList<>(); - uris.add("C:\\My.txt"); - Stream streamMap = uris.stream().map(uri -> Paths.get(uri)); - assertEquals(streamMap.count(), 1); - - List details = new ArrayList<>(); - details.add(new Detail()); - details.add(new Detail()); - Stream streamFlatMap = details.stream() - .flatMap(detail -> detail.getParts().stream()); - assertEquals(streamFlatMap.count(), 4); - - boolean isValid = list.stream().anyMatch(element -> element.contains("h")); - boolean isValidOne = list.stream().allMatch(element -> element.contains("h")); - boolean isValidTwo = list.stream().noneMatch(element -> element.contains("h")); - assertTrue(isValid); - assertFalse(isValidOne); - assertFalse(isValidTwo); - - List integers = new ArrayList<>(); - integers.add(1); - integers.add(1); - integers.add(1); - Integer reduced = integers.stream().reduce(23, (a, b) -> a + b); - assertTrue(reduced == 26); - - List resultList = list.stream() - .map(element -> element.toUpperCase()) - .collect(Collectors.toList()); - assertEquals(resultList.size(), list.size()); - assertTrue(resultList.contains("")); - } - - @Test - public void checkMethodReferences_whenWork_thenCorrect() { - - List users = new ArrayList<>(); - users.add(new User()); - users.add(new User()); - boolean isReal = users.stream().anyMatch(u -> User.isRealUser(u)); - boolean isRealRef = users.stream().anyMatch(User::isRealUser); - assertTrue(isReal); - assertTrue(isRealRef); - - User user = new User(); - boolean isLegalName = list.stream().anyMatch(user::isLegalName); - assertTrue(isLegalName); - - long count = list.stream().filter(String::isEmpty).count(); - assertEquals(count, 2); - - Stream stream = list.stream().map(User::new); - List userList = stream.collect(Collectors.toList()); - assertEquals(userList.size(), list.size()); - assertTrue(userList.get(0) instanceof User); - } - - @Test - public void checkOptional_whenAsExpected_thenCorrect() { - - Optional optionalEmpty = Optional.empty(); - assertFalse(optionalEmpty.isPresent()); - - String str = "value"; - Optional optional = Optional.of(str); - assertEquals(optional.get(), "value"); - - Optional optionalNullable = Optional.ofNullable(str); - Optional optionalNull = Optional.ofNullable(null); - assertEquals(optionalNullable.get(), "value"); - assertFalse(optionalNull.isPresent()); - - List listOpt = Optional.of(list).orElse(new ArrayList<>()); - List listNull = null; - List listOptNull = Optional.ofNullable(listNull).orElse(new ArrayList<>()); - assertTrue(listOpt == list); - assertTrue(listOptNull.isEmpty()); - - Optional user = Optional.ofNullable(getUser()); - String result = user.map(User::getAddress) - .map(Address::getStreet) - .orElse("not specified"); - assertEquals(result, "1st Avenue"); - - Optional optionalUser = Optional.ofNullable(getOptionalUser()); - String resultOpt = optionalUser.flatMap(OptionalUser::getAddress) - .flatMap(OptionalAddress::getStreet) - .orElse("not specified"); - assertEquals(resultOpt, "1st Avenue"); - - Optional userNull = Optional.ofNullable(getUserNull()); - String resultNull = userNull.map(User::getAddress) - .map(Address::getStreet) - .orElse("not specified"); - assertEquals(resultNull, "not specified"); - - Optional optionalUserNull = Optional.ofNullable(getOptionalUserNull()); - String resultOptNull = optionalUserNull.flatMap(OptionalUser::getAddress) - .flatMap(OptionalAddress::getStreet) - .orElse("not specified"); - assertEquals(resultOptNull, "not specified"); - - } - - @Test(expected = CustomException.class) - public void callMethod_whenCustomException_thenCorrect() { - User user = new User(); - String result = user.getOrThrow(); - } - - private User getUser() { - User user = new User(); - Address address = new Address(); - address.setStreet("1st Avenue"); - user.setAddress(address); - return user; - } - - private OptionalUser getOptionalUser() { - OptionalUser user = new OptionalUser(); - OptionalAddress address = new OptionalAddress(); - address.setStreet("1st Avenue"); - user.setAddress(address); - return user; - } - - private OptionalUser getOptionalUserNull() { - OptionalUser user = new OptionalUser(); - OptionalAddress address = new OptionalAddress(); - address.setStreet(null); - user.setAddress(address); - return user; - } - - private User getUserNull() { - User user = new User(); - Address address = new Address(); - address.setStreet(null); - user.setAddress(address); - return user; - } - - private void doWork(String string) { - //just imitate an amount of work - } -} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java new file mode 100644 index 0000000000..d9d88c5052 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/java8/Java8MethodReferenceTest.java @@ -0,0 +1,67 @@ +package com.baeldung.java8; + +import com.baeldung.java_8_features.User; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class Java8MethodReferenceTest { + + private List list; + + @Before + public void init() { + list = new ArrayList<>(); + list.add("One"); + list.add("OneAndOnly"); + list.add("Derek"); + list.add("Change"); + list.add("factory"); + list.add("justBefore"); + list.add("Italy"); + list.add("Italy"); + list.add("Thursday"); + list.add(""); + list.add(""); + } + + @Test + public void checkStaticMethodReferences_whenWork_thenCorrect() { + + List users = new ArrayList<>(); + users.add(new User()); + users.add(new User()); + boolean isReal = users.stream().anyMatch(u -> User.isRealUser(u)); + boolean isRealRef = users.stream().anyMatch(User::isRealUser); + assertTrue(isReal); + assertTrue(isRealRef); + } + + @Test + public void checkInstanceMethodReferences_whenWork_thenCorrect() { + User user = new User(); + boolean isLegalName = list.stream().anyMatch(user::isLegalName); + assertTrue(isLegalName); + } + + @Test + public void checkParticularTypeReferences_whenWork_thenCorrect() { + long count = list.stream().filter(String::isEmpty).count(); + assertEquals(count, 2); + } + + @Test + public void checkConstructorReferences_whenWork_thenCorrect() { + Stream stream = list.stream().map(User::new); + List userList = stream.collect(Collectors.toList()); + assertEquals(userList.size(), list.size()); + assertTrue(userList.get(0) instanceof User); + } +} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8OptionalTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8OptionalTest.java new file mode 100644 index 0000000000..26de39bc0e --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/java8/Java8OptionalTest.java @@ -0,0 +1,118 @@ +package com.baeldung.java8; + +import com.baeldung.java_8_features.*; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +import static org.junit.Assert.*; + +public class Java8OptionalTest { + + private List list; + + @Before + public void init() { + list = new ArrayList<>(); + list.add("One"); + list.add("OneAndOnly"); + list.add("Derek"); + list.add("Change"); + list.add("factory"); + list.add("justBefore"); + list.add("Italy"); + list.add("Italy"); + list.add("Thursday"); + list.add(""); + list.add(""); + } + + @Test + public void checkOptional_whenAsExpected_thenCorrect() { + + Optional optionalEmpty = Optional.empty(); + assertFalse(optionalEmpty.isPresent()); + + String str = "value"; + Optional optional = Optional.of(str); + assertEquals(optional.get(), "value"); + + Optional optionalNullable = Optional.ofNullable(str); + Optional optionalNull = Optional.ofNullable(null); + assertEquals(optionalNullable.get(), "value"); + assertFalse(optionalNull.isPresent()); + + List listOpt = Optional.of(list).orElse(new ArrayList<>()); + List listNull = null; + List listOptNull = Optional.ofNullable(listNull).orElse(new ArrayList<>()); + assertTrue(listOpt == list); + assertTrue(listOptNull.isEmpty()); + + Optional user = Optional.ofNullable(getUser()); + String result = user.map(User::getAddress) + .map(Address::getStreet) + .orElse("not specified"); + assertEquals(result, "1st Avenue"); + + Optional optionalUser = Optional.ofNullable(getOptionalUser()); + String resultOpt = optionalUser.flatMap(OptionalUser::getAddress) + .flatMap(OptionalAddress::getStreet) + .orElse("not specified"); + assertEquals(resultOpt, "1st Avenue"); + + Optional userNull = Optional.ofNullable(getUserNull()); + String resultNull = userNull.map(User::getAddress) + .map(Address::getStreet) + .orElse("not specified"); + assertEquals(resultNull, "not specified"); + + Optional optionalUserNull = Optional.ofNullable(getOptionalUserNull()); + String resultOptNull = optionalUserNull.flatMap(OptionalUser::getAddress) + .flatMap(OptionalAddress::getStreet) + .orElse("not specified"); + assertEquals(resultOptNull, "not specified"); + + } + + @Test(expected = CustomException.class) + public void callMethod_whenCustomException_thenCorrect() { + User user = new User(); + String result = user.getOrThrow(); + } + + private User getUser() { + User user = new User(); + Address address = new Address(); + address.setStreet("1st Avenue"); + user.setAddress(address); + return user; + } + + private OptionalUser getOptionalUser() { + OptionalUser user = new OptionalUser(); + OptionalAddress address = new OptionalAddress(); + address.setStreet("1st Avenue"); + user.setAddress(address); + return user; + } + + private OptionalUser getOptionalUserNull() { + OptionalUser user = new OptionalUser(); + OptionalAddress address = new OptionalAddress(); + address.setStreet(null); + user.setAddress(address); + return user; + } + + private User getUserNull() { + User user = new User(); + Address address = new Address(); + address.setStreet(null); + user.setAddress(address); + return user; + } + +} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamsTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamsTest.java new file mode 100644 index 0000000000..1f1dda49ce --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamsTest.java @@ -0,0 +1,113 @@ +package com.baeldung.java8; + +import com.baeldung.java_8_features.Detail; +import org.junit.Before; +import org.junit.Test; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static org.junit.Assert.*; + +public class Java8StreamsTest { + + private List list; + + @Before + public void init() { + list = new ArrayList<>(); + list.add("One"); + list.add("OneAndOnly"); + list.add("Derek"); + list.add("Change"); + list.add("factory"); + list.add("justBefore"); + list.add("Italy"); + list.add("Italy"); + list.add("Thursday"); + list.add(""); + list.add(""); + } + + @Test + public void checkStreamCount_whenCreating_givenDifferentSources() { + String[] arr = new String[]{"a", "b", "c"}; + Stream streamArr = Arrays.stream(arr); + assertEquals(streamArr.count(), 3); + + Stream streamOf = Stream.of("a", "b", "c"); + assertEquals(streamOf.count(), 3); + + long count = list.stream().distinct().count(); + assertEquals(count, 9); + } + + + @Test + public void checkStreamCount_whenOperationFilter_thanCorrect() { + Stream streamFilter = list.stream().filter(element -> element.isEmpty()); + assertEquals(streamFilter.count(), 2); + } + + + @Test + public void checkStreamCount_whenOperationMap_thanCorrect() { + List uris = new ArrayList<>(); + uris.add("C:\\My.txt"); + Stream streamMap = uris.stream().map(uri -> Paths.get(uri)); + assertEquals(streamMap.count(), 1); + + List details = new ArrayList<>(); + details.add(new Detail()); + details.add(new Detail()); + Stream streamFlatMap = details.stream() + .flatMap(detail -> detail.getParts().stream()); + assertEquals(streamFlatMap.count(), 4); + } + + + @Test + public void checkStreamCount_whenOperationMatch_thenCorrect() { + boolean isValid = list.stream().anyMatch(element -> element.contains("h")); + boolean isValidOne = list.stream().allMatch(element -> element.contains("h")); + boolean isValidTwo = list.stream().noneMatch(element -> element.contains("h")); + assertTrue(isValid); + assertFalse(isValidOne); + assertFalse(isValidTwo); + } + + + @Test + public void checkStreamReducedValue_whenOperationReduce_thenCorrect() { + List integers = new ArrayList<>(); + integers.add(1); + integers.add(1); + integers.add(1); + Integer reduced = integers.stream().reduce(23, (a, b) -> a + b); + assertTrue(reduced == 26); + } + + @Test + public void checkStreamContains_whenOperationCollect_thenCorrect() { + List resultList = list.stream() + .map(element -> element.toUpperCase()) + .collect(Collectors.toList()); + assertEquals(resultList.size(), list.size()); + assertTrue(resultList.contains("")); + } + + + @Test + public void checkParallelStream_whenDoWork() { + list.parallelStream().forEach(element -> doWork(element)); + } + + private void doWork(String string) { + assertTrue(true); //just imitate an amount of work + } +} From 44e50693d7873bfe4e8928e7a1051172af7e82e8 Mon Sep 17 00:00:00 2001 From: sivabalachandran Date: Wed, 25 May 2016 11:35:27 -0400 Subject: [PATCH 025/283] First cut for basics of java 8 date time api --- .../com/baeldung/datetime/UseDuration.java | 16 ++++++ .../com/baeldung/datetime/UseLocalDate.java | 46 ++++++++++++++++ .../baeldung/datetime/UseLocalDateTime.java | 11 ++++ .../com/baeldung/datetime/UseLocalTime.java | 35 ++++++++++++ .../java/com/baeldung/datetime/UsePeriod.java | 15 +++++ .../com/baeldung/datetime/UseToInstant.java | 19 +++++++ .../baeldung/datetime/UseZonedDateTime.java | 13 +++++ .../baeldung/datetime/UseLocalDateTest.java | 55 +++++++++++++++++++ .../datetime/UseLocalDateTimeTest.java | 19 +++++++ .../baeldung/datetime/UseLocalTimeTest.java | 36 ++++++++++++ .../com/baeldung/datetime/UsePeriodTest.java | 29 ++++++++++ .../datetime/UseZonedDateTimeTest.java | 20 +++++++ 12 files changed, 314 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/datetime/UseDuration.java create mode 100644 core-java-8/src/main/java/com/baeldung/datetime/UseLocalDate.java create mode 100644 core-java-8/src/main/java/com/baeldung/datetime/UseLocalDateTime.java create mode 100644 core-java-8/src/main/java/com/baeldung/datetime/UseLocalTime.java create mode 100644 core-java-8/src/main/java/com/baeldung/datetime/UsePeriod.java create mode 100644 core-java-8/src/main/java/com/baeldung/datetime/UseToInstant.java create mode 100644 core-java-8/src/main/java/com/baeldung/datetime/UseZonedDateTime.java create mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTest.java create mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java create mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java create mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UsePeriodTest.java create mode 100644 core-java-8/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseDuration.java b/core-java-8/src/main/java/com/baeldung/datetime/UseDuration.java new file mode 100644 index 0000000000..125b6fbe38 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/datetime/UseDuration.java @@ -0,0 +1,16 @@ +package com.baeldung.datetime; + +import java.time.Duration; +import java.time.LocalTime; +import java.time.Period; + +public class UseDuration { + + public LocalTime modifyDates(LocalTime localTime,Duration duration){ + return localTime.plus(duration); + } + + public Duration getDifferenceBetweenDates(LocalTime localTime1,LocalTime localTime2){ + return Duration.between(localTime1, localTime2); + } +} diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseLocalDate.java b/core-java-8/src/main/java/com/baeldung/datetime/UseLocalDate.java new file mode 100644 index 0000000000..47b1b3f67d --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/datetime/UseLocalDate.java @@ -0,0 +1,46 @@ +package com.baeldung.datetime; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.time.temporal.TemporalAdjusters; + +public class UseLocalDate { + + public LocalDate getLocalDateUsingFactoryOfMethod(int year, int month, int dayOfMonth){ + return LocalDate.of(year, month, dayOfMonth); + } + + public LocalDate getLocalDateUsingParseMethod(String representation){ + return LocalDate.parse(representation); + } + + public LocalDate getLocalDateFromClock(){ + LocalDate localDate = LocalDate.now(); + return localDate; + } + + public LocalDate getNextDay(LocalDate localDate){ + return localDate.plusDays(1); + } + + public LocalDate getPreviousDay(LocalDate localDate){ + return localDate.minus(1, ChronoUnit.DAYS); + } + + public DayOfWeek getDayOfWeek(LocalDate localDate){ + DayOfWeek day = localDate.getDayOfWeek(); + return day; + } + + public LocalDate getFirstDayOfMonth(){ + LocalDate firstDayOfMonth = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); + return firstDayOfMonth; + } + + public LocalDateTime getStartOfDay(LocalDate localDate){ + LocalDateTime startofDay = localDate.atStartOfDay(); + return startofDay; + } +} diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseLocalDateTime.java b/core-java-8/src/main/java/com/baeldung/datetime/UseLocalDateTime.java new file mode 100644 index 0000000000..7aa1eaa276 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/datetime/UseLocalDateTime.java @@ -0,0 +1,11 @@ +package com.baeldung.datetime; + +import java.time.LocalDateTime; + +public class UseLocalDateTime { + + public LocalDateTime getLocalDateTimeUsingParseMethod(String representation){ + return LocalDateTime.parse(representation); + } + +} diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseLocalTime.java b/core-java-8/src/main/java/com/baeldung/datetime/UseLocalTime.java new file mode 100644 index 0000000000..e13fd10d6f --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/datetime/UseLocalTime.java @@ -0,0 +1,35 @@ +package com.baeldung.datetime; + +import java.time.LocalTime; +import java.time.temporal.ChronoUnit; + +public class UseLocalTime { + + public LocalTime getLocalTimeUsingFactoryOfMethod(int hour, int min, int seconds){ + LocalTime localTime = LocalTime.of(hour, min, seconds); + return localTime; + } + + public LocalTime getLocalTimeUsingParseMethod(String timeRepresentation){ + LocalTime localTime = LocalTime.parse(timeRepresentation); + return localTime; + } + + public LocalTime getLocalTimeFromClock(){ + LocalTime localTime = LocalTime.now(); + return localTime; + } + + public LocalTime addAnHour(LocalTime localTime){ + LocalTime newTime = localTime.plus(1,ChronoUnit.HOURS); + return newTime; + } + + public int getHourFromLocalTime(LocalTime localTime){ + return localTime.getHour(); + } + + public LocalTime getLocalTimeWithMinuteSetToValue(LocalTime localTime, int minute){ + return localTime.withMinute(minute); + } +} diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UsePeriod.java b/core-java-8/src/main/java/com/baeldung/datetime/UsePeriod.java new file mode 100644 index 0000000000..326cfad650 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/datetime/UsePeriod.java @@ -0,0 +1,15 @@ +package com.baeldung.datetime; + +import java.time.LocalDate; +import java.time.Period; + +public class UsePeriod { + + public LocalDate modifyDates(LocalDate localDate,Period period){ + return localDate.plus(period); + } + + public Period getDifferenceBetweenDates(LocalDate localDate1,LocalDate localDate2){ + return Period.between(localDate1, localDate2); + } +} diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseToInstant.java b/core-java-8/src/main/java/com/baeldung/datetime/UseToInstant.java new file mode 100644 index 0000000000..1ddb096cf6 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/datetime/UseToInstant.java @@ -0,0 +1,19 @@ +package com.baeldung.datetime; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Calendar; +import java.util.Date; + +public class UseToInstant { + + public LocalDateTime convertDateToLocalDate(Date date){ + LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); + return localDateTime; + } + + public LocalDateTime convertDateToLocalDate(Calendar calendar){ + LocalDateTime localDateTime = LocalDateTime.ofInstant(calendar.toInstant(), ZoneId.systemDefault()); + return localDateTime; + } +} diff --git a/core-java-8/src/main/java/com/baeldung/datetime/UseZonedDateTime.java b/core-java-8/src/main/java/com/baeldung/datetime/UseZonedDateTime.java new file mode 100644 index 0000000000..0369de9835 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/datetime/UseZonedDateTime.java @@ -0,0 +1,13 @@ +package com.baeldung.datetime; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +public class UseZonedDateTime { + + public ZonedDateTime getZonedDateTime(LocalDateTime localDateTime,ZoneId zoneId){ + ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, zoneId); + return zonedDateTime; + } +} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTest.java new file mode 100644 index 0000000000..8af33393be --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTest.java @@ -0,0 +1,55 @@ +package com.baeldung.datetime; + +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.Month; + +import org.junit.Assert; +import org.junit.Test; + +public class UseLocalDateTest { + + UseLocalDate useLocalDate = new UseLocalDate(); + + @Test + public void givenValues_whenUsingFactoryOf_thenLocalDate(){ + Assert.assertEquals("2016-05-10",useLocalDate.getLocalDateUsingFactoryOfMethod(2016,5,10).toString()); + } + + @Test + public void givenString_whenUsingParse_thenLocalDate(){ + Assert.assertEquals("2016-05-10",useLocalDate.getLocalDateUsingParseMethod("2016-05-10").toString()); + } + + @Test + public void whenUsingClock_thenLocalDate(){ + Assert.assertEquals(LocalDate.now(),useLocalDate.getLocalDateFromClock()); + } + + @Test + public void givenDate_whenUsingPlus_thenNextDay(){ + Assert.assertEquals(LocalDate.now().plusDays(1),useLocalDate.getNextDay(LocalDate.now())); + } + + @Test + public void givenDate_whenUsingMinus_thenPreviousDay(){ + Assert.assertEquals(LocalDate.now().minusDays(1),useLocalDate.getPreviousDay(LocalDate.now())); + } + + @Test + public void givenToday_whenUsingGetDayOfWeek_thenDayOfWeek(){ + Assert.assertEquals(DayOfWeek.SUNDAY,useLocalDate.getDayOfWeek(LocalDate.parse("2016-05-22"))); + } + + @Test + public void givenToday_whenUsingWithTemporalAdjuster_thenFirstDayOfMonth(){ + Assert.assertEquals(1,useLocalDate.getFirstDayOfMonth().getDayOfMonth()); + } + + @Test + public void givenLocalDate_whenUsingAtStartOfDay_thenReturnMidnight(){ + Assert.assertEquals(LocalDateTime.parse("2016-05-22T00:00:00"),useLocalDate.getStartOfDay(LocalDate.parse("2016-05-22"))); + } + +} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java new file mode 100644 index 0000000000..69a289fd02 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/datetime/UseLocalDateTimeTest.java @@ -0,0 +1,19 @@ +package com.baeldung.datetime; + +import java.time.LocalDate; +import java.time.LocalTime; +import java.time.Month; + +import org.junit.Assert; +import org.junit.Test; + +public class UseLocalDateTimeTest { + + UseLocalDateTime useLocalDateTime = new UseLocalDateTime(); + + @Test + public void givenString_whenUsingParse_thenLocalDateTime(){ + Assert.assertEquals(LocalDate.of(2016, Month.MAY, 10),useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalDate()); + Assert.assertEquals(LocalTime.of(6,30),useLocalDateTime.getLocalDateTimeUsingParseMethod("2016-05-10T06:30").toLocalTime()); + } +} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java new file mode 100644 index 0000000000..7776fad363 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/datetime/UseLocalTimeTest.java @@ -0,0 +1,36 @@ +package com.baeldung.datetime; + +import java.time.LocalTime; + +import org.junit.Assert; +import org.junit.Test; + +public class UseLocalTimeTest { + + UseLocalTime useLocalTime = new UseLocalTime(); + + @Test + public void givenValues_whenUsingFactoryOf_thenLocalTime(){ + Assert.assertEquals("07:07:07",useLocalTime.getLocalTimeUsingFactoryOfMethod(7,7,7).toString()); + } + + @Test + public void givenString_whenUsingParse_thenLocalTime(){ + Assert.assertEquals("06:30",useLocalTime.getLocalTimeUsingParseMethod("06:30").toString()); + } + + @Test + public void givenTime_whenAddHour_thenLocalTime(){ + Assert.assertEquals("07:30",useLocalTime.addAnHour(LocalTime.of(6,30)).toString()); + } + + @Test + public void getHourFromLocalTime(){ + Assert.assertEquals(1, useLocalTime.getHourFromLocalTime(LocalTime.of(1,1))); + } + + @Test + public void getLocalTimeWithMinuteSetToValue(){ + Assert.assertEquals(LocalTime.of(10, 20), useLocalTime.getLocalTimeWithMinuteSetToValue(LocalTime.of(10,10), 20)); + } +} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UsePeriodTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UsePeriodTest.java new file mode 100644 index 0000000000..8a3228aaa5 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/datetime/UsePeriodTest.java @@ -0,0 +1,29 @@ +package com.baeldung.datetime; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.Period; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +import org.junit.Assert; +import org.junit.Test; + +public class UsePeriodTest { + UsePeriod usingPeriod=new UsePeriod(); + + @Test + public void givenPeriodAndLocalDate_thenCalculateModifiedDate(){ + Period period = Period.ofDays(1); + LocalDate localDate = LocalDate.parse("2007-05-10"); + Assert.assertEquals(localDate.plusDays(1),usingPeriod.modifyDates(localDate, period)); + } + + @Test + public void givenDates_thenGetPeriod(){ + LocalDate localDate1 = LocalDate.parse("2007-05-10"); + LocalDate localDate2 = LocalDate.parse("2007-05-15"); + + Assert.assertEquals(Period.ofDays(5), usingPeriod.getDifferenceBetweenDates(localDate1, localDate2)); + } +} diff --git a/core-java-8/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java b/core-java-8/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java new file mode 100644 index 0000000000..5af01ad678 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/datetime/UseZonedDateTimeTest.java @@ -0,0 +1,20 @@ +package com.baeldung.datetime; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; + +import org.junit.Assert; +import org.junit.Test; + +public class UseZonedDateTimeTest { + + UseZonedDateTime zonedDateTime=new UseZonedDateTime(); + + @Test + public void givenZoneId_thenZonedDateTime(){ + ZoneId zoneId=ZoneId.of("Europe/Paris"); + ZonedDateTime zonedDatetime=zonedDateTime.getZonedDateTime(LocalDateTime.parse("2016-05-20T06:30"), zoneId); + Assert.assertEquals(zoneId,ZoneId.from(zonedDatetime)); + } +} From e8bbe6eba606d8661ec691249f2eedd921b2c48e Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Thu, 26 May 2016 17:36:32 +0700 Subject: [PATCH 026/283] initial commit for wiremock --- rest-testing/pom.xml | 285 +++++++++--------- .../wiremock/introduction/JUnitManaged.java | 53 ++++ .../introduction/ProgrammaticallyManaged.java | 52 ++++ 3 files changed, 251 insertions(+), 139 deletions(-) create mode 100644 rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java create mode 100644 rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java diff --git a/rest-testing/pom.xml b/rest-testing/pom.xml index e159af0b77..3bd7efb4d5 100644 --- a/rest-testing/pom.xml +++ b/rest-testing/pom.xml @@ -1,173 +1,180 @@ - - 4.0.0 - com.baeldung - rest-testing - 0.1-SNAPSHOT + + 4.0.0 + com.baeldung + rest-testing + 0.1-SNAPSHOT - rest-testing + rest-testing - + - + - - com.google.guava - guava - ${guava.version} - + + com.google.guava + guava + ${guava.version} + - - commons-io - commons-io - 2.4 - + + commons-io + commons-io + 2.4 + - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + - + - - org.apache.httpcomponents - httpclient - ${httpclient.version} - - - org.apache.httpcomponents - httpcore - ${httpcore.version} - + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + org.apache.httpcomponents + httpcore + ${httpcore.version} + - + - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + - + - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - runtime - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + runtime + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + - + - - junit - junit - ${junit.version} - test - + + junit + junit + ${junit.version} + test + - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + - - org.mockito - mockito-core - ${mockito.version} - test - + + org.mockito + mockito-core + ${mockito.version} + test + + + com.github.tomakehurst + wiremock + 1.58 + test + - + - - rest-testing - - - src/main/resources - true - - + + rest-testing + + + src/main/resources + true + + - + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + - + - + - - - 2.7.2 + + + 2.7.2 - - 1.7.13 - 1.1.3 + + 1.7.13 + 1.1.3 - - 5.1.3.Final + + 5.1.3.Final - - 19.0 - 3.4 + + 19.0 + 3.4 - - 1.3 - 4.12 - 1.10.19 + + 1.3 + 4.12 + 1.10.19 - 4.4.1 - 4.5 + 4.4.1 + 4.5 - 2.9.0 + 2.9.0 - - 3.5.1 - 2.6 - 2.19.1 - 2.7 - 1.4.18 + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 - + \ No newline at end of file diff --git a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java new file mode 100644 index 0000000000..9fef6017c1 --- /dev/null +++ b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java @@ -0,0 +1,53 @@ +package com.baeldung.rest.wiremock.introduction; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.configureFor; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Scanner; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.junit.Rule; +import org.junit.Test; + +import com.github.tomakehurst.wiremock.junit.WireMockRule; + +public class JUnitManaged { + @Rule + public WireMockRule wireMockRule = new WireMockRule(); + + @Test + public void givenJUnitManagedServer_whenStubbingURL_thenCorrect() throws IOException { + configureFor("localhost", 8080); + stubFor(get(urlPathMatching("/baeldung/.*")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody("\"testing-library\": \"WireMock\""))); + + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); + HttpResponse httpResponse = httpClient.execute(request); + String stringResponse = convertResponseToString(httpResponse); + + verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + assertEquals(200, httpResponse.getStatusLine().getStatusCode()); + assertEquals("application/json", httpResponse.getFirstHeader("Content-Type").getValue()); + assertEquals("\"testing-library\": \"WireMock\"", stringResponse); + } + + private String convertResponseToString(HttpResponse response) throws IOException { + InputStream responseStream = response.getEntity().getContent(); + Scanner scanner = new Scanner(responseStream, "UTF-8"); + String stringResponse = scanner.useDelimiter("\\Z").next(); + scanner.close(); + return stringResponse; + } +} diff --git a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java new file mode 100644 index 0000000000..34b445ac0f --- /dev/null +++ b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java @@ -0,0 +1,52 @@ +package com.baeldung.rest.wiremock.introduction; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.configureFor; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Scanner; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.junit.Test; + +import com.github.tomakehurst.wiremock.WireMockServer; + +public class ProgrammaticallyManaged { + WireMockServer wireMockServer = new WireMockServer(); + CloseableHttpClient httpClient = HttpClients.createDefault(); + + @Test + public void givenProgrammaticallyManagedServer_whenUsingSimpleStubbing_thenCorrect() throws IOException { + wireMockServer.start(); + + configureFor("localhost", 8080); + stubFor(get(urlEqualTo("/baeldung")).willReturn(aResponse().withBody("Welcome to Baeldung!"))); + + HttpGet request = new HttpGet("http://localhost:8080/baeldung"); + HttpResponse httpResponse = httpClient.execute(request); + String stringResponse = convertResponseToString(httpResponse); + + verify(getRequestedFor(urlEqualTo("/baeldung"))); + assertEquals("Welcome to Baeldung!", stringResponse); + + wireMockServer.stop(); + } + + private String convertResponseToString(HttpResponse response) throws IOException { + InputStream responseStream = response.getEntity().getContent(); + Scanner scanner = new Scanner(responseStream, "UTF-8"); + String stringResponse = scanner.useDelimiter("\\Z").next(); + scanner.close(); + return stringResponse; + } +} \ No newline at end of file From ef5300200052893ae3ec2cb06327f73ef7456e08 Mon Sep 17 00:00:00 2001 From: Slavisa Avramovic Date: Sat, 21 May 2016 11:28:31 +0200 Subject: [PATCH 027/283] spring-jsf-integration - mavenizing --- jsf/pom.xml | 37 ++++++++ .../controllers/RegistrationBean.java | 95 +++++++++++++++++++ .../dao/IUserManagementDAO.java | 18 ++++ .../dao/UserManagementDAO.java | 16 ++++ .../dao/UserManagementDAOImpl.java | 40 ++++++++ .../resources/constraints.properties | 10 ++ .../resources/messages.properties | 23 +++++ jsf/src/main/webapp/META-INF/context.xml | 2 + .../webapp/WEB-INF/applicationContext.xml | 15 +++ jsf/src/main/webapp/WEB-INF/async_config.xml | 11 +++ jsf/src/main/webapp/WEB-INF/beans.xml | 5 + jsf/src/main/webapp/WEB-INF/faces-config.xml | 50 ++++++++++ jsf/src/main/webapp/WEB-INF/glassfish-web.xml | 10 ++ jsf/src/main/webapp/WEB-INF/web.xml | 42 ++++++++ jsf/src/main/webapp/index.xhtml | 27 ++++++ pom.xml | 1 + 16 files changed, 402 insertions(+) create mode 100644 jsf/pom.xml create mode 100644 jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java create mode 100644 jsf/src/main/java/com/baeldung/springintegration/dao/IUserManagementDAO.java create mode 100644 jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAO.java create mode 100644 jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java create mode 100644 jsf/src/main/java/com/baeldung/springintegration/resources/constraints.properties create mode 100644 jsf/src/main/java/com/baeldung/springintegration/resources/messages.properties create mode 100644 jsf/src/main/webapp/META-INF/context.xml create mode 100644 jsf/src/main/webapp/WEB-INF/applicationContext.xml create mode 100644 jsf/src/main/webapp/WEB-INF/async_config.xml create mode 100644 jsf/src/main/webapp/WEB-INF/beans.xml create mode 100644 jsf/src/main/webapp/WEB-INF/faces-config.xml create mode 100644 jsf/src/main/webapp/WEB-INF/glassfish-web.xml create mode 100644 jsf/src/main/webapp/WEB-INF/web.xml create mode 100644 jsf/src/main/webapp/index.xhtml diff --git a/jsf/pom.xml b/jsf/pom.xml new file mode 100644 index 0000000000..7b15cf9336 --- /dev/null +++ b/jsf/pom.xml @@ -0,0 +1,37 @@ + + + + parent-modules + com.baeldung + 1.0.0-SNAPSHOT + + 4.0.0 + + jsf + 0.1-SNAPSHOT + war + + + + com.sun.faces + mojarra-jsf-impl + 2.0.0-b04 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.5.1 + + 1.8 + 1.8 + + + + + + \ No newline at end of file diff --git a/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java b/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java new file mode 100644 index 0000000000..b2cd505bd7 --- /dev/null +++ b/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java @@ -0,0 +1,95 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.baeldung.springintegration.controllers; + +import com.baeldung.springintegration.dao.IUserManagementDAO; + +import javax.faces.bean.ManagedBean; +import javax.faces.bean.ManagedProperty; +import javax.faces.bean.ViewScoped; +import javax.faces.context.FacesContext; +import java.io.Serializable; +import java.util.logging.Logger; + +/** + * + * @author Tayo + */ +@ManagedBean(name = "registration") +@ViewScoped +public class RegistrationBean implements Serializable { + + @ManagedProperty(value = "#{userManagementDAO}") + transient private IUserManagementDAO theUserDao; + private String userName; + private String operationMessage; + private boolean operationStatus; + + /** + * Creates a new instance of RegistrationBean + */ + public RegistrationBean() { + } + + public String createNewUser() { + try { + Logger.getAnonymousLogger().info("Creating new user"); + FacesContext context = FacesContext.getCurrentInstance(); + operationStatus = theUserDao.createUser(userName); //DAO layer is used to register user using gathered data + context.isValidationFailed(); + if (operationStatus) { + + operationMessage = "User " + userName + " created"; + } + } catch (Exception ex) { + Logger.getAnonymousLogger().severe("Error registering new user "); + ex.printStackTrace(); + } + return null; + } + + public String returnHome() { + return "home"; + } + + /** + * @return the name + */ + public String getUserName() { + return userName; + } + + /** + * @param userName the name to set + */ + public void setUserName(String userName) { + this.userName = userName; + } + + /** + * @param theUserDao the theUserDao to set + */ + public void setTheUserDao(IUserManagementDAO theUserDao) { + this.theUserDao = theUserDao; + } + + public IUserManagementDAO getTheUserDao() { + return this.theUserDao; + } + + /** + * @return the operationMessage + */ + public String getOperationMessage() { + return operationMessage; + } + + /** + * @param operationMessage the operationMessage to set + */ + public void setOperationMessage(String operationMessage) { + this.operationMessage = operationMessage; + } +} diff --git a/jsf/src/main/java/com/baeldung/springintegration/dao/IUserManagementDAO.java b/jsf/src/main/java/com/baeldung/springintegration/dao/IUserManagementDAO.java new file mode 100644 index 0000000000..bfa50cc998 --- /dev/null +++ b/jsf/src/main/java/com/baeldung/springintegration/dao/IUserManagementDAO.java @@ -0,0 +1,18 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.baeldung.springintegration.dao; + + +/** + * @author Tayo + */ +public abstract class IUserManagementDAO implements UserManagementDAO { + + + @Override + public abstract boolean createUser(String userName); + + +} diff --git a/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAO.java b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAO.java new file mode 100644 index 0000000000..8ee8bb906f --- /dev/null +++ b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAO.java @@ -0,0 +1,16 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.baeldung.springintegration.dao; + + +/** + * @author Tayo + */ +public interface UserManagementDAO { + + public boolean createUser(String newUserData); + + +} diff --git a/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java new file mode 100644 index 0000000000..6bdcb57cfa --- /dev/null +++ b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java @@ -0,0 +1,40 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.baeldung.springintegration.dao; + +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.annotation.PostConstruct; + +/** + * @author Tayo + */ +public class UserManagementDAOImpl extends IUserManagementDAO { + + private List users; + + @PostConstruct + public void initUserList() { + users = new ArrayList(); + } + + @Override + public boolean createUser(String newUserData) { + if (newUserData != null) { + users.add(newUserData); + Logger.getAnonymousLogger().log(Level.INFO, "User {0} successfully created", newUserData); + return true; + } else { + return false; + } + } + + public UserManagementDAOImpl() { + } + + +} diff --git a/jsf/src/main/java/com/baeldung/springintegration/resources/constraints.properties b/jsf/src/main/java/com/baeldung/springintegration/resources/constraints.properties new file mode 100644 index 0000000000..00b6c57a88 --- /dev/null +++ b/jsf/src/main/java/com/baeldung/springintegration/resources/constraints.properties @@ -0,0 +1,10 @@ +userName.maxLength = 8 +userName.minLength = 4 +password.minLength = 8 +password.maxLength = 12 +zip.length = 5 +password.regexp = ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$ +safetext.regexp = ^[a-zA-Z0-9 .-]+$ +zip.regexp = ^\d{5} +security.salt = G0d$3nd +birthdate.format = MM dd yyyy \ No newline at end of file diff --git a/jsf/src/main/java/com/baeldung/springintegration/resources/messages.properties b/jsf/src/main/java/com/baeldung/springintegration/resources/messages.properties new file mode 100644 index 0000000000..bb665c259d --- /dev/null +++ b/jsf/src/main/java/com/baeldung/springintegration/resources/messages.properties @@ -0,0 +1,23 @@ +message.unmatchedPasswords = The passwords you have entered do not match +message.valueRequired = This value is required +message.invalidPassword = Your passwords must match and must contain at least one each of upper case letters, lower case letters, and digits. +message.invalidDate = The date value supplied is invalid. It should be of the format MM/DD/YYYY +message.invalidZip = Your zip code should be a 5 digit numeric value +message.conversionError = An invalid value was supplied +label.firstName = First Name +label.lastName = Last Name +label.username = Username +label.firstPassword = Password +label.confirmPassword = Confirm Password +label.saveButton = Save +label.cancelButton = Cancel +label.returnHomeButton = Return +label.dateOfBirth = Date of Birth +label.city = City +label.street = Street Address +label.zip = Zip Code +label.postal = Postal Code +message.success = Operation Successful +message.failure = Operation Failed +account.success = Account Successfully created +conversion.error = An invalid value was submitted for this field diff --git a/jsf/src/main/webapp/META-INF/context.xml b/jsf/src/main/webapp/META-INF/context.xml new file mode 100644 index 0000000000..cf746bfae4 --- /dev/null +++ b/jsf/src/main/webapp/META-INF/context.xml @@ -0,0 +1,2 @@ + + diff --git a/jsf/src/main/webapp/WEB-INF/applicationContext.xml b/jsf/src/main/webapp/WEB-INF/applicationContext.xml new file mode 100644 index 0000000000..8553300e1e --- /dev/null +++ b/jsf/src/main/webapp/WEB-INF/applicationContext.xml @@ -0,0 +1,15 @@ + + + + + + + diff --git a/jsf/src/main/webapp/WEB-INF/async_config.xml b/jsf/src/main/webapp/WEB-INF/async_config.xml new file mode 100644 index 0000000000..600a279086 --- /dev/null +++ b/jsf/src/main/webapp/WEB-INF/async_config.xml @@ -0,0 +1,11 @@ + + + + true + + + \ No newline at end of file diff --git a/jsf/src/main/webapp/WEB-INF/beans.xml b/jsf/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000000..4ca8195bea --- /dev/null +++ b/jsf/src/main/webapp/WEB-INF/beans.xml @@ -0,0 +1,5 @@ + + + diff --git a/jsf/src/main/webapp/WEB-INF/faces-config.xml b/jsf/src/main/webapp/WEB-INF/faces-config.xml new file mode 100644 index 0000000000..6142d81daf --- /dev/null +++ b/jsf/src/main/webapp/WEB-INF/faces-config.xml @@ -0,0 +1,50 @@ + + + + + + + + + + com.baeldung.resources.messages + + + msg + + + + + com.baeldung.resources.constraints + + + constraints + + + org.springframework.web.jsf.el.SpringBeanFacesELResolver + + + + /* + + home + /index.xhtml + + + + + + /register.xhtml + + review registration + /review_registration.xhtml + + + + + + + diff --git a/jsf/src/main/webapp/WEB-INF/glassfish-web.xml b/jsf/src/main/webapp/WEB-INF/glassfish-web.xml new file mode 100644 index 0000000000..13e0059fff --- /dev/null +++ b/jsf/src/main/webapp/WEB-INF/glassfish-web.xml @@ -0,0 +1,10 @@ + + + + + + + Keep a copy of the generated servlet class' java code. + + + diff --git a/jsf/src/main/webapp/WEB-INF/web.xml b/jsf/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000000..9345f201ef --- /dev/null +++ b/jsf/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,42 @@ + + + + javax.faces.PROJECT_STAGE + Production + + + javax.faces.STATE_SAVING_MODE + SERVER + + + + primefaces.PUBLIC_CAPTCHA_KEY + + + 6LdG-84SAAAAALQfp6DuJqd1XLnz3ZlHfhunPPjY + + + + Faces Servlet + javax.faces.webapp.FacesServlet + 1 + + + Faces Servlet + *.jsf + + + + 30 + + + + /index.jsf + + + + org.springframework.web.context.ContextLoaderListener + + + + diff --git a/jsf/src/main/webapp/index.xhtml b/jsf/src/main/webapp/index.xhtml new file mode 100644 index 0000000000..d71451abcc --- /dev/null +++ b/jsf/src/main/webapp/index.xhtml @@ -0,0 +1,27 @@ + + + + + + Baeldung | Register + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 6f63269248..d6a1d7c034 100644 --- a/pom.xml +++ b/pom.xml @@ -64,6 +64,7 @@ spring-security-rest-full spring-thymeleaf spring-zuul + jsf From 6e6f7c4e1e7fca3543d8e4ebeb0be45bb276dd7e Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Thu, 26 May 2016 11:22:26 +0200 Subject: [PATCH 028/283] jsf-spring-integration - mavenizing (cherry picked from commit eba201c) --- jsf/pom.xml | 38 ++++++++++++++++-- .../dao/UserManagementDAOImpl.java | 9 +---- .../resources/constraints.properties | 0 .../resources/messages.properties | 0 .../webapp/WEB-INF/applicationContext.xml | 2 +- jsf/src/main/webapp/WEB-INF/faces-config.xml | 4 +- jsf/src/main/webapp/index.xhtml | 39 ++++++++++--------- 7 files changed, 59 insertions(+), 33 deletions(-) rename jsf/src/main/{java/com/baeldung/springintegration => }/resources/constraints.properties (100%) rename jsf/src/main/{java/com/baeldung/springintegration => }/resources/messages.properties (100%) diff --git a/jsf/pom.xml b/jsf/pom.xml index 7b15cf9336..6f43e08535 100644 --- a/jsf/pom.xml +++ b/jsf/pom.xml @@ -13,12 +13,39 @@ 0.1-SNAPSHOT war - com.sun.faces - mojarra-jsf-impl - 2.0.0-b04 + jsf-api + ${com.sun.faces.version} + + com.sun.faces + jsf-impl + ${com.sun.faces.version} + + + + + org.springframework + spring-web + ${org.springframework.version} + + + org.springframework + spring-webmvc + ${org.springframework.version} + + + org.springframework + spring-websocket + ${org.springframework.version} + + + org.springframework + spring-messaging + ${org.springframework.version} + + @@ -34,4 +61,9 @@ + + + 4.2.5.RELEASE + 2.1.7 + \ No newline at end of file diff --git a/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java index 6bdcb57cfa..b27aa582e3 100644 --- a/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java +++ b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java @@ -1,7 +1,3 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.baeldung.springintegration.dao; import java.util.ArrayList; @@ -10,16 +6,13 @@ import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.PostConstruct; -/** - * @author Tayo - */ public class UserManagementDAOImpl extends IUserManagementDAO { private List users; @PostConstruct public void initUserList() { - users = new ArrayList(); + users = new ArrayList<>(); } @Override diff --git a/jsf/src/main/java/com/baeldung/springintegration/resources/constraints.properties b/jsf/src/main/resources/constraints.properties similarity index 100% rename from jsf/src/main/java/com/baeldung/springintegration/resources/constraints.properties rename to jsf/src/main/resources/constraints.properties diff --git a/jsf/src/main/java/com/baeldung/springintegration/resources/messages.properties b/jsf/src/main/resources/messages.properties similarity index 100% rename from jsf/src/main/java/com/baeldung/springintegration/resources/messages.properties rename to jsf/src/main/resources/messages.properties diff --git a/jsf/src/main/webapp/WEB-INF/applicationContext.xml b/jsf/src/main/webapp/WEB-INF/applicationContext.xml index 8553300e1e..385a0b8680 100644 --- a/jsf/src/main/webapp/WEB-INF/applicationContext.xml +++ b/jsf/src/main/webapp/WEB-INF/applicationContext.xml @@ -10,6 +10,6 @@ "> - + diff --git a/jsf/src/main/webapp/WEB-INF/faces-config.xml b/jsf/src/main/webapp/WEB-INF/faces-config.xml index 6142d81daf..69baa5b05a 100644 --- a/jsf/src/main/webapp/WEB-INF/faces-config.xml +++ b/jsf/src/main/webapp/WEB-INF/faces-config.xml @@ -10,7 +10,7 @@ - com.baeldung.resources.messages + messages msg @@ -18,7 +18,7 @@ - com.baeldung.resources.constraints + constraints constraints diff --git a/jsf/src/main/webapp/index.xhtml b/jsf/src/main/webapp/index.xhtml index d71451abcc..3fc91ea376 100644 --- a/jsf/src/main/webapp/index.xhtml +++ b/jsf/src/main/webapp/index.xhtml @@ -1,27 +1,28 @@ - + - - Baeldung | Register - - - - - - - - - - - - - - - - + + Baeldung | Register + + + + + + + + + + + + + + From 98fbb50879fe84463b96c607f439fe50f88bb5b6 Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Thu, 26 May 2016 11:25:11 +0200 Subject: [PATCH 029/283] jsf-spring-integration - cleaning up (cherry picked from commit 3d6aa91) --- .../main/webapp/WEB-INF/applicationContext.xml | 4 ++-- jsf/src/main/webapp/WEB-INF/async_config.xml | 11 ----------- jsf/src/main/webapp/WEB-INF/beans.xml | 5 ----- jsf/src/main/webapp/WEB-INF/faces-config.xml | 17 +++-------------- jsf/src/main/webapp/WEB-INF/glassfish-web.xml | 10 ---------- 5 files changed, 5 insertions(+), 42 deletions(-) delete mode 100644 jsf/src/main/webapp/WEB-INF/async_config.xml delete mode 100644 jsf/src/main/webapp/WEB-INF/beans.xml delete mode 100644 jsf/src/main/webapp/WEB-INF/glassfish-web.xml diff --git a/jsf/src/main/webapp/WEB-INF/applicationContext.xml b/jsf/src/main/webapp/WEB-INF/applicationContext.xml index 385a0b8680..5d162f56ba 100644 --- a/jsf/src/main/webapp/WEB-INF/applicationContext.xml +++ b/jsf/src/main/webapp/WEB-INF/applicationContext.xml @@ -9,7 +9,7 @@ http://www.springframework.org/schema/lang/spring-lang-2.5.xsd http://www.springframework.org/schema/lang/spring-lang-2.5.xsd/spring-spring-lang-2.5.xsd-3.1.1.RELEASE.xsd "> - + - + diff --git a/jsf/src/main/webapp/WEB-INF/async_config.xml b/jsf/src/main/webapp/WEB-INF/async_config.xml deleted file mode 100644 index 600a279086..0000000000 --- a/jsf/src/main/webapp/WEB-INF/async_config.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - true - - - \ No newline at end of file diff --git a/jsf/src/main/webapp/WEB-INF/beans.xml b/jsf/src/main/webapp/WEB-INF/beans.xml deleted file mode 100644 index 4ca8195bea..0000000000 --- a/jsf/src/main/webapp/WEB-INF/beans.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - diff --git a/jsf/src/main/webapp/WEB-INF/faces-config.xml b/jsf/src/main/webapp/WEB-INF/faces-config.xml index 69baa5b05a..e9e6404b95 100644 --- a/jsf/src/main/webapp/WEB-INF/faces-config.xml +++ b/jsf/src/main/webapp/WEB-INF/faces-config.xml @@ -10,7 +10,7 @@ - messages + messages msg @@ -26,7 +26,7 @@ org.springframework.web.jsf.el.SpringBeanFacesELResolver - + /* @@ -35,16 +35,5 @@ - - - /register.xhtml - - review registration - /review_registration.xhtml - - - - - - + diff --git a/jsf/src/main/webapp/WEB-INF/glassfish-web.xml b/jsf/src/main/webapp/WEB-INF/glassfish-web.xml deleted file mode 100644 index 13e0059fff..0000000000 --- a/jsf/src/main/webapp/WEB-INF/glassfish-web.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - Keep a copy of the generated servlet class' java code. - - - From 5635d4850b84af660266bef10effaee7a5410f56 Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Thu, 26 May 2016 12:56:09 +0200 Subject: [PATCH 030/283] jsf-spring-integration - chaning the logger --- jsf/pom.xml | 33 +++++++++++++++++ .../controllers/RegistrationBean.java | 37 ++++--------------- jsf/src/main/resources/constraints.properties | 10 ----- jsf/src/main/resources/logback.xml | 14 +++++++ jsf/src/main/resources/messages.properties | 22 +---------- jsf/src/main/webapp/index.xhtml | 13 +++---- 6 files changed, 60 insertions(+), 69 deletions(-) delete mode 100644 jsf/src/main/resources/constraints.properties create mode 100644 jsf/src/main/resources/logback.xml diff --git a/jsf/pom.xml b/jsf/pom.xml index 6f43e08535..c4d4e333a1 100644 --- a/jsf/pom.xml +++ b/jsf/pom.xml @@ -13,6 +13,8 @@ 0.1-SNAPSHOT war + + com.sun.faces jsf-api @@ -25,6 +27,7 @@ + org.springframework spring-web @@ -46,6 +49,30 @@ ${org.springframework.version} + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + @@ -64,6 +91,12 @@ 4.2.5.RELEASE + + 2.1.7 + + + 1.7.13 + 1.1.3 \ No newline at end of file diff --git a/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java b/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java index b2cd505bd7..6d86f04ab1 100644 --- a/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java +++ b/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java @@ -1,31 +1,25 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.baeldung.springintegration.controllers; import com.baeldung.springintegration.dao.IUserManagementDAO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import java.io.Serializable; -import java.util.logging.Logger; -/** - * - * @author Tayo - */ + @ManagedBean(name = "registration") @ViewScoped public class RegistrationBean implements Serializable { + private static final Logger LOGGER = LoggerFactory.getLogger(RegistrationBean.class); @ManagedProperty(value = "#{userManagementDAO}") transient private IUserManagementDAO theUserDao; private String userName; private String operationMessage; - private boolean operationStatus; /** * Creates a new instance of RegistrationBean @@ -35,35 +29,24 @@ public class RegistrationBean implements Serializable { public String createNewUser() { try { - Logger.getAnonymousLogger().info("Creating new user"); + LOGGER.info("Creating new user"); FacesContext context = FacesContext.getCurrentInstance(); - operationStatus = theUserDao.createUser(userName); //DAO layer is used to register user using gathered data + boolean operationStatus = theUserDao.createUser(userName); context.isValidationFailed(); if (operationStatus) { - operationMessage = "User " + userName + " created"; } } catch (Exception ex) { - Logger.getAnonymousLogger().severe("Error registering new user "); + LOGGER.error("Error registering new user "); ex.printStackTrace(); } return null; } - public String returnHome() { - return "home"; - } - - /** - * @return the name - */ public String getUserName() { return userName; } - /** - * @param userName the name to set - */ public void setUserName(String userName) { this.userName = userName; } @@ -79,16 +62,10 @@ public class RegistrationBean implements Serializable { return this.theUserDao; } - /** - * @return the operationMessage - */ public String getOperationMessage() { return operationMessage; } - /** - * @param operationMessage the operationMessage to set - */ public void setOperationMessage(String operationMessage) { this.operationMessage = operationMessage; } diff --git a/jsf/src/main/resources/constraints.properties b/jsf/src/main/resources/constraints.properties deleted file mode 100644 index 00b6c57a88..0000000000 --- a/jsf/src/main/resources/constraints.properties +++ /dev/null @@ -1,10 +0,0 @@ -userName.maxLength = 8 -userName.minLength = 4 -password.minLength = 8 -password.maxLength = 12 -zip.length = 5 -password.regexp = ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{4,8}$ -safetext.regexp = ^[a-zA-Z0-9 .-]+$ -zip.regexp = ^\d{5} -security.salt = G0d$3nd -birthdate.format = MM dd yyyy \ No newline at end of file diff --git a/jsf/src/main/resources/logback.xml b/jsf/src/main/resources/logback.xml new file mode 100644 index 0000000000..e9ae1894a6 --- /dev/null +++ b/jsf/src/main/resources/logback.xml @@ -0,0 +1,14 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + \ No newline at end of file diff --git a/jsf/src/main/resources/messages.properties b/jsf/src/main/resources/messages.properties index bb665c259d..41e9622630 100644 --- a/jsf/src/main/resources/messages.properties +++ b/jsf/src/main/resources/messages.properties @@ -1,23 +1,3 @@ -message.unmatchedPasswords = The passwords you have entered do not match message.valueRequired = This value is required -message.invalidPassword = Your passwords must match and must contain at least one each of upper case letters, lower case letters, and digits. -message.invalidDate = The date value supplied is invalid. It should be of the format MM/DD/YYYY -message.invalidZip = Your zip code should be a 5 digit numeric value -message.conversionError = An invalid value was supplied -label.firstName = First Name -label.lastName = Last Name -label.username = Username -label.firstPassword = Password -label.confirmPassword = Confirm Password +message.welcome = Baeldung | Register label.saveButton = Save -label.cancelButton = Cancel -label.returnHomeButton = Return -label.dateOfBirth = Date of Birth -label.city = City -label.street = Street Address -label.zip = Zip Code -label.postal = Postal Code -message.success = Operation Successful -message.failure = Operation Failed -account.success = Account Successfully created -conversion.error = An invalid value was submitted for this field diff --git a/jsf/src/main/webapp/index.xhtml b/jsf/src/main/webapp/index.xhtml index 3fc91ea376..ff10f9c892 100644 --- a/jsf/src/main/webapp/index.xhtml +++ b/jsf/src/main/webapp/index.xhtml @@ -3,22 +3,19 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> - - Baeldung | Register + <h:outputText value="#{msg['message.welcome']}"/> - + - + - + From c76666a9b32d24022c7a5ff77a045616a1f07e74 Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Thu, 26 May 2016 12:57:29 +0200 Subject: [PATCH 031/283] jsf-spring-integration - adding gitignore --- jsf/.gitignore | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 jsf/.gitignore diff --git a/jsf/.gitignore b/jsf/.gitignore new file mode 100644 index 0000000000..d1c20ca0f1 --- /dev/null +++ b/jsf/.gitignore @@ -0,0 +1,2 @@ +/target +*.iml From 193adf82bca63fca388cde2271717c32568619c3 Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Thu, 26 May 2016 14:29:19 +0200 Subject: [PATCH 032/283] jsf-spring-integration - minor refactors --- .../controllers/RegistrationBean.java | 26 +++++----------- jsf/src/main/webapp/WEB-INF/web.xml | 8 ++--- jsf/src/main/webapp/index.xhtml | 31 ++++++++++--------- 3 files changed, 27 insertions(+), 38 deletions(-) diff --git a/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java b/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java index 6d86f04ab1..635e4d48b8 100644 --- a/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java +++ b/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java @@ -10,28 +10,21 @@ import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import java.io.Serializable; - @ManagedBean(name = "registration") @ViewScoped public class RegistrationBean implements Serializable { private static final Logger LOGGER = LoggerFactory.getLogger(RegistrationBean.class); @ManagedProperty(value = "#{userManagementDAO}") - transient private IUserManagementDAO theUserDao; + transient private IUserManagementDAO userDao; private String userName; private String operationMessage; - /** - * Creates a new instance of RegistrationBean - */ - public RegistrationBean() { - } - - public String createNewUser() { + public void createNewUser() { try { LOGGER.info("Creating new user"); FacesContext context = FacesContext.getCurrentInstance(); - boolean operationStatus = theUserDao.createUser(userName); + boolean operationStatus = userDao.createUser(userName); context.isValidationFailed(); if (operationStatus) { operationMessage = "User " + userName + " created"; @@ -39,8 +32,8 @@ public class RegistrationBean implements Serializable { } catch (Exception ex) { LOGGER.error("Error registering new user "); ex.printStackTrace(); + operationMessage = "Error " + userName + " not created"; } - return null; } public String getUserName() { @@ -51,15 +44,12 @@ public class RegistrationBean implements Serializable { this.userName = userName; } - /** - * @param theUserDao the theUserDao to set - */ - public void setTheUserDao(IUserManagementDAO theUserDao) { - this.theUserDao = theUserDao; + public void setUserDao(IUserManagementDAO userDao) { + this.userDao = userDao; } - public IUserManagementDAO getTheUserDao() { - return this.theUserDao; + public IUserManagementDAO getUserDao() { + return this.userDao; } public String getOperationMessage() { diff --git a/jsf/src/main/webapp/WEB-INF/web.xml b/jsf/src/main/webapp/WEB-INF/web.xml index 9345f201ef..3522338919 100644 --- a/jsf/src/main/webapp/WEB-INF/web.xml +++ b/jsf/src/main/webapp/WEB-INF/web.xml @@ -9,12 +9,8 @@ SERVER - - primefaces.PUBLIC_CAPTCHA_KEY - - - 6LdG-84SAAAAALQfp6DuJqd1XLnz3ZlHfhunPPjY - + javax.faces.FACELETS_SKIP_COMMENTS + true Faces Servlet diff --git a/jsf/src/main/webapp/index.xhtml b/jsf/src/main/webapp/index.xhtml index ff10f9c892..b37c864f2c 100644 --- a/jsf/src/main/webapp/index.xhtml +++ b/jsf/src/main/webapp/index.xhtml @@ -2,24 +2,27 @@ + xmlns:h="http://java.sun.com/jsf/html"> <h:outputText value="#{msg['message.welcome']}"/> - - - - - - - - - - - + + + + + + + + + + From ce7c3954175b84d5987835af0f39164fa04befff Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Fri, 27 May 2016 15:49:07 +0200 Subject: [PATCH 033/283] A Gatling load test demo --- gatling-loadtest-demo/.cache-tests | 166 ++++++++++++++++++ gatling-loadtest-demo/.classpath | 32 ++++ gatling-loadtest-demo/.project | 24 +++ gatling-loadtest-demo/pom.xml | 113 ++++++++++++ .../src/test/resources/gatling.conf | 127 ++++++++++++++ .../src/test/resources/logback.xml | 22 +++ .../src/test/resources/recorder.conf | 57 ++++++ .../src/test/scala/Engine.scala | 13 ++ .../src/test/scala/IDEPathHelper.scala | 22 +++ .../src/test/scala/Recorder.scala | 12 ++ .../org/baeldung/RecordedSimulation.scala | 46 +++++ 11 files changed, 634 insertions(+) create mode 100644 gatling-loadtest-demo/.cache-tests create mode 100644 gatling-loadtest-demo/.classpath create mode 100644 gatling-loadtest-demo/.project create mode 100644 gatling-loadtest-demo/pom.xml create mode 100644 gatling-loadtest-demo/src/test/resources/gatling.conf create mode 100644 gatling-loadtest-demo/src/test/resources/logback.xml create mode 100644 gatling-loadtest-demo/src/test/resources/recorder.conf create mode 100644 gatling-loadtest-demo/src/test/scala/Engine.scala create mode 100644 gatling-loadtest-demo/src/test/scala/IDEPathHelper.scala create mode 100644 gatling-loadtest-demo/src/test/scala/Recorder.scala create mode 100644 gatling-loadtest-demo/src/test/scala/org/baeldung/RecordedSimulation.scala diff --git a/gatling-loadtest-demo/.cache-tests b/gatling-loadtest-demo/.cache-tests new file mode 100644 index 0000000000..31b0015eef --- /dev/null +++ b/gatling-loadtest-demo/.cache-tests @@ -0,0 +1,166 @@ +format version: 5 +output mode: +1 items +0 -> multiple +output directories: +2 items +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\resources -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes +compile options: +8 items +0 -> -javabootclasspath +1 -> C:\develop\Java\jdk1.8.0_77\jre\lib\resources.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\jsse.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\jce.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\charsets.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\jfr.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\access-bridge-64.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\cldrdata.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\dnsns.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\jaccess.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\jfxrt.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\localedata.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\nashorn.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunec.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunjce_provider.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunmscapi.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunpkcs11.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\zipfs.jar +2 -> -javaextdirs +3 -> +4 -> -bootclasspath +5 -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar +6 -> -encoding +7 -> UTF-8 +javac options: +0 items +compiler version: +1 items +0 -> 2.11.8 +compile order: +1 items +0 -> Mixed +name hashing: +1 items +0 -> false +products: +9 items +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine$.class +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine$delayedInit$body.class +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine.class +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\IDEPathHelper$.class +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\IDEPathHelper.class +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\org\baeldung\RecordedSimulation.class +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder$.class +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder$delayedInit$body.class +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder.class +binary dependencies: +15 items +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-app\2.2.0\gatling-app-2.2.0.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-http\2.2.0\gatling-http-2.2.0.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-jdbc\2.2.0\gatling-jdbc-2.2.0.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-recorder\2.2.0\gatling-recorder-2.2.0.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar +direct source dependencies: +2 items +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala +direct external dependencies: +0 items +public inherited source dependencies: +0 items +public inherited external dependencies: +0 items +member reference internal dependencies: +0 items +member reference external dependencies: +0 items +inheritance internal dependencies: +0 items +inheritance external dependencies: +0 items +class names: +9 items +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> Engine +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> Engine$ +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> Engine$delayedInit$body +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> IDEPathHelper +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> IDEPathHelper$ +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> org.baeldung.RecordedSimulation +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> Recorder +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> Recorder$ +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> Recorder$delayedInit$body +used names: +0 items +product stamps: +9 items +C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine$.class -> lastModified(1464356690978) +C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine$delayedInit$body.class -> lastModified(1464356690989) +C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine.class -> lastModified(1464356690863) +C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\IDEPathHelper$.class -> lastModified(1464356691030) +C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\IDEPathHelper.class -> lastModified(1464356691005) +C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\org\baeldung\RecordedSimulation.class -> lastModified(1464356691072) +C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder$.class -> lastModified(1464356691045) +C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder$delayedInit$body.class -> lastModified(1464356691049) +C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder.class -> lastModified(1464356691034) +source stamps: +4 items +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> hash(e98bacf89a84be65d2a131fa7e072d4f6ebef89d) +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> hash(20255b66020a40c67db52f8248fab7e3250fc940) +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> hash(1d4aab935ed26aa3fee62aff5bc9d1d2dbc3f776) +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> hash(667da8a9d712f988ed7b14bdfa7b293c76ac3b61) +binary stamps: +8 items +C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -> lastModified(1463581376873) +C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -> lastModified(1460466041763) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-app\2.2.0\gatling-app-2.2.0.jar -> lastModified(1463577683111) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar -> lastModified(1463577434095) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar -> lastModified(1463577425041) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-http\2.2.0\gatling-http-2.2.0.jar -> lastModified(1463577691216) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-jdbc\2.2.0\gatling-jdbc-2.2.0.jar -> lastModified(1463577767127) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-recorder\2.2.0\gatling-recorder-2.2.0.jar -> lastModified(1463577812366) +class names: +8 items +C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -> scala.reflect.ClassTag$ +C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -> java.lang.Object +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-app\2.2.0\gatling-app-2.2.0.jar -> io.gatling.app.Gatling$ +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar -> io.gatling.commons.util.TypeCaster$ +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar -> io.gatling.core.scenario.Simulation +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-http\2.2.0\gatling-http-2.2.0.jar -> io.gatling.http.protocol.HttpProtocolBuilder +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-jdbc\2.2.0\gatling-jdbc-2.2.0.jar -> io.gatling.jdbc.Predef$ +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-recorder\2.2.0\gatling-recorder-2.2.0.jar -> io.gatling.recorder.GatlingRecorder$ +internal apis: +4 items +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> +rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHA7lBuUAHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAAGRW5naW5ldXIAGltMeHNidGkuYXBpLlR5cGVQYXJhbWV0ZXI72W0mDyid8rYCAAB4cAAAAAB+cgAYeHNidGkuYXBpLkRlZmluaXRpb25UeXBlAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAGTW9kdWxldXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAnQAEHNjYWxhLmRlcHJlY2F0ZWR0ABpzY2FsYS5kZXByZWNhdGVkT3ZlcnJpZGluZ3NyABN4c2J0aS5TYWZlTGF6eSRJbXBsO5FPEfRFTMkCAANaAAhiaXRtYXAkMEwAAl90dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEZXZhbHQAEUxzY2FsYS9GdW5jdGlvbjA7eHIAFnhzYnRpLmFwaS5BYnN0cmFjdExhennTd7UBX7vnoAIAAHhwAXNyABN4c2J0aS5hcGkuRW1wdHlUeXBlvP2eRkk7iSQCAAB4cgAUeHNidGkuYXBpLlNpbXBsZVR5cGVyeGKIISO/QAIAAHhyAA54c2J0aS5hcGkuVHlwZT9q2SEWSarKAgAAeHBwc3EAfgAwAXNyABN4c2J0aS5hcGkuU3RydWN0dXJlqar5gJNv2AACAANMAAhkZWNsYXJlZHEAfgAVTAAJaW5oZXJpdGVkcQB+ABVMAAdwYXJlbnRzcQB+ABV4cQB+ADdzcQB+ADABdXEAfgAQAAAAAHBzcQB+ADABdXEAfgAQAAAAAXNyAA14c2J0aS5hcGkuRGVmUr6f4ny0NmkCAAJMAApyZXR1cm5UeXBldAAQTHhzYnRpL2FwaS9UeXBlO1sAD3ZhbHVlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1BhcmFtZXRlckxpc3Q7eHEAfgAWcQB+ACB1cQB+ACEAAAABc3IAFHhzYnRpLmFwaS5Bbm5vdGF0aW9u3g6BovZcCrICAAJbAAlhcmd1bWVudHN0AB9bTHhzYnRpL2FwaS9Bbm5vdGF0aW9uQXJndW1lbnQ7TAAEYmFzZXEAfgBBeHB1cgAfW0x4c2J0aS5hcGkuQW5ub3RhdGlvbkFyZ3VtZW50O1Gdpo84JQ94AgAAeHAAAAABc3IAHHhzYnRpLmFwaS5Bbm5vdGF0aW9uQXJndW1lbnTWRbHYAxsXfAIAAkwABG5hbWVxAH4AHEwABXZhbHVlcQB+ABx4cHQAAHQAKigibWFpbiBzaG91bGQgbm90IGJlIG92ZXJyaWRkZW4iLCIyLjExLjAiKXNyABR4c2J0aS5hcGkuUHJvamVjdGlvbvPSjVTpRaQtAgACTAACaWRxAH4AHEwABnByZWZpeHQAFkx4c2J0aS9hcGkvU2ltcGxlVHlwZTt4cQB+ADZ0ABRkZXByZWNhdGVkT3ZlcnJpZGluZ3NyABN4c2J0aS5hcGkuU2luZ2xldG9u/Kdf+M9W5EYCAAFMAARwYXRodAAQTHhzYnRpL2FwaS9QYXRoO3hxAH4ANnNyAA54c2J0aS5hcGkuUGF0aJs9XAjOpSeEAgABWwAKY29tcG9uZW50c3QAGltMeHNidGkvYXBpL1BhdGhDb21wb25lbnQ7eHB1cgAaW0x4c2J0aS5hcGkuUGF0aENvbXBvbmVudDtD2gl0LWcWdAIAAHhwAAAAAnNyAAx4c2J0aS5hcGkuSWSYMmyLN1PEQAIAAUwAAmlkcQB+ABx4cgAXeHNidGkuYXBpLlBhdGhDb21wb25lbnRfmiJbLoafvAIAAHhwdAAFc2NhbGFzcgAOeHNidGkuYXBpLlRoaXPbCe2mzFpAXAIAAHhxAH4AW3NxAH4AIwB0AARtYWludXEAfgAmAAAAAHNxAH4ATnQABFVuaXRxAH4AVHVyABpbTHhzYnRpLmFwaS5QYXJhbWV0ZXJMaXN0O/XTOh3ys3DuAgAAeHAAAAABc3IAF3hzYnRpLmFwaS5QYXJhbWV0ZXJMaXN01sW8HGRJdOMCAAJaAAppc0ltcGxpY2l0WwAKcGFyYW1ldGVyc3QAHFtMeHNidGkvYXBpL01ldGhvZFBhcmFtZXRlcjt4cAB1cgAcW0x4c2J0aS5hcGkuTWV0aG9kUGFyYW1ldGVyO8+4xV2l3bVtAgAAeHAAAAABc3IAGXhzYnRpLmFwaS5NZXRob2RQYXJhbWV0ZXIfRa4X00mw6gIABFoACmhhc0RlZmF1bHRMAAhtb2RpZmllcnQAHUx4c2J0aS9hcGkvUGFyYW1ldGVyTW9kaWZpZXI7TAAEbmFtZXEAfgAcTAADdHBlcQB+AEF4cAB+cgAbeHNidGkuYXBpLlBhcmFtZXRlck1vZGlmaWVyAAAAAAAAAAASAAB4cQB+ACl0AAVQbGFpbnQABGFyZ3NzcgAXeHNidGkuYXBpLlBhcmFtZXRlcml6ZWQWbO5pA8m7fwIAAkwACGJhc2VUeXBlcQB+AE9bAA10eXBlQXJndW1lbnRzdAARW0x4c2J0aS9hcGkvVHlwZTt4cQB+ADZzcQB+AE50AAVBcnJheXEAfgBUdXIAEVtMeHNidGkuYXBpLlR5cGU7dP+lWnv56UECAAB4cAAAAAFzcQB+AE50AAZTdHJpbmdzcQB+AFJzcQB+AFV1cQB+AFgAAAADc3EAfgBadAAEamF2YXNxAH4AWnQABGxhbmdxAH4AX3BzcQB+ADABdXEAfgB4AAAABHNxAH4ATnQAA0FwcHEAfgBUc3EAfgBOdAALRGVsYXllZEluaXRxAH4AVHNxAH4ATnQABk9iamVjdHEAfgB8c3EAfgBOdAADQW55cQB+AFRwcHVyABRbTHhzYnRpLmFwaS5QYWNrYWdlO1sTGTdwpyehAgAAeHAAAAAAc3IAFXhzYnRpLmFwaS5Db21waWxhdGlvbu364MNq6KBCAgACSgAJc3RhcnRUaW1lWwAHb3V0cHV0c3QAGltMeHNidGkvYXBpL091dHB1dFNldHRpbmc7eHAAAAFU8nXEpnVyABpbTHhzYnRpLmFwaS5PdXRwdXRTZXR0aW5nO39qwvOnh6VCAgAAeHAAAAACc3IAF3hzYnRpLmFwaS5PdXRwdXRTZXR0aW5netmaR3T7HXsCAAJMAA9vdXRwdXREaXJlY3RvcnlxAH4AHEwAD3NvdXJjZURpcmVjdG9yeXEAfgAceHB0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AD1DOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHNjYWxhc3EAfgCUdABCQzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmctbG9hZHRlc3QtZGVtb1x0YXJnZXRcdGVzdC1jbGFzc2VzdABBQzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmctbG9hZHRlc3QtZGVtb1xzcmNcdGVzdFxyZXNvdXJjZXN1cgACW0Ks8xf4BghU4AIAAHhwAAAAFOmLrPiahL5l0qEx+n4HLU9uvvid +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> +rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHCXMg60AHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAANSURFUGF0aEhlbHBlcnVyABpbTHhzYnRpLmFwaS5UeXBlUGFyYW1ldGVyO9ltJg8onfK2AgAAeHAAAAAAfnIAGHhzYnRpLmFwaS5EZWZpbml0aW9uVHlwZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABk1vZHVsZXVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAABzcgATeHNidGkuU2FmZUxhenkkSW1wbDuRTxH0RUzJAgADWgAIYml0bWFwJDBMAAJfdHQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABGV2YWx0ABFMc2NhbGEvRnVuY3Rpb24wO3hyABZ4c2J0aS5hcGkuQWJzdHJhY3RMYXp503e1AV+756ACAAB4cAFzcgATeHNidGkuYXBpLkVtcHR5VHlwZbz9nkZJO4kkAgAAeHIAFHhzYnRpLmFwaS5TaW1wbGVUeXBlcnhiiCEjv0ACAAB4cgAOeHNidGkuYXBpLlR5cGU/atkhFkmqygIAAHhwcHNxAH4ALgFzcgATeHNidGkuYXBpLlN0cnVjdHVyZamq+YCTb9gAAgADTAAIZGVjbGFyZWRxAH4AFUwACWluaGVyaXRlZHEAfgAVTAAHcGFyZW50c3EAfgAVeHEAfgA1c3EAfgAuAXVxAH4AEAAAAABwc3EAfgAuAXVxAH4AEAAAAABwc3EAfgAuAXVyABFbTHhzYnRpLmFwaS5UeXBlO3T/pVp7+elBAgAAeHAAAAACc3IAFHhzYnRpLmFwaS5Qcm9qZWN0aW9u89KNVOlFpC0CAAJMAAJpZHEAfgAcTAAGcHJlZml4dAAWTHhzYnRpL2FwaS9TaW1wbGVUeXBlO3hxAH4ANHQABk9iamVjdHNyABN4c2J0aS5hcGkuU2luZ2xldG9u/Kdf+M9W5EYCAAFMAARwYXRodAAQTHhzYnRpL2FwaS9QYXRoO3hxAH4ANHNyAA54c2J0aS5hcGkuUGF0aJs9XAjOpSeEAgABWwAKY29tcG9uZW50c3QAGltMeHNidGkvYXBpL1BhdGhDb21wb25lbnQ7eHB1cgAaW0x4c2J0aS5hcGkuUGF0aENvbXBvbmVudDtD2gl0LWcWdAIAAHhwAAAAA3NyAAx4c2J0aS5hcGkuSWSYMmyLN1PEQAIAAUwAAmlkcQB+ABx4cgAXeHNidGkuYXBpLlBhdGhDb21wb25lbnRfmiJbLoafvAIAAHhwdAAEamF2YXNxAH4ATXQABGxhbmdzcgAOeHNidGkuYXBpLlRoaXPbCe2mzFpAXAIAAHhxAH4ATnNxAH4AQXQAA0FueXNxAH4ARXNxAH4ASHVxAH4ASwAAAAJzcQB+AE10AAVzY2FsYXEAfgBUcHB1cgAUW0x4c2J0aS5hcGkuUGFja2FnZTtbExk3cKcnoQIAAHhwAAAAAHNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVPJ1xKZ1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5cQB+ABxMAA9zb3VyY2VEaXJlY3RvcnlxAH4AHHhwdABCQzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmctbG9hZHRlc3QtZGVtb1x0YXJnZXRcdGVzdC1jbGFzc2VzdAA9QzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmctbG9hZHRlc3QtZGVtb1xzcmNcdGVzdFxzY2FsYXNxAH4AY3QAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAQUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3RccmVzb3VyY2VzdXIAAltCrPMX+AYIVOACAAB4cAAAABQgJVtmAgpAxn21L4JI+rfjJQ/JQA== +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> +rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHARTQnpAHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAAfb3JnLmJhZWxkdW5nLlJlY29yZGVkU2ltdWxhdGlvbnVyABpbTHhzYnRpLmFwaS5UeXBlUGFyYW1ldGVyO9ltJg8onfK2AgAAeHAAAAAAfnIAGHhzYnRpLmFwaS5EZWZpbml0aW9uVHlwZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQACENsYXNzRGVmdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAHNyABN4c2J0aS5TYWZlTGF6eSRJbXBsO5FPEfRFTMkCAANaAAhiaXRtYXAkMEwAAl90dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEZXZhbHQAEUxzY2FsYS9GdW5jdGlvbjA7eHIAFnhzYnRpLmFwaS5BYnN0cmFjdExhennTd7UBX7vnoAIAAHhwAXNyABN4c2J0aS5hcGkuRW1wdHlUeXBlvP2eRkk7iSQCAAB4cgAUeHNidGkuYXBpLlNpbXBsZVR5cGVyeGKIISO/QAIAAHhyAA54c2J0aS5hcGkuVHlwZT9q2SEWSarKAgAAeHBwc3EAfgAuAXNyABN4c2J0aS5hcGkuU3RydWN0dXJlqar5gJNv2AACAANMAAhkZWNsYXJlZHEAfgAVTAAJaW5oZXJpdGVkcQB+ABVMAAdwYXJlbnRzcQB+ABV4cQB+ADVzcQB+AC4BdXEAfgAQAAAAAHBzcQB+AC4BdXEAfgAQAAAAAHBzcQB+AC4BdXIAEVtMeHNidGkuYXBpLlR5cGU7dP+lWnv56UECAAB4cAAAAANzcgAUeHNidGkuYXBpLlByb2plY3Rpb27z0o1U6UWkLQIAAkwAAmlkcQB+ABxMAAZwcmVmaXh0ABZMeHNidGkvYXBpL1NpbXBsZVR5cGU7eHEAfgA0dAAKU2ltdWxhdGlvbnNyABN4c2J0aS5hcGkuU2luZ2xldG9u/Kdf+M9W5EYCAAFMAARwYXRodAAQTHhzYnRpL2FwaS9QYXRoO3hxAH4ANHNyAA54c2J0aS5hcGkuUGF0aJs9XAjOpSeEAgABWwAKY29tcG9uZW50c3QAGltMeHNidGkvYXBpL1BhdGhDb21wb25lbnQ7eHB1cgAaW0x4c2J0aS5hcGkuUGF0aENvbXBvbmVudDtD2gl0LWcWdAIAAHhwAAAABXNyAAx4c2J0aS5hcGkuSWSYMmyLN1PEQAIAAUwAAmlkcQB+ABx4cgAXeHNidGkuYXBpLlBhdGhDb21wb25lbnRfmiJbLoafvAIAAHhwdAACaW9zcQB+AE10AAdnYXRsaW5nc3EAfgBNdAAEY29yZXNxAH4ATXQACHNjZW5hcmlvc3IADnhzYnRpLmFwaS5UaGlz2wntpsxaQFwCAAB4cQB+AE5zcQB+AEF0AAZPYmplY3RzcQB+AEVzcQB+AEh1cQB+AEsAAAADc3EAfgBNdAAEamF2YXNxAH4ATXQABGxhbmdxAH4AWHNxAH4AQXQAA0FueXNxAH4ARXNxAH4ASHVxAH4ASwAAAAJzcQB+AE10AAVzY2FsYXEAfgBYcHB1cgAUW0x4c2J0aS5hcGkuUGFja2FnZTtbExk3cKcnoQIAAHhwAAAAAnNyABF4c2J0aS5hcGkuUGFja2FnZX5Zj/auzjlYAgABTAAEbmFtZXEAfgAceHB0AAxvcmcuYmFlbGR1bmdzcQB+AGt0AANvcmdzcgAVeHNidGkuYXBpLkNvbXBpbGF0aW9u7frgw2rooEICAAJKAAlzdGFydFRpbWVbAAdvdXRwdXRzdAAaW0x4c2J0aS9hcGkvT3V0cHV0U2V0dGluZzt4cAAAAVTydcSmdXIAGltMeHNidGkuYXBpLk91dHB1dFNldHRpbmc7f2rC86eHpUICAAB4cAAAAAJzcgAXeHNidGkuYXBpLk91dHB1dFNldHRpbmd62ZpHdPsdewIAAkwAD291dHB1dERpcmVjdG9yeXEAfgAcTAAPc291cmNlRGlyZWN0b3J5cQB+ABx4cHQAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAPUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AHV0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AEFDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlc3VyAAJbQqzzF/gGCFTgAgAAeHAAAAAUHUqrk17SaqP+5ir/W8nR0tvD93Y= +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> +rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHD3nMHWAHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAAIUmVjb3JkZXJ1cgAaW0x4c2J0aS5hcGkuVHlwZVBhcmFtZXRlcjvZbSYPKJ3ytgIAAHhwAAAAAH5yABh4c2J0aS5hcGkuRGVmaW5pdGlvblR5cGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAZNb2R1bGV1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAACdAAQc2NhbGEuZGVwcmVjYXRlZHQAGnNjYWxhLmRlcHJlY2F0ZWRPdmVycmlkaW5nc3IAE3hzYnRpLlNhZmVMYXp5JEltcGw7kU8R9EVMyQIAA1oACGJpdG1hcCQwTAACX3R0ABJMamF2YS9sYW5nL09iamVjdDtMAARldmFsdAARTHNjYWxhL0Z1bmN0aW9uMDt4cgAWeHNidGkuYXBpLkFic3RyYWN0TGF6edN3tQFfu+egAgAAeHABc3IAE3hzYnRpLmFwaS5FbXB0eVR5cGW8/Z5GSTuJJAIAAHhyABR4c2J0aS5hcGkuU2ltcGxlVHlwZXJ4YoghI79AAgAAeHIADnhzYnRpLmFwaS5UeXBlP2rZIRZJqsoCAAB4cHBzcQB+ADABc3IAE3hzYnRpLmFwaS5TdHJ1Y3R1cmWpqvmAk2/YAAIAA0wACGRlY2xhcmVkcQB+ABVMAAlpbmhlcml0ZWRxAH4AFUwAB3BhcmVudHNxAH4AFXhxAH4AN3NxAH4AMAF1cQB+ABAAAAAAcHNxAH4AMAF1cQB+ABAAAAABc3IADXhzYnRpLmFwaS5EZWZSvp/ifLQ2aQIAAkwACnJldHVyblR5cGV0ABBMeHNidGkvYXBpL1R5cGU7WwAPdmFsdWVQYXJhbWV0ZXJzdAAaW0x4c2J0aS9hcGkvUGFyYW1ldGVyTGlzdDt4cQB+ABZxAH4AIHVxAH4AIQAAAAFzcgAUeHNidGkuYXBpLkFubm90YXRpb27eDoGi9lwKsgIAAlsACWFyZ3VtZW50c3QAH1tMeHNidGkvYXBpL0Fubm90YXRpb25Bcmd1bWVudDtMAARiYXNlcQB+AEF4cHVyAB9bTHhzYnRpLmFwaS5Bbm5vdGF0aW9uQXJndW1lbnQ7UZ2mjzglD3gCAAB4cAAAAAFzcgAceHNidGkuYXBpLkFubm90YXRpb25Bcmd1bWVudNZFsdgDGxd8AgACTAAEbmFtZXEAfgAcTAAFdmFsdWVxAH4AHHhwdAAAdAAqKCJtYWluIHNob3VsZCBub3QgYmUgb3ZlcnJpZGRlbiIsIjIuMTEuMCIpc3IAFHhzYnRpLmFwaS5Qcm9qZWN0aW9u89KNVOlFpC0CAAJMAAJpZHEAfgAcTAAGcHJlZml4dAAWTHhzYnRpL2FwaS9TaW1wbGVUeXBlO3hxAH4ANnQAFGRlcHJlY2F0ZWRPdmVycmlkaW5nc3IAE3hzYnRpLmFwaS5TaW5nbGV0b278p1/4z1bkRgIAAUwABHBhdGh0ABBMeHNidGkvYXBpL1BhdGg7eHEAfgA2c3IADnhzYnRpLmFwaS5QYXRomz1cCM6lJ4QCAAFbAApjb21wb25lbnRzdAAaW0x4c2J0aS9hcGkvUGF0aENvbXBvbmVudDt4cHVyABpbTHhzYnRpLmFwaS5QYXRoQ29tcG9uZW50O0PaCXQtZxZ0AgAAeHAAAAACc3IADHhzYnRpLmFwaS5JZJgybIs3U8RAAgABTAACaWRxAH4AHHhyABd4c2J0aS5hcGkuUGF0aENvbXBvbmVudF+aIlsuhp+8AgAAeHB0AAVzY2FsYXNyAA54c2J0aS5hcGkuVGhpc9sJ7abMWkBcAgAAeHEAfgBbc3EAfgAjAHQABG1haW51cQB+ACYAAAAAc3EAfgBOdAAEVW5pdHEAfgBUdXIAGltMeHNidGkuYXBpLlBhcmFtZXRlckxpc3Q79dM6HfKzcO4CAAB4cAAAAAFzcgAXeHNidGkuYXBpLlBhcmFtZXRlckxpc3TWxbwcZEl04wIAAloACmlzSW1wbGljaXRbAApwYXJhbWV0ZXJzdAAcW0x4c2J0aS9hcGkvTWV0aG9kUGFyYW1ldGVyO3hwAHVyABxbTHhzYnRpLmFwaS5NZXRob2RQYXJhbWV0ZXI7z7jFXaXdtW0CAAB4cAAAAAFzcgAZeHNidGkuYXBpLk1ldGhvZFBhcmFtZXRlch9FrhfTSbDqAgAEWgAKaGFzRGVmYXVsdEwACG1vZGlmaWVydAAdTHhzYnRpL2FwaS9QYXJhbWV0ZXJNb2RpZmllcjtMAARuYW1lcQB+ABxMAAN0cGVxAH4AQXhwAH5yABt4c2J0aS5hcGkuUGFyYW1ldGVyTW9kaWZpZXIAAAAAAAAAABIAAHhxAH4AKXQABVBsYWludAAEYXJnc3NyABd4c2J0aS5hcGkuUGFyYW1ldGVyaXplZBZs7mkDybt/AgACTAAIYmFzZVR5cGVxAH4AT1sADXR5cGVBcmd1bWVudHN0ABFbTHhzYnRpL2FwaS9UeXBlO3hxAH4ANnNxAH4ATnQABUFycmF5cQB+AFR1cgARW0x4c2J0aS5hcGkuVHlwZTt0/6Vae/npQQIAAHhwAAAAAXNxAH4ATnQABlN0cmluZ3NxAH4AUnNxAH4AVXVxAH4AWAAAAANzcQB+AFp0AARqYXZhc3EAfgBadAAEbGFuZ3EAfgBfcHNxAH4AMAF1cQB+AHgAAAAEc3EAfgBOdAADQXBwcQB+AFRzcQB+AE50AAtEZWxheWVkSW5pdHEAfgBUc3EAfgBOdAAGT2JqZWN0cQB+AHxzcQB+AE50AANBbnlxAH4AVHBwdXIAFFtMeHNidGkuYXBpLlBhY2thZ2U7WxMZN3CnJ6ECAAB4cAAAAABzcgAVeHNidGkuYXBpLkNvbXBpbGF0aW9u7frgw2rooEICAAJKAAlzdGFydFRpbWVbAAdvdXRwdXRzdAAaW0x4c2J0aS9hcGkvT3V0cHV0U2V0dGluZzt4cAAAAVTydcSmdXIAGltMeHNidGkuYXBpLk91dHB1dFNldHRpbmc7f2rC86eHpUICAAB4cAAAAAJzcgAXeHNidGkuYXBpLk91dHB1dFNldHRpbmd62ZpHdPsdewIAAkwAD291dHB1dERpcmVjdG9yeXEAfgAcTAAPc291cmNlRGlyZWN0b3J5cQB+ABx4cHQAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAPUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AJR0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AEFDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlc3VyAAJbQqzzF/gGCFTgAgAAeHAAAAAUZn2oqdcS+YjtexS9+nspPHasO2E= +external apis: +0 items +source infos: +4 items +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> +AAAAAAAAAAA= +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> +AAAAAAAAAAA= +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> +AAAAAAAAAAA= +C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> +AAAAAAAAAAA= +compilations: +17 items +00 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVOxQus91cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +01 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1Iw051cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +02 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1LJxV1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +03 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1LOZV1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +04 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1QxNd1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +05 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1U4651cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +06 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1kjrl1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +07 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1koUh1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +08 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1kwGd1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +09 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1lpUV1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +10 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1oYjh1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +11 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1ofWt1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +12 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1px4J1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +13 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1q7U91cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +14 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVPJoEOF1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +15 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVPJ0QXt1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAPUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AEFDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== +16 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVPJ1xKZ1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAPUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AEFDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== diff --git a/gatling-loadtest-demo/.classpath b/gatling-loadtest-demo/.classpath new file mode 100644 index 0000000000..6026072109 --- /dev/null +++ b/gatling-loadtest-demo/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gatling-loadtest-demo/.project b/gatling-loadtest-demo/.project new file mode 100644 index 0000000000..a5e3b774e0 --- /dev/null +++ b/gatling-loadtest-demo/.project @@ -0,0 +1,24 @@ + + + gatling-loadtest-demo + + + + + + org.scala-ide.sdt.core.scalabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.scala-ide.sdt.core.scalanature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/gatling-loadtest-demo/pom.xml b/gatling-loadtest-demo/pom.xml new file mode 100644 index 0000000000..f5ed1d7de7 --- /dev/null +++ b/gatling-loadtest-demo/pom.xml @@ -0,0 +1,113 @@ + + + 4.0.0 + org.baeldung + gatling-loadtest-demo + 1.0-SNAPSHOT + + + 1.8 + 1.8 + 2.11.7 + UTF-8 + + 2.2.0 + + 3.2.2 + + + + + + io.gatling + gatling-app + ${gatling.version} + + + io.gatling + gatling-recorder + ${gatling.version} + + + io.gatling.highcharts + gatling-charts-highcharts + ${gatling.version} + + + org.scala-lang + scala-library + ${scala.version} + + + + + + + io.gatling.highcharts + gatling-charts-highcharts + + + io.gatling + gatling-app + + + io.gatling + gatling-recorder + + + org.scala-lang + scala-library + + + + + src/test/scala + + + + net.alchim31.maven + scala-maven-plugin + ${scala-maven-plugin.version} + + + + + + net.alchim31.maven + scala-maven-plugin + + + + testCompile + + + + -Ybackend:GenBCode + -Ydelambdafy:method + -target:jvm-1.8 + -deprecation + -feature + -unchecked + -language:implicitConversions + -language:postfixOps + + + + + + + + io.gatling + gatling-maven-plugin + ${gatling.version} + + + test + execute + + + + + + diff --git a/gatling-loadtest-demo/src/test/resources/gatling.conf b/gatling-loadtest-demo/src/test/resources/gatling.conf new file mode 100644 index 0000000000..8bfa0ed366 --- /dev/null +++ b/gatling-loadtest-demo/src/test/resources/gatling.conf @@ -0,0 +1,127 @@ +######################### +# Gatling Configuration # +######################### + +# This file contains all the settings configurable for Gatling with their default values + +gatling { + core { + #outputDirectoryBaseName = "" # The prefix for each simulation result folder (then suffixed by the report generation timestamp) + #runDescription = "" # The description for this simulation run, displayed in each report + #encoding = "utf-8" # Encoding to use throughout Gatling for file and string manipulation + #simulationClass = "" # The FQCN of the simulation to run (when used in conjunction with noReports, the simulation for which assertions will be validated) + #mute = false # When set to true, don't ask for simulation name nor run description (currently only used by Gatling SBT plugin) + #elFileBodiesCacheMaxCapacity = 200 # Cache size for request body EL templates, set to 0 to disable + #rawFileBodiesCacheMaxCapacity = 200 # Cache size for request body Raw templates, set to 0 to disable + #rawFileBodiesInMemoryMaxSize = 1000 # Below this limit, raw file bodies will be cached in memory + + extract { + regex { + #cacheMaxCapacity = 200 # Cache size for the compiled regexes, set to 0 to disable caching + } + xpath { + #cacheMaxCapacity = 200 # Cache size for the compiled XPath queries, set to 0 to disable caching + } + jsonPath { + #cacheMaxCapacity = 200 # Cache size for the compiled jsonPath queries, set to 0 to disable caching + #preferJackson = false # When set to true, prefer Jackson over Boon for JSON-related operations + } + css { + #cacheMaxCapacity = 200 # Cache size for the compiled CSS selectors queries, set to 0 to disable caching + } + } + + directory { + #data = user-files/data # Folder where user's data (e.g. files used by Feeders) is located + #bodies = user-files/bodies # Folder where bodies are located + #simulations = user-files/simulations # Folder where the bundle's simulations are located + #reportsOnly = "" # If set, name of report folder to look for in order to generate its report + #binaries = "" # If set, name of the folder where compiles classes are located: Defaults to GATLING_HOME/target. + #results = results # Name of the folder where all reports folder are located + } + } + charting { + #noReports = false # When set to true, don't generate HTML reports + #maxPlotPerSeries = 1000 # Number of points per graph in Gatling reports + #useGroupDurationMetric = false # Switch group timings from cumulated response time to group duration. + indicators { + #lowerBound = 800 # Lower bound for the requests' response time to track in the reports and the console summary + #higherBound = 1200 # Higher bound for the requests' response time to track in the reports and the console summary + #percentile1 = 50 # Value for the 1st percentile to track in the reports, the console summary and Graphite + #percentile2 = 75 # Value for the 2nd percentile to track in the reports, the console summary and Graphite + #percentile3 = 95 # Value for the 3rd percentile to track in the reports, the console summary and Graphite + #percentile4 = 99 # Value for the 4th percentile to track in the reports, the console summary and Graphite + } + } + http { + #fetchedCssCacheMaxCapacity = 200 # Cache size for CSS parsed content, set to 0 to disable + #fetchedHtmlCacheMaxCapacity = 200 # Cache size for HTML parsed content, set to 0 to disable + #perUserCacheMaxCapacity = 200 # Per virtual user cache size, set to 0 to disable + #warmUpUrl = "http://gatling.io" # The URL to use to warm-up the HTTP stack (blank means disabled) + #enableGA = true # Very light Google Analytics, please support + ssl { + keyStore { + #type = "" # Type of SSLContext's KeyManagers store + #file = "" # Location of SSLContext's KeyManagers store + #password = "" # Password for SSLContext's KeyManagers store + #algorithm = "" # Algorithm used SSLContext's KeyManagers store + } + trustStore { + #type = "" # Type of SSLContext's TrustManagers store + #file = "" # Location of SSLContext's TrustManagers store + #password = "" # Password for SSLContext's TrustManagers store + #algorithm = "" # Algorithm used by SSLContext's TrustManagers store + } + } + ahc { + #keepAlive = true # Allow pooling HTTP connections (keep-alive header automatically added) + #connectTimeout = 60000 # Timeout when establishing a connection + #pooledConnectionIdleTimeout = 60000 # Timeout when a connection stays unused in the pool + #readTimeout = 60000 # Timeout when a used connection stays idle + #maxRetry = 2 # Number of times that a request should be tried again + #requestTimeout = 60000 # Timeout of the requests + #acceptAnyCertificate = true # When set to true, doesn't validate SSL certificates + #httpClientCodecMaxInitialLineLength = 4096 # Maximum length of the initial line of the response (e.g. "HTTP/1.0 200 OK") + #httpClientCodecMaxHeaderSize = 8192 # Maximum size, in bytes, of each request's headers + #httpClientCodecMaxChunkSize = 8192 # Maximum length of the content or each chunk + #webSocketMaxFrameSize = 10240000 # Maximum frame payload size + #sslEnabledProtocols = [TLSv1.2, TLSv1.1, TLSv1] # Array of enabled protocols for HTTPS, if empty use the JDK defaults + #sslEnabledCipherSuites = [] # Array of enabled cipher suites for HTTPS, if empty use the JDK defaults + #sslSessionCacheSize = 0 # SSLSession cache size, set to 0 to use JDK's default + #sslSessionTimeout = 0 # SSLSession timeout in seconds, set to 0 to use JDK's default (24h) + #useOpenSsl = false # if OpenSSL should be used instead of JSSE (requires tcnative jar) + #useNativeTransport = false # if native transport should be used instead of Java NIO (requires netty-transport-native-epoll, currently Linux only) + #usePooledMemory = true # if Gatling should use pooled memory + #tcpNoDelay = true + #soReuseAddress = false + #soLinger = -1 + #soSndBuf = -1 + #soRcvBuf = -1 + } + dns { + #queryTimeout = 5000 # Timeout of each DNS query in millis + #maxQueriesPerResolve = 3 # Maximum allowed number of DNS queries for a given name resolution + } + } + data { + #writers = [console, file] # The list of DataWriters to which Gatling write simulation data (currently supported : console, file, graphite, jdbc) + console { + #light = false # When set to true, displays a light version without detailed request stats + } + file { + #bufferSize = 8192 # FileDataWriter's internal data buffer size, in bytes + } + leak { + #noActivityTimeout = 30 # Period, in seconds, for which Gatling may have no activity before considering a leak may be happening + } + graphite { + #light = false # only send the all* stats + #host = "localhost" # The host where the Carbon server is located + #port = 2003 # The port to which the Carbon server listens to (2003 is default for plaintext, 2004 is default for pickle) + #protocol = "tcp" # The protocol used to send data to Carbon (currently supported : "tcp", "udp") + #rootPathPrefix = "gatling" # The common prefix of all metrics sent to Graphite + #bufferSize = 8192 # GraphiteDataWriter's internal data buffer size, in bytes + #writeInterval = 1 # GraphiteDataWriter's write interval, in seconds + } + } +} diff --git a/gatling-loadtest-demo/src/test/resources/logback.xml b/gatling-loadtest-demo/src/test/resources/logback.xml new file mode 100644 index 0000000000..a8fe714e7d --- /dev/null +++ b/gatling-loadtest-demo/src/test/resources/logback.xml @@ -0,0 +1,22 @@ + + + + + + %d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx + false + + + + + + + + + + + + + + + diff --git a/gatling-loadtest-demo/src/test/resources/recorder.conf b/gatling-loadtest-demo/src/test/resources/recorder.conf new file mode 100644 index 0000000000..f4ba60310b --- /dev/null +++ b/gatling-loadtest-demo/src/test/resources/recorder.conf @@ -0,0 +1,57 @@ +recorder { + core { + className=RecordedSimulation + encoding=utf-8 + harFilePath="" + headless=false + mode=Proxy + outputFolder="C:\\develop\\workspaces\\vjportalWorkspace\\gatling-loadtest-demo\\src\\test\\scala" + package="org.baeldung" + saveConfig=true + thresholdForPauseCreation=100 + } + filters { + blacklist=[ + ".*\\.css", + ".*\\.js", + ".*\\.ico" + ] + filterStrategy=BlacklistFirst + whitelist=[] + } + http { + automaticReferer=true + checkResponseBodies=false + followRedirect=true + inferHtmlResources=true + removeCacheHeaders=true + } + netty { + maxChunkSize=8192 + maxContentLength=100000000 + maxHeaderSize=20000 + maxInitialLineLength=10000 + } + proxy { + https { + certificateAuthority { + certificatePath="" + privateKeyPath="" + } + keyStore { + password="" + path="" + type=JKS + } + mode=SelfSignedCertificate + } + outgoing { + host="" + password="" + port=0 + sslPort=0 + username="" + } + port=8000 + } +} diff --git a/gatling-loadtest-demo/src/test/scala/Engine.scala b/gatling-loadtest-demo/src/test/scala/Engine.scala new file mode 100644 index 0000000000..0ac3abe948 --- /dev/null +++ b/gatling-loadtest-demo/src/test/scala/Engine.scala @@ -0,0 +1,13 @@ +import io.gatling.app.Gatling +import io.gatling.core.config.GatlingPropertiesBuilder + +object Engine extends App { + + val props = new GatlingPropertiesBuilder + props.dataDirectory(IDEPathHelper.dataDirectory.toString) + props.resultsDirectory(IDEPathHelper.resultsDirectory.toString) + props.bodiesDirectory(IDEPathHelper.bodiesDirectory.toString) + props.binariesDirectory(IDEPathHelper.mavenBinariesDirectory.toString) + + Gatling.fromMap(props.build) +} diff --git a/gatling-loadtest-demo/src/test/scala/IDEPathHelper.scala b/gatling-loadtest-demo/src/test/scala/IDEPathHelper.scala new file mode 100644 index 0000000000..32c986a072 --- /dev/null +++ b/gatling-loadtest-demo/src/test/scala/IDEPathHelper.scala @@ -0,0 +1,22 @@ +import java.nio.file.Path + +import io.gatling.commons.util.PathHelper._ + +object IDEPathHelper { + + val gatlingConfUrl: Path = getClass.getClassLoader.getResource("gatling.conf").toURI + val projectRootDir = gatlingConfUrl.ancestor(3) + + val mavenSourcesDirectory = projectRootDir / "src" / "test" / "scala" + val mavenResourcesDirectory = projectRootDir / "src" / "test" / "resources" + val mavenTargetDirectory = projectRootDir / "target" + val mavenBinariesDirectory = mavenTargetDirectory / "test-classes" + + val dataDirectory = mavenResourcesDirectory / "data" + val bodiesDirectory = mavenResourcesDirectory / "bodies" + + val recorderOutputDirectory = mavenSourcesDirectory + val resultsDirectory = mavenTargetDirectory / "gatling" + + val recorderConfigFile = mavenResourcesDirectory / "recorder.conf" +} diff --git a/gatling-loadtest-demo/src/test/scala/Recorder.scala b/gatling-loadtest-demo/src/test/scala/Recorder.scala new file mode 100644 index 0000000000..1372da6d41 --- /dev/null +++ b/gatling-loadtest-demo/src/test/scala/Recorder.scala @@ -0,0 +1,12 @@ +import io.gatling.recorder.GatlingRecorder +import io.gatling.recorder.config.RecorderPropertiesBuilder + +object Recorder extends App { + + val props = new RecorderPropertiesBuilder + props.simulationOutputFolder(IDEPathHelper.recorderOutputDirectory.toString) + props.simulationPackage("org.baeldung") + props.bodiesFolder(IDEPathHelper.bodiesDirectory.toString) + + GatlingRecorder.fromMap(props.build, Some(IDEPathHelper.recorderConfigFile)) +} diff --git a/gatling-loadtest-demo/src/test/scala/org/baeldung/RecordedSimulation.scala b/gatling-loadtest-demo/src/test/scala/org/baeldung/RecordedSimulation.scala new file mode 100644 index 0000000000..553e17e56f --- /dev/null +++ b/gatling-loadtest-demo/src/test/scala/org/baeldung/RecordedSimulation.scala @@ -0,0 +1,46 @@ +package org.baeldung + +import scala.concurrent.duration._ + +import io.gatling.core.Predef._ +import io.gatling.http.Predef._ +import io.gatling.jdbc.Predef._ + +class RecordedSimulation extends Simulation { + + val httpProtocol = http + .baseURL("http://computer-database.gatling.io") + .inferHtmlResources(BlackList(""".*\.css""", """.*\.js""", """.*\.ico"""), WhiteList()) + .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") + .acceptEncodingHeader("gzip, deflate") + .acceptLanguageHeader("it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3") + .userAgentHeader("Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0") + + + + + + val scn = scenario("RecordedSimulation") + .exec(http("request_0") + .get("/")) + .pause(5) + .exec(http("request_1") + .get("/computers?f=amstrad")) + .pause(4) + .exec(http("request_2") + .get("/computers/412")) + .pause(2) + .exec(http("request_3") + .get("/")) + .pause(2) + .exec(http("request_4") + .get("/computers?p=1")) + .pause(1) + .exec(http("request_5") + .get("/computers?p=2")) + .pause(2) + .exec(http("request_6") + .get("/computers?p=3")) + + setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol) +} \ No newline at end of file From b67ecea6312ebbcfc095b8933ee198a0fc0b15da Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 28 May 2016 12:39:17 +0200 Subject: [PATCH 034/283] cleanup --- spring-data-elasticsearch/.classpath | 31 ++++++++ spring-data-elasticsearch/.project | 29 +++++++ .../spring/data/es/config/Config.java | 12 +-- .../spring/data/es/model/Article.java | 14 +--- .../baeldung/spring/data/es/model/Author.java | 4 +- .../data/es/service/ArticleService.java | 6 ++ .../data/es/service/ArticleServiceImpl.java | 2 +- .../data/es/ElasticSearchQueryTest.java | 79 ++++++------------- .../spring/data/es/ElasticSearchTest.java | 22 ++---- 9 files changed, 101 insertions(+), 98 deletions(-) create mode 100644 spring-data-elasticsearch/.classpath create mode 100644 spring-data-elasticsearch/.project diff --git a/spring-data-elasticsearch/.classpath b/spring-data-elasticsearch/.classpath new file mode 100644 index 0000000000..6d7587a819 --- /dev/null +++ b/spring-data-elasticsearch/.classpath @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-elasticsearch/.project b/spring-data-elasticsearch/.project new file mode 100644 index 0000000000..09b9a781ed --- /dev/null +++ b/spring-data-elasticsearch/.project @@ -0,0 +1,29 @@ + + + spring-data-elasticsearch + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java index 3857056b70..0fec9b2a66 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java @@ -19,7 +19,7 @@ import java.nio.file.Paths; @Configuration @EnableElasticsearchRepositories(basePackages = "com.baeldung.spring.data.es.repository") -@ComponentScan(basePackages = {"com.baeldung.spring.data.es.service"}) +@ComponentScan(basePackages = { "com.baeldung.spring.data.es.service" }) public class Config { private static Logger logger = LoggerFactory.getLogger(Config.class); @@ -29,17 +29,11 @@ public class Config { try { Path tmpDir = Files.createTempDirectory(Paths.get(System.getProperty("java.io.tmpdir")), "elasticsearch_data"); - ImmutableSettings.Builder elasticsearchSettings = ImmutableSettings.settingsBuilder() - .put("http.enabled", "false") - .put("path.data", tmpDir.toAbsolutePath().toString()); + ImmutableSettings.Builder elasticsearchSettings = ImmutableSettings.settingsBuilder().put("http.enabled", "false").put("path.data", tmpDir.toAbsolutePath().toString()); logger.debug(tmpDir.toAbsolutePath().toString()); - return new NodeBuilder() - .local(true) - .settings(elasticsearchSettings.build()) - .node() - .client(); + return new NodeBuilder().local(true).settings(elasticsearchSettings.build()).node().client(); } catch (IOException ioex) { logger.error("Cannot create temp dir", ioex); throw new RuntimeException(); diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java index 40db51ac13..3634324dd7 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java @@ -16,12 +16,7 @@ public class Article { @Id private String id; - @MultiField( - mainField = @Field(type = String), - otherFields = { - @NestedField(index = not_analyzed, dotSuffix = "verbatim", type = String) - } - ) + @MultiField(mainField = @Field(type = String), otherFields = { @NestedField(index = not_analyzed, dotSuffix = "verbatim", type = String) }) private String title; @Field(type = Nested) @@ -71,11 +66,6 @@ public class Article { @Override public String toString() { - return "Article{" + - "id='" + id + '\'' + - ", title='" + title + '\'' + - ", authors=" + authors + - ", tags=" + Arrays.toString(tags) + - '}'; + return "Article{" + "id='" + id + '\'' + ", title='" + title + '\'' + ", authors=" + authors + ", tags=" + Arrays.toString(tags) + '}'; } } diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java index c335c4534a..38f50e1614 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Author.java @@ -21,8 +21,6 @@ public class Author { @Override public String toString() { - return "Author{" + - "name='" + name + '\'' + - '}'; + return "Author{" + "name='" + name + '\'' + '}'; } } diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java index 760bad4b01..b5a8fde633 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleService.java @@ -6,10 +6,16 @@ import org.springframework.data.domain.Pageable; public interface ArticleService { Article save(Article article); + Article findOne(String id); + Iterable
findAll(); + Page
findByAuthorName(String name, Pageable pageable); + Page
findByAuthorNameUsingCustomQuery(String name, Pageable pageable); + long count(); + void delete(Article article); } diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java index 3bb6e6a0e0..0ea922bdd3 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/service/ArticleServiceImpl.java @@ -49,6 +49,6 @@ public class ArticleServiceImpl implements ArticleService { @Override public void delete(Article article) { - articleRepository.delete(article); + articleRepository.delete(article); } } diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java index fbc18cbb4c..52695fcfd4 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java @@ -40,7 +40,7 @@ import static org.elasticsearch.index.query.QueryBuilders.*; import static org.junit.Assert.assertEquals; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = {Config.class}, loader = AnnotationConfigContextLoader.class) +@ContextConfiguration(classes = { Config.class }, loader = AnnotationConfigContextLoader.class) public class ElasticSearchQueryTest { @Autowired @@ -85,56 +85,40 @@ public class ElasticSearchQueryTest { @Test public void givenFullTitle_whenRunMatchQuery_thenDocIsFound() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(matchQuery("title", "Search engines").operator(AND)) - .build(); - List
articles = elasticsearchTemplate - .queryForList(searchQuery, Article.class); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(AND)).build(); + List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); } @Test public void givenOneTermFromTitle_whenRunMatchQuery_thenDocIsFound() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(matchQuery("title", "Engines Solutions")) - .build(); - List
articles = elasticsearchTemplate - .queryForList(searchQuery, Article.class); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Engines Solutions")).build(); + List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); assertEquals("Search engines", articles.get(0).getTitle()); } @Test public void givenPartTitle_whenRunMatchQuery_thenDocIsFound() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(matchQuery("title", "elasticsearch data")) - .build(); - List
articles = elasticsearchTemplate - .queryForList(searchQuery, Article.class); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "elasticsearch data")).build(); + List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(3, articles.size()); } @Test public void givenFullTitle_whenRunMatchQueryOnVerbatimField_thenDocIsFound() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(matchQuery("title.verbatim", "Second Article About Elasticsearch")) - .build(); - List
articles = elasticsearchTemplate - .queryForList(searchQuery, Article.class); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title.verbatim", "Second Article About Elasticsearch")).build(); + List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); - searchQuery = new NativeSearchQueryBuilder() - .withQuery(matchQuery("title.verbatim", "Second Article About")) - .build(); - articles = elasticsearchTemplate - .queryForList(searchQuery, Article.class); + searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title.verbatim", "Second Article About")).build(); + articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(0, articles.size()); } @Test public void givenNestedObject_whenQueryByAuthorsName_thenFoundArticlesByThatAuthor() { - QueryBuilder builder = nestedQuery("authors", - boolQuery().must(termQuery("authors.name", "smith"))); + QueryBuilder builder = nestedQuery("authors", boolQuery().must(termQuery("authors.name", "smith"))); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build(); List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); @@ -145,24 +129,20 @@ public class ElasticSearchQueryTest { @Test public void givenAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTokenCountsSeparately() { TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("title"); - SearchResponse response = client.prepareSearch("blog").setTypes("article") - .addAggregation(aggregation).execute().actionGet(); + SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation).execute().actionGet(); Map results = response.getAggregations().asMap(); StringTerms topTags = (StringTerms) results.get("top_tags"); List keys = topTags.getBuckets().stream().map(b -> b.getKey()).collect(toList()); Collections.sort(keys); - assertEquals(asList("about", "article", "data", "elasticsearch", - "engines", "search", "second", "spring", "tutorial"), keys); + assertEquals(asList("about", "article", "data", "elasticsearch", "engines", "search", "second", "spring", "tutorial"), keys); } @Test public void givenNotAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTermCountsIndividually() { - TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("tags") - .order(Terms.Order.aggregation("_count", false)); - SearchResponse response = client.prepareSearch("blog").setTypes("article") - .addAggregation(aggregation).execute().actionGet(); + TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("tags").order(Terms.Order.aggregation("_count", false)); + SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation).execute().actionGet(); Map results = response.getAggregations().asMap(); StringTerms topTags = (StringTerms) results.get("top_tags"); @@ -173,39 +153,24 @@ public class ElasticSearchQueryTest { @Test public void givenNotExactPhrase_whenUseSlop_thenQueryMatches() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(matchPhraseQuery("title", "spring elasticsearch").slop(1)) - .build(); - List
articles = elasticsearchTemplate - .queryForList(searchQuery, Article.class); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchPhraseQuery("title", "spring elasticsearch").slop(1)).build(); + List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); } @Test public void givenPhraseWithType_whenUseFuzziness_thenQueryMatches() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(matchQuery("title", "spring date elasticserch") - .operator(AND) - .fuzziness(Fuzziness.ONE) - .prefixLength(3)) - .build(); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "spring date elasticserch").operator(AND).fuzziness(Fuzziness.ONE).prefixLength(3)).build(); - List
articles = elasticsearchTemplate - .queryForList(searchQuery, Article.class); + List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); } @Test public void givenMultimatchQuery_whenDoSearch_thenAllProvidedFieldsMatch() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(multiMatchQuery("tutorial") - .field("title") - .field("tags") - .type(MultiMatchQueryBuilder.Type.BEST_FIELDS)) - .build(); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(multiMatchQuery("tutorial").field("title").field("tags").type(MultiMatchQueryBuilder.Type.BEST_FIELDS)).build(); - List
articles = elasticsearchTemplate - .queryForList(searchQuery, Article.class); + List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(2, articles.size()); } } diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java index 7b48772d3f..37af9c36fa 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java @@ -27,7 +27,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = {Config.class}, loader = AnnotationConfigContextLoader.class) +@ContextConfiguration(classes = { Config.class }, loader = AnnotationConfigContextLoader.class) public class ElasticSearchTest { @Autowired @@ -59,8 +59,7 @@ public class ElasticSearchTest { @Test public void givenArticleService_whenSaveArticle_thenIdIsAssigned() { - List authors = asList( - new Author("John Smith"), johnDoe); + List authors = asList(new Author("John Smith"), johnDoe); Article article = new Article("Making Search Elastic"); article.setAuthors(authors); @@ -83,13 +82,10 @@ public class ElasticSearchTest { assertEquals(3L, articleByAuthorName.getTotalElements()); } - @Test public void givenPersistedArticles_whenUseRegexQuery_thenRightArticlesFound() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withFilter(regexpFilter("title", ".*data.*")) - .build(); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withFilter(regexpFilter("title", ".*data.*")).build(); List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); @@ -97,9 +93,7 @@ public class ElasticSearchTest { @Test public void givenSavedDoc_whenTitleUpdated_thenCouldFindByUpdatedTitle() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(fuzzyQuery("title", "serch")) - .build(); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fuzzyQuery("title", "serch")).build(); List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); @@ -117,9 +111,7 @@ public class ElasticSearchTest { final String articleTitle = "Spring Data Elasticsearch"; - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(matchQuery("title", articleTitle).minimumShouldMatch("75%")) - .build(); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", articleTitle).minimumShouldMatch("75%")).build(); List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); final long count = articleService.count(); @@ -131,9 +123,7 @@ public class ElasticSearchTest { @Test public void givenSavedDoc_whenOneTermMatches_thenFindByTitle() { - SearchQuery searchQuery = new NativeSearchQueryBuilder() - .withQuery(matchQuery("title", "Search engines").operator(AND)) - .build(); + SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(AND)).build(); List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); } From 65e423c0d74361a4977e304ed36e7b115cce9326 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 28 May 2016 13:05:56 +0200 Subject: [PATCH 035/283] upgrade to elastic search 2 --- spring-data-elasticsearch/pom.xml | 7 +- .../spring/data/es/config/Config.java | 18 ++-- .../spring/data/es/model/Article.java | 17 ++-- .../data/es/ElasticSearchQueryTest.java | 88 ++++++++++--------- .../spring/data/es/ElasticSearchTest.java | 50 ++++++----- 5 files changed, 96 insertions(+), 84 deletions(-) diff --git a/spring-data-elasticsearch/pom.xml b/spring-data-elasticsearch/pom.xml index 27fb521dbc..ab955b4e13 100644 --- a/spring-data-elasticsearch/pom.xml +++ b/spring-data-elasticsearch/pom.xml @@ -18,7 +18,7 @@ 4.11 1.7.12 1.1.3 - 1.3.2.RELEASE + 2.0.0.RELEASE @@ -44,6 +44,11 @@ spring-data-elasticsearch ${elasticsearch.version} + net.java.dev.jna + jna + 4.1.0 + test + org.slf4j slf4j-api diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java index 0fec9b2a66..4e39822c65 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java @@ -1,7 +1,12 @@ package com.baeldung.spring.data.es.config; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + import org.elasticsearch.client.Client; -import org.elasticsearch.common.settings.ImmutableSettings; +import org.elasticsearch.common.settings.Settings; import org.elasticsearch.node.NodeBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -12,11 +17,6 @@ import org.springframework.data.elasticsearch.core.ElasticsearchOperations; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; - @Configuration @EnableElasticsearchRepositories(basePackages = "com.baeldung.spring.data.es.repository") @ComponentScan(basePackages = { "com.baeldung.spring.data.es.service" }) @@ -27,14 +27,14 @@ public class Config { @Bean public Client client() { try { - Path tmpDir = Files.createTempDirectory(Paths.get(System.getProperty("java.io.tmpdir")), "elasticsearch_data"); + final Path tmpDir = Files.createTempDirectory(Paths.get(System.getProperty("java.io.tmpdir")), "elasticsearch_data"); - ImmutableSettings.Builder elasticsearchSettings = ImmutableSettings.settingsBuilder().put("http.enabled", "false").put("path.data", tmpDir.toAbsolutePath().toString()); + final Settings.Builder elasticsearchSettings = Settings.settingsBuilder().put("http.enabled", "false").put("path.data", tmpDir.toAbsolutePath().toString()).put("path.home", "/usr/local/Cellar/elasticsearch/2.3.2"); logger.debug(tmpDir.toAbsolutePath().toString()); return new NodeBuilder().local(true).settings(elasticsearchSettings.build()).node().client(); - } catch (IOException ioex) { + } catch (final IOException ioex) { logger.error("Cannot create temp dir", ioex); throw new RuntimeException(); } diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java index 3634324dd7..01330a6c9c 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/model/Article.java @@ -1,22 +1,25 @@ package com.baeldung.spring.data.es.model; -import org.springframework.data.annotation.Id; -import org.springframework.data.elasticsearch.annotations.*; - -import java.util.Arrays; -import java.util.List; - import static org.springframework.data.elasticsearch.annotations.FieldIndex.not_analyzed; import static org.springframework.data.elasticsearch.annotations.FieldType.Nested; import static org.springframework.data.elasticsearch.annotations.FieldType.String; +import java.util.Arrays; +import java.util.List; + +import org.springframework.data.annotation.Id; +import org.springframework.data.elasticsearch.annotations.Document; +import org.springframework.data.elasticsearch.annotations.Field; +import org.springframework.data.elasticsearch.annotations.InnerField; +import org.springframework.data.elasticsearch.annotations.MultiField; + @Document(indexName = "blog", type = "article") public class Article { @Id private String id; - @MultiField(mainField = @Field(type = String), otherFields = { @NestedField(index = not_analyzed, dotSuffix = "verbatim", type = String) }) + @MultiField(mainField = @Field(type = String), otherFields = { @InnerField(index = not_analyzed, suffix = "verbatim", type = String) }) private String title; @Field(type = Nested) diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java index 52695fcfd4..1551d6442e 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchQueryTest.java @@ -1,12 +1,20 @@ package com.baeldung.spring.data.es; -import com.baeldung.spring.data.es.config.Config; -import com.baeldung.spring.data.es.model.Article; -import com.baeldung.spring.data.es.model.Author; -import com.baeldung.spring.data.es.service.ArticleService; -import org.elasticsearch.action.ActionFuture; -import org.elasticsearch.action.index.IndexRequest; -import org.elasticsearch.action.index.IndexResponse; +import static java.util.Arrays.asList; +import static java.util.stream.Collectors.toList; +import static org.elasticsearch.index.query.MatchQueryBuilder.Operator.AND; +import static org.elasticsearch.index.query.QueryBuilders.boolQuery; +import static org.elasticsearch.index.query.QueryBuilders.matchPhraseQuery; +import static org.elasticsearch.index.query.QueryBuilders.matchQuery; +import static org.elasticsearch.index.query.QueryBuilders.multiMatchQuery; +import static org.elasticsearch.index.query.QueryBuilders.nestedQuery; +import static org.elasticsearch.index.query.QueryBuilders.termQuery; +import static org.junit.Assert.assertEquals; + +import java.util.Collections; +import java.util.List; +import java.util.Map; + import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.common.unit.Fuzziness; @@ -28,16 +36,10 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.concurrent.TimeUnit; - -import static java.util.Arrays.asList; -import static java.util.stream.Collectors.toList; -import static org.elasticsearch.index.query.MatchQueryBuilder.Operator.AND; -import static org.elasticsearch.index.query.QueryBuilders.*; -import static org.junit.Assert.assertEquals; +import com.baeldung.spring.data.es.config.Config; +import com.baeldung.spring.data.es.model.Article; +import com.baeldung.spring.data.es.model.Author; +import com.baeldung.spring.data.es.service.ArticleService; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Config.class }, loader = AnnotationConfigContextLoader.class) @@ -60,7 +62,7 @@ public class ElasticSearchQueryTest { elasticsearchTemplate.deleteIndex(Article.class); elasticsearchTemplate.createIndex(Article.class); elasticsearchTemplate.putMapping(Article.class); - elasticsearchTemplate.refresh(Article.class, true); + elasticsearchTemplate.refresh(Article.class); Article article = new Article("Spring Data Elasticsearch"); article.setAuthors(asList(johnSmith, johnDoe)); @@ -85,23 +87,23 @@ public class ElasticSearchQueryTest { @Test public void givenFullTitle_whenRunMatchQuery_thenDocIsFound() { - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(AND)).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(AND)).build(); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); } @Test public void givenOneTermFromTitle_whenRunMatchQuery_thenDocIsFound() { - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Engines Solutions")).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Engines Solutions")).build(); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); assertEquals("Search engines", articles.get(0).getTitle()); } @Test public void givenPartTitle_whenRunMatchQuery_thenDocIsFound() { - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "elasticsearch data")).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "elasticsearch data")).build(); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(3, articles.size()); } @@ -118,59 +120,59 @@ public class ElasticSearchQueryTest { @Test public void givenNestedObject_whenQueryByAuthorsName_thenFoundArticlesByThatAuthor() { - QueryBuilder builder = nestedQuery("authors", boolQuery().must(termQuery("authors.name", "smith"))); + final QueryBuilder builder = nestedQuery("authors", boolQuery().must(termQuery("authors.name", "smith"))); - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build(); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(2, articles.size()); } @Test public void givenAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTokenCountsSeparately() { - TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("title"); - SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation).execute().actionGet(); + final TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("title"); + final SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation).execute().actionGet(); - Map results = response.getAggregations().asMap(); - StringTerms topTags = (StringTerms) results.get("top_tags"); + final Map results = response.getAggregations().asMap(); + final StringTerms topTags = (StringTerms) results.get("top_tags"); - List keys = topTags.getBuckets().stream().map(b -> b.getKey()).collect(toList()); + final List keys = topTags.getBuckets().stream().map(b -> b.getKeyAsString()).collect(toList()); Collections.sort(keys); assertEquals(asList("about", "article", "data", "elasticsearch", "engines", "search", "second", "spring", "tutorial"), keys); } @Test public void givenNotAnalyzedQuery_whenMakeAggregationOnTermCount_thenEachTermCountsIndividually() { - TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("tags").order(Terms.Order.aggregation("_count", false)); - SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation).execute().actionGet(); + final TermsBuilder aggregation = AggregationBuilders.terms("top_tags").field("tags").order(Terms.Order.aggregation("_count", false)); + final SearchResponse response = client.prepareSearch("blog").setTypes("article").addAggregation(aggregation).execute().actionGet(); - Map results = response.getAggregations().asMap(); - StringTerms topTags = (StringTerms) results.get("top_tags"); + final Map results = response.getAggregations().asMap(); + final StringTerms topTags = (StringTerms) results.get("top_tags"); - List keys = topTags.getBuckets().stream().map(b -> b.getKey()).collect(toList()); + final List keys = topTags.getBuckets().stream().map(b -> b.getKeyAsString()).collect(toList()); assertEquals(asList("elasticsearch", "spring data", "search engines", "tutorial"), keys); } @Test public void givenNotExactPhrase_whenUseSlop_thenQueryMatches() { - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchPhraseQuery("title", "spring elasticsearch").slop(1)).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchPhraseQuery("title", "spring elasticsearch").slop(1)).build(); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); } @Test public void givenPhraseWithType_whenUseFuzziness_thenQueryMatches() { - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "spring date elasticserch").operator(AND).fuzziness(Fuzziness.ONE).prefixLength(3)).build(); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "spring date elasticserch").operator(AND).fuzziness(Fuzziness.ONE).prefixLength(3)).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); } @Test public void givenMultimatchQuery_whenDoSearch_thenAllProvidedFieldsMatch() { - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(multiMatchQuery("tutorial").field("title").field("tags").type(MultiMatchQueryBuilder.Type.BEST_FIELDS)).build(); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(multiMatchQuery("tutorial").field("title").field("tags").type(MultiMatchQueryBuilder.Type.BEST_FIELDS)).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(2, articles.size()); } } diff --git a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java index 37af9c36fa..e10b5f48d7 100644 --- a/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java +++ b/spring-data-elasticsearch/src/test/java/com/baeldung/spring/data/es/ElasticSearchTest.java @@ -1,9 +1,15 @@ package com.baeldung.spring.data.es; -import com.baeldung.spring.data.es.config.Config; -import com.baeldung.spring.data.es.model.Article; -import com.baeldung.spring.data.es.model.Author; -import com.baeldung.spring.data.es.service.ArticleService; +import static java.util.Arrays.asList; +import static org.elasticsearch.index.query.MatchQueryBuilder.Operator.AND; +import static org.elasticsearch.index.query.QueryBuilders.fuzzyQuery; +import static org.elasticsearch.index.query.QueryBuilders.matchQuery; +import static org.elasticsearch.index.query.QueryBuilders.regexpQuery; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.List; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -17,14 +23,10 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import java.util.List; - -import static java.util.Arrays.asList; -import static org.elasticsearch.index.query.FilterBuilders.regexpFilter; -import static org.elasticsearch.index.query.MatchQueryBuilder.Operator.AND; -import static org.elasticsearch.index.query.QueryBuilders.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; +import com.baeldung.spring.data.es.config.Config; +import com.baeldung.spring.data.es.model.Article; +import com.baeldung.spring.data.es.model.Author; +import com.baeldung.spring.data.es.service.ArticleService; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { Config.class }, loader = AnnotationConfigContextLoader.class) @@ -59,7 +61,7 @@ public class ElasticSearchTest { @Test public void givenArticleService_whenSaveArticle_thenIdIsAssigned() { - List authors = asList(new Author("John Smith"), johnDoe); + final List authors = asList(new Author("John Smith"), johnDoe); Article article = new Article("Making Search Elastic"); article.setAuthors(authors); @@ -71,34 +73,34 @@ public class ElasticSearchTest { @Test public void givenPersistedArticles_whenSearchByAuthorsName_thenRightFound() { - Page
articleByAuthorName = articleService.findByAuthorName(johnSmith.getName(), new PageRequest(0, 10)); + final Page
articleByAuthorName = articleService.findByAuthorName(johnSmith.getName(), new PageRequest(0, 10)); assertEquals(2L, articleByAuthorName.getTotalElements()); } @Test public void givenCustomQuery_whenSearchByAuthorsName_thenArticleIsFound() { - Page
articleByAuthorName = articleService.findByAuthorNameUsingCustomQuery("John Smith", new PageRequest(0, 10)); + final Page
articleByAuthorName = articleService.findByAuthorNameUsingCustomQuery("John Smith", new PageRequest(0, 10)); assertEquals(3L, articleByAuthorName.getTotalElements()); } @Test public void givenPersistedArticles_whenUseRegexQuery_thenRightArticlesFound() { - SearchQuery searchQuery = new NativeSearchQueryBuilder().withFilter(regexpFilter("title", ".*data.*")).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withFilter(regexpQuery("title", ".*data.*")).build(); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); } @Test public void givenSavedDoc_whenTitleUpdated_thenCouldFindByUpdatedTitle() { - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fuzzyQuery("title", "serch")).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(fuzzyQuery("title", "serch")).build(); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); - Article article = articles.get(0); + final Article article = articles.get(0); final String newTitle = "Getting started with Search Engines"; article.setTitle(newTitle); articleService.save(article); @@ -111,8 +113,8 @@ public class ElasticSearchTest { final String articleTitle = "Spring Data Elasticsearch"; - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", articleTitle).minimumShouldMatch("75%")).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", articleTitle).minimumShouldMatch("75%")).build(); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); final long count = articleService.count(); @@ -123,8 +125,8 @@ public class ElasticSearchTest { @Test public void givenSavedDoc_whenOneTermMatches_thenFindByTitle() { - SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(AND)).build(); - List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); + final SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(matchQuery("title", "Search engines").operator(AND)).build(); + final List
articles = elasticsearchTemplate.queryForList(searchQuery, Article.class); assertEquals(1, articles.size()); } } From ae11d34b59939df59223c6a7968abaeacbc70ce6 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 28 May 2016 20:03:41 +0200 Subject: [PATCH 036/283] minor cleanup --- .../com/baeldung/spring/data/es/config/Config.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java index 4e39822c65..f93999a1cc 100644 --- a/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java +++ b/spring-data-elasticsearch/src/main/java/com/baeldung/spring/data/es/config/Config.java @@ -10,6 +10,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.node.NodeBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -22,6 +23,9 @@ import org.springframework.data.elasticsearch.repository.config.EnableElasticsea @ComponentScan(basePackages = { "com.baeldung.spring.data.es.service" }) public class Config { + @Value("${elasticsearch.home:/usr/local/Cellar/elasticsearch/2.3.2}") + private String elasticsearchHome; + private static Logger logger = LoggerFactory.getLogger(Config.class); @Bean @@ -29,7 +33,13 @@ public class Config { try { final Path tmpDir = Files.createTempDirectory(Paths.get(System.getProperty("java.io.tmpdir")), "elasticsearch_data"); - final Settings.Builder elasticsearchSettings = Settings.settingsBuilder().put("http.enabled", "false").put("path.data", tmpDir.toAbsolutePath().toString()).put("path.home", "/usr/local/Cellar/elasticsearch/2.3.2"); + // @formatter:off + + final Settings.Builder elasticsearchSettings = + Settings.settingsBuilder().put("http.enabled", "false") + .put("path.data", tmpDir.toAbsolutePath().toString()) + .put("path.home", elasticsearchHome); + // @formatter:on logger.debug(tmpDir.toAbsolutePath().toString()); From b44cf0d081c159ae6cdcf40918a4e5cad3d26335 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 28 May 2016 20:09:43 +0200 Subject: [PATCH 037/283] minor fix --- spring-data-elasticsearch/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-data-elasticsearch/pom.xml b/spring-data-elasticsearch/pom.xml index ab955b4e13..3a6e330564 100644 --- a/spring-data-elasticsearch/pom.xml +++ b/spring-data-elasticsearch/pom.xml @@ -18,7 +18,7 @@ 4.11 1.7.12 1.1.3 - 2.0.0.RELEASE + 2.0.1.RELEASE From db9ecdb2392f5a7f4bc300be063a5c970644b1a5 Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Sun, 29 May 2016 14:02:06 +0700 Subject: [PATCH 038/283] introduction to wiremock --- .../wiremock/introduction/JUnitManaged.java | 96 ++++++++++++++++--- 1 file changed, 85 insertions(+), 11 deletions(-) diff --git a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java index 9fef6017c1..6f1ad640cb 100644 --- a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java +++ b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java @@ -1,12 +1,17 @@ package com.baeldung.rest.wiremock.introduction; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.configureFor; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; import static com.github.tomakehurst.wiremock.client.WireMock.get; import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; +import static com.github.tomakehurst.wiremock.client.WireMock.matching; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; import static com.github.tomakehurst.wiremock.client.WireMock.verify; import static org.junit.Assert.assertEquals; @@ -16,6 +21,8 @@ import java.util.Scanner; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.junit.Rule; @@ -28,14 +35,13 @@ public class JUnitManaged { public WireMockRule wireMockRule = new WireMockRule(); @Test - public void givenJUnitManagedServer_whenStubbingURL_thenCorrect() throws IOException { - configureFor("localhost", 8080); + public void givenJUnitManagedServer_whenMatchingURL_thenCorrect() throws IOException { stubFor(get(urlPathMatching("/baeldung/.*")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody("\"testing-library\": \"WireMock\""))); CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); HttpResponse httpResponse = httpClient.execute(request); - String stringResponse = convertResponseToString(httpResponse); + String stringResponse = convertHttpResponseToString(httpResponse); verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); assertEquals(200, httpResponse.getStatusLine().getStatusCode()); @@ -43,11 +49,79 @@ public class JUnitManaged { assertEquals("\"testing-library\": \"WireMock\"", stringResponse); } - private String convertResponseToString(HttpResponse response) throws IOException { - InputStream responseStream = response.getEntity().getContent(); - Scanner scanner = new Scanner(responseStream, "UTF-8"); - String stringResponse = scanner.useDelimiter("\\Z").next(); - scanner.close(); - return stringResponse; + @Test + public void givenJUnitManagedServer_whenMatchingHeaders_thenCorrect() throws IOException { + stubFor(get(urlPathEqualTo("/baeldung/wiremock")).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503).withBody("!!! Service Unavailable !!!"))); + + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); + request.addHeader("Accept", "text/xml"); + HttpResponse httpResponse = httpClient.execute(request); + String stringResponse = convertHttpResponseToString(httpResponse); + + verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + assertEquals(503, httpResponse.getStatusLine().getStatusCode()); + assertEquals("!!! Service Unavailable !!!", stringResponse); } -} + + // @Test + public void givenJUnitManagedServer_whenMatchingBody_thenCorrect() throws IOException { + stubFor(post(urlEqualTo("/baeldung/wiremock")).withHeader("Content-Type", equalTo("application/json")).withRequestBody(containing("\"testing-library\": \"WireMock\"")).withRequestBody(containing("\"creator\": \"Tom Akehurst\"")) + .withRequestBody(containing("\"website\": \"wiremock.org\"")).willReturn(aResponse().withStatus(200))); + + InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("wiremock_intro.json"); + String jsonString = convertInputStreamToString(jsonInputStream); + StringEntity entity = new StringEntity(jsonString); + + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpPost request = new HttpPost("http://localhost:8080/baeldung/wiremock"); + + request.addHeader("Content-Type", "application/json"); + request.setEntity(entity); + HttpResponse response = httpClient.execute(request); + + assertEquals(200, response.getStatusLine().getStatusCode()); + verify(postRequestedFor(urlEqualTo("/baeldung/wiremock")).withHeader("Content-Type", equalTo("application/json"))); + } + + @Test + public void givenJUnitManagedServer_whenNotUsingPriority_thenCorrect() throws IOException { + stubFor(get(urlPathMatching("/baeldung/.*")).willReturn(aResponse().withStatus(200))); + stubFor(get(urlPathEqualTo("/baeldung/wiremock")).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503))); + + HttpResponse httpResponse = generateClientAndReceiveResponseForPriorityTests(); + + verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + assertEquals(503, httpResponse.getStatusLine().getStatusCode()); + } + + @Test + public void givenJUnitManagedServer_whenUsingPriority_thenCorrect() throws IOException { + stubFor(get(urlPathMatching("/baeldung/.*")).atPriority(1).willReturn(aResponse().withStatus(200))); + stubFor(get(urlPathEqualTo("/baeldung/wiremock")).atPriority(2).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503))); + + HttpResponse httpResponse = generateClientAndReceiveResponseForPriorityTests(); + + verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + assertEquals(200, httpResponse.getStatusLine().getStatusCode()); + } + + private String convertHttpResponseToString(HttpResponse httpResponse) throws IOException { + InputStream inputStream = httpResponse.getEntity().getContent(); + return convertInputStreamToString(inputStream); + } + + private String convertInputStreamToString(InputStream inputStream) { + Scanner scanner = new Scanner(inputStream, "UTF-8"); + String string = scanner.useDelimiter("\\Z").next(); + scanner.close(); + return string; + } + + private HttpResponse generateClientAndReceiveResponseForPriorityTests() throws IOException { + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); + request.addHeader("Accept", "text/xml"); + return httpClient.execute(request); + } +} \ No newline at end of file From 1cf09ba2a8b8f0d14b3c218b66af54f43dd5cccd Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Sun, 29 May 2016 23:48:59 +0700 Subject: [PATCH 039/283] minor fixes --- .../rest/wiremock/introduction/JUnitManaged.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java index 6f1ad640cb..f6a46256ac 100644 --- a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java +++ b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java @@ -51,20 +51,21 @@ public class JUnitManaged { @Test public void givenJUnitManagedServer_whenMatchingHeaders_thenCorrect() throws IOException { - stubFor(get(urlPathEqualTo("/baeldung/wiremock")).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503).withBody("!!! Service Unavailable !!!"))); + stubFor(get(urlPathEqualTo("/baeldung/wiremock")).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503).withHeader("Content-Type", "text/html").withBody("!!! Service Unavailable !!!"))); CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); - request.addHeader("Accept", "text/xml"); + request.addHeader("Accept", "text/html"); HttpResponse httpResponse = httpClient.execute(request); String stringResponse = convertHttpResponseToString(httpResponse); verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); assertEquals(503, httpResponse.getStatusLine().getStatusCode()); + assertEquals("text/html", httpResponse.getFirstHeader("Content-Type").getValue()); assertEquals("!!! Service Unavailable !!!", stringResponse); } - // @Test + @Test public void givenJUnitManagedServer_whenMatchingBody_thenCorrect() throws IOException { stubFor(post(urlEqualTo("/baeldung/wiremock")).withHeader("Content-Type", equalTo("application/json")).withRequestBody(containing("\"testing-library\": \"WireMock\"")).withRequestBody(containing("\"creator\": \"Tom Akehurst\"")) .withRequestBody(containing("\"website\": \"wiremock.org\"")).willReturn(aResponse().withStatus(200))); @@ -75,13 +76,12 @@ public class JUnitManaged { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost request = new HttpPost("http://localhost:8080/baeldung/wiremock"); - request.addHeader("Content-Type", "application/json"); request.setEntity(entity); HttpResponse response = httpClient.execute(request); - assertEquals(200, response.getStatusLine().getStatusCode()); verify(postRequestedFor(urlEqualTo("/baeldung/wiremock")).withHeader("Content-Type", equalTo("application/json"))); + assertEquals(200, response.getStatusLine().getStatusCode()); } @Test From 46cc39ed2381e71b9d9a899483b1b1ab4a3bea20 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 30 May 2016 11:48:04 +0200 Subject: [PATCH 040/283] add swagger test --- .../baeldung/spring/SecurityJavaConfig.java | 2 +- .../org/baeldung/web/SwaggerLiveTest.java | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java diff --git a/spring-security-rest/src/main/java/org/baeldung/spring/SecurityJavaConfig.java b/spring-security-rest/src/main/java/org/baeldung/spring/SecurityJavaConfig.java index 23c8155491..3302482f48 100644 --- a/spring-security-rest/src/main/java/org/baeldung/spring/SecurityJavaConfig.java +++ b/spring-security-rest/src/main/java/org/baeldung/spring/SecurityJavaConfig.java @@ -44,7 +44,7 @@ public class SecurityJavaConfig extends WebSecurityConfigurerAdapter { .authorizeRequests() .antMatchers("/api/csrfAttacker*").permitAll() .antMatchers("/api/customer/**").permitAll() - .antMatchers("/api/**").authenticated() + .antMatchers("/api/foos/**").authenticated() .and() .formLogin() .successHandler(authenticationSuccessHandler) diff --git a/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java b/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java new file mode 100644 index 0000000000..792b3e28ce --- /dev/null +++ b/spring-security-rest/src/test/java/org/baeldung/web/SwaggerLiveTest.java @@ -0,0 +1,20 @@ +package org.baeldung.web; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +import com.jayway.restassured.RestAssured; +import com.jayway.restassured.response.Response; + +public class SwaggerLiveTest { + private static final String URL_PREFIX = "http://localhost:8080/spring-security-rest/api"; + + @Test + public void whenVerifySpringFoxIsWorking_thenOK() { + final Response response = RestAssured.get(URL_PREFIX + "/v2/api-docs"); + assertEquals(200, response.statusCode()); + System.out.println(response.asString()); + + } +} From b36e9a3a5cd6f795b7d559509891b1c8eda17f64 Mon Sep 17 00:00:00 2001 From: DOHA Date: Mon, 30 May 2016 12:26:03 +0200 Subject: [PATCH 041/283] update swagger --- spring-security-rest/pom.xml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/spring-security-rest/pom.xml b/spring-security-rest/pom.xml index 2944f53337..6d492863b4 100644 --- a/spring-security-rest/pom.xml +++ b/spring-security-rest/pom.xml @@ -213,13 +213,13 @@ io.springfox springfox-swagger2 - ${springfox.version} + ${springfox-swagger.version} io.springfox springfox-swagger-ui - ${springfox.version} + ${springfox-swagger.version} @@ -309,7 +309,6 @@ 1.1.0.Final 1.2 2.2.2 - 2.2.2 19.0 @@ -322,8 +321,7 @@ 2.9.0 - 2.2.2 - 2.2.2 + 2.4.0 4.4.1 4.5 From c8121c168d60caf2da7c790f1a0ee065817b62c9 Mon Sep 17 00:00:00 2001 From: Gachchinamat Date: Mon, 30 May 2016 16:42:22 +0200 Subject: [PATCH 042/283] Core java enum examples --- core-java/pom.xml | 6 +- .../main/java/com/baeldung/enums/Pizza.java | 117 ++++++++++++++++++ .../baeldung/enums/PizzaDeliveryStrategy.java | 18 +++ .../PizzaDeliverySystemConfiguration.java | 20 +++ .../org/baeldung/java/enums/PizzaTest.java | 80 ++++++++++++ 5 files changed, 240 insertions(+), 1 deletion(-) create mode 100644 core-java/src/main/java/com/baeldung/enums/Pizza.java create mode 100644 core-java/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java create mode 100644 core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java create mode 100644 core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java diff --git a/core-java/pom.xml b/core-java/pom.xml index e3a9043b09..39cb79a86a 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -9,7 +9,11 @@ - + + net.sourceforge.collections + collections-generic + 4.01 + com.google.guava guava diff --git a/core-java/src/main/java/com/baeldung/enums/Pizza.java b/core-java/src/main/java/com/baeldung/enums/Pizza.java new file mode 100644 index 0000000000..b1c90b42cf --- /dev/null +++ b/core-java/src/main/java/com/baeldung/enums/Pizza.java @@ -0,0 +1,117 @@ +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.CollectionUtils; +import org.apache.commons.collections15.Predicate; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.EnumSet; +import java.util.List; + +public class Pizza { + + private static EnumSet undeliveredPizzaStatuses = + EnumSet.of(PizzaStatusEnum.ORDERED, PizzaStatusEnum.READY); + + private PizzaStatusEnum status; + + @JsonFormat(shape = JsonFormat.Shape.OBJECT) + 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;} + @JsonProperty("timeToDelivery") + public int getTimeToDelivery() { + return timeToDelivery; + } + + private 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 getAllUndeliveredPizza(List input) { + List undelivered = input; + CollectionUtils.filter(undelivered, thatAreNotDelivered()); + return undelivered; + } + + public static EnumMap> groupPizzaByStatus(List pizzaList) { + EnumMap> pzByStatus = new EnumMap>(PizzaStatusEnum.class); + for (Pizza pz : pizzaList) { + PizzaStatusEnum status = pz.getStatus(); + + if (pzByStatus.containsKey(status)) { + pzByStatus.get(status).add(pz); + } else { + List newPzList = new ArrayList(); + newPzList.add(pz); + pzByStatus.put(status, newPzList); + } + } + return pzByStatus; + } + + public void deliver() { + if (isDeliverable()) { + PizzaDeliverySystemConfiguration.getInstance().getDeliveryStrategy().deliver(this); + this.setStatus(PizzaStatusEnum.DELIVERED); + } + } + + public static String getJsonString(Pizza pz) throws IOException { + ObjectMapper mapper = new ObjectMapper(); + return mapper.writerWithDefaultPrettyPrinter().writeValueAsString(pz); + } + + private static Predicate thatAreNotDelivered() { + return new Predicate() { + public boolean evaluate(Pizza entry) { + return undeliveredPizzaStatuses.contains(entry.getStatus()); + } + }; + } +} \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java b/core-java/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java new file mode 100644 index 0000000000..ed65919387 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java @@ -0,0 +1,18 @@ +package com.baeldung.enums; + +public enum PizzaDeliveryStrategy { + EXPRESS { + @Override + public void deliver(Pizza pz) { + System.out.println("Pizza will be delivered in express mode"); + } + }, + NORMAL { + @Override + public void deliver(Pizza pz) { + System.out.println("Pizza will be delivered in normal mode"); + } + }; + + public abstract void deliver(Pizza pz); +} diff --git a/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java b/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java new file mode 100644 index 0000000000..9210945783 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java @@ -0,0 +1,20 @@ +package com.baeldung.enums; + +public enum PizzaDeliverySystemConfiguration { + INSTANCE ; + private PizzaDeliverySystemConfiguration() { + //Do the configuration initialization which + // involves overriding defaults like delivery strategy + } + + private PizzaDeliveryStrategy deliveryStrategy = PizzaDeliveryStrategy.NORMAL; + + public static PizzaDeliverySystemConfiguration getInstance() { + return INSTANCE; + } + + public PizzaDeliveryStrategy getDeliveryStrategy() { + return deliveryStrategy; + } + +} diff --git a/core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java b/core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java new file mode 100644 index 0000000000..9f6a8feae5 --- /dev/null +++ b/core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java @@ -0,0 +1,80 @@ +package org.baeldung.java.enums; + + +import com.baeldung.enums.Pizza; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; + +import static junit.framework.TestCase.assertTrue; + + +public class PizzaTest { + @Test + public void givenPizaOrder_whenReady_thenDeliverable() { + Pizza testPz = new Pizza(); + testPz.setStatus(Pizza.PizzaStatusEnum.READY); + assertTrue(testPz.isDeliverable()); + } + + @Test + public void givenPizaOrders_whenRetrievingUnDeliveredPzs_thenCorrectlyRetrieved() { + List pzList = new ArrayList(); + Pizza pz1 = new Pizza(); + pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); + + Pizza pz2 = new Pizza(); + pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz3 = new Pizza(); + pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz4 = new Pizza(); + pz4.setStatus(Pizza.PizzaStatusEnum.READY); + + pzList.add(pz1); + pzList.add(pz2); + pzList.add(pz3); + pzList.add(pz4); + + List undeliveredPzs = Pizza.getAllUndeliveredPizza(pzList); + assertTrue(undeliveredPzs.size() == 3); + } + + @Test + public void givenPizaOrders_whenGroupByStatusCalled_thenCorrectlyGrouped() { + + List pzList = new ArrayList(); + Pizza pz1 = new Pizza(); + pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); + + Pizza pz2 = new Pizza(); + pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz3 = new Pizza(); + pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz4 = new Pizza(); + pz4.setStatus(Pizza.PizzaStatusEnum.READY); + + pzList.add(pz1); + pzList.add(pz2); + pzList.add(pz3); + pzList.add(pz4); + + EnumMap> map = Pizza.groupPizzaByStatus(pzList); + assertTrue(map.get(Pizza.PizzaStatusEnum.DELIVERED).size() == 1); + assertTrue(map.get(Pizza.PizzaStatusEnum.ORDERED).size() == 2); + assertTrue(map.get(Pizza.PizzaStatusEnum.READY).size() == 1); + } + + @Test + public void givenPizaOrder_whenDelivered_thenPizzaGetsDeliveredAndStatusChanges() { + Pizza pz = new Pizza(); + pz.setStatus(Pizza.PizzaStatusEnum.READY); + pz.deliver(); + assertTrue(pz.getStatus() == Pizza.PizzaStatusEnum.DELIVERED); + } +} From 14012a0ca2e8e300b44261b2e4d42ab9dc790e81 Mon Sep 17 00:00:00 2001 From: Gachchinamat Date: Mon, 30 May 2016 16:48:18 +0200 Subject: [PATCH 043/283] Enum examples for java8 --- .../main/java/com/baeldung/enums/Pizza.java | 84 +++++++++++++++++++ .../baeldung/enums/PizzaDeliveryStrategy.java | 18 ++++ .../PizzaDeliverySystemConfiguration.java | 21 +++++ .../java/com/baeldung/enums/PizzaTest.java | 78 +++++++++++++++++ 4 files changed, 201 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/enums/Pizza.java create mode 100644 core-java-8/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java create mode 100644 core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java create mode 100644 core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java diff --git a/core-java-8/src/main/java/com/baeldung/enums/Pizza.java b/core-java-8/src/main/java/com/baeldung/enums/Pizza.java new file mode 100644 index 0000000000..0599aea457 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/enums/Pizza.java @@ -0,0 +1,84 @@ +package com.baeldung.enums; + +import java.util.EnumMap; +import java.util.EnumSet; +import java.util.List; +import java.util.stream.Collectors; + +public class Pizza { + + private static EnumSet deliveredPizzaStatuses = + EnumSet.of(PizzaStatusEnum.DELIVERED); + + private PizzaStatusEnum status; + + public enum PizzaStatusEnum { + ORDERED (5){ + @Override + public boolean isOrdered() { + return true; + } + }, + READY (2){ + @Override + public boolean isReady() { + return true; + } + }, + DELIVERED (0){ + @Override + public boolean isDelivered() { + return true; + } + }; + + private int timeToDelivery; + + public boolean isOrdered() {return false;} + + public boolean isReady() {return false;} + + public boolean isDelivered(){return false;} + public int getTimeToDelivery() { + return timeToDelivery; + } + + private PizzaStatusEnum (int timeToDelivery) { + this.timeToDelivery = timeToDelivery; + } + } + + public PizzaStatusEnum getStatus() { + return status; + } + + public void setStatus(PizzaStatusEnum status) { + this.status = status; + } + + public boolean isDeliverable() { + return this.status.isReady(); + } + + public void printTimeToDeliver() { + System.out.println("Time to delivery is " + this.getStatus().getTimeToDelivery() + " days"); + } + + public static List getAllUndeliveredPizzas(List input) { + return input.stream().filter((s) -> !deliveredPizzaStatuses.contains(s.getStatus())).collect(Collectors.toList()); + } + + public static EnumMap> groupPizzaByStatus(List pzList) { + EnumMap> map = pzList.stream().collect( + Collectors.groupingBy(Pizza::getStatus, + () -> new EnumMap>(PizzaStatusEnum.class), Collectors.toList())); + return map; + } + + public void deliver() { + if (isDeliverable()) { + PizzaDeliverySystemConfiguration.getInstance().getDeliveryStrategy().deliver(this); + this.setStatus(PizzaStatusEnum.DELIVERED); + } + } +} \ No newline at end of file diff --git a/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java b/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java new file mode 100644 index 0000000000..ed65919387 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliveryStrategy.java @@ -0,0 +1,18 @@ +package com.baeldung.enums; + +public enum PizzaDeliveryStrategy { + EXPRESS { + @Override + public void deliver(Pizza pz) { + System.out.println("Pizza will be delivered in express mode"); + } + }, + NORMAL { + @Override + public void deliver(Pizza pz) { + System.out.println("Pizza will be delivered in normal mode"); + } + }; + + public abstract void deliver(Pizza pz); +} diff --git a/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java b/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java new file mode 100644 index 0000000000..96b6314574 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java @@ -0,0 +1,21 @@ +package com.baeldung.enums; + + +public enum PizzaDeliverySystemConfiguration { + INSTANCE ; + private PizzaDeliverySystemConfiguration() { + //Do the configuration initialization which + // involves overriding defaults like delivery strategy + } + + private PizzaDeliveryStrategy deliveryStrategy = PizzaDeliveryStrategy.NORMAL; + + public static PizzaDeliverySystemConfiguration getInstance() { + return INSTANCE; + } + + public PizzaDeliveryStrategy getDeliveryStrategy() { + return deliveryStrategy; + } + +} diff --git a/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java b/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java new file mode 100644 index 0000000000..ca1c71043e --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java @@ -0,0 +1,78 @@ +package com.baeldung.enums; + + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; + +import static junit.framework.TestCase.assertTrue; + +public class PizzaTest { + @Test + public void givenPizaOrder_whenReady_thenDeliverable() { + Pizza testPz = new Pizza(); + testPz.setStatus(Pizza.PizzaStatusEnum.READY); + assertTrue(testPz.isDeliverable()); + } + + @Test + public void givenPizaOrders_whenRetrievingUnDeliveredPzs_thenCorrectlyRetrieved() { + List pzList = new ArrayList(); + Pizza pz1 = new Pizza(); + pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); + + Pizza pz2 = new Pizza(); + pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz3 = new Pizza(); + pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz4 = new Pizza(); + pz4.setStatus(Pizza.PizzaStatusEnum.READY); + + pzList.add(pz1); + pzList.add(pz2); + pzList.add(pz3); + pzList.add(pz4); + + List undeliveredPzs = Pizza.getAllUndeliveredPizzas(pzList); + assertTrue(undeliveredPzs.size() == 3); + } + + @Test + public void givenPizaOrders_whenGroupByStatusCalled_thenCorrectlyGrouped() { + + List pzList = new ArrayList(); + Pizza pz1 = new Pizza(); + pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); + + Pizza pz2 = new Pizza(); + pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz3 = new Pizza(); + pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); + + Pizza pz4 = new Pizza(); + pz4.setStatus(Pizza.PizzaStatusEnum.READY); + + pzList.add(pz1); + pzList.add(pz2); + pzList.add(pz3); + pzList.add(pz4); + + EnumMap> map = Pizza.groupPizzaByStatus(pzList); + assertTrue(map.get(Pizza.PizzaStatusEnum.DELIVERED).size() == 1); + assertTrue(map.get(Pizza.PizzaStatusEnum.ORDERED).size() == 2); + assertTrue(map.get(Pizza.PizzaStatusEnum.READY).size() == 1); + } + + @Test + public void givenPizaOrder_whenDelivered_thenPizzaGetsDeliveredAndStatusChanges() { + Pizza pz = new Pizza(); + pz.setStatus(Pizza.PizzaStatusEnum.READY); + pz.deliver(); + assertTrue(pz.getStatus() == Pizza.PizzaStatusEnum.DELIVERED); + } +} From 794e084f108d343035203ee51f7f7b01cc945e0a Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Mon, 30 May 2016 17:23:48 +0200 Subject: [PATCH 044/283] jsf-spring-integration - moving to java config --- jsf/pom.xml | 14 +++++++ .../config/MainWebAppInitializer.java | 36 ++++++++++++++++++ .../config/SpringCoreConfig.java | 15 ++++++++ .../controllers/RegistrationBean.java | 8 ++-- .../dao/IUserManagementDAO.java | 18 --------- .../dao/UserManagementDAO.java | 11 +----- .../dao/UserManagementDAOImpl.java | 13 +++++-- .../webapp/WEB-INF/applicationContext.xml | 15 -------- jsf/src/main/webapp/WEB-INF/web.xml | 38 ------------------- 9 files changed, 79 insertions(+), 89 deletions(-) create mode 100644 jsf/src/main/java/com/baeldung/springintegration/config/MainWebAppInitializer.java create mode 100644 jsf/src/main/java/com/baeldung/springintegration/config/SpringCoreConfig.java delete mode 100644 jsf/src/main/java/com/baeldung/springintegration/dao/IUserManagementDAO.java delete mode 100644 jsf/src/main/webapp/WEB-INF/applicationContext.xml delete mode 100644 jsf/src/main/webapp/WEB-INF/web.xml diff --git a/jsf/pom.xml b/jsf/pom.xml index c4d4e333a1..2f5d315e41 100644 --- a/jsf/pom.xml +++ b/jsf/pom.xml @@ -48,6 +48,17 @@ spring-messaging ${org.springframework.version} + + org.springframework + spring-web + ${org.springframework.version} + + + javax.servlet + javax.servlet-api + provided + ${javax.servlet.version} + @@ -98,5 +109,8 @@ 1.7.13 1.1.3 + + + 3.1.0 \ No newline at end of file diff --git a/jsf/src/main/java/com/baeldung/springintegration/config/MainWebAppInitializer.java b/jsf/src/main/java/com/baeldung/springintegration/config/MainWebAppInitializer.java new file mode 100644 index 0000000000..2de647915c --- /dev/null +++ b/jsf/src/main/java/com/baeldung/springintegration/config/MainWebAppInitializer.java @@ -0,0 +1,36 @@ +package com.baeldung.springintegration.config; + +import com.sun.faces.config.FacesInitializer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.WebApplicationInitializer; +import org.springframework.web.context.ContextLoaderListener; +import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; + +import javax.servlet.ServletContext; +import javax.servlet.ServletException; +import java.util.Set; + +public class MainWebAppInitializer extends FacesInitializer implements WebApplicationInitializer { + private static final Logger LOGGER = LoggerFactory.getLogger(MainWebAppInitializer.class); + + @Override + public void onStartup(Set> classes, ServletContext servletContext) throws ServletException { + super.onStartup(classes, servletContext); + } + + /** + * Register and configure all Servlet container components necessary to power the web application. + */ + @Override + public void onStartup(final ServletContext sc) throws ServletException { + LOGGER.info("MainWebAppInitializer.onStartup()"); + sc.setInitParameter("javax.faces.FACELETS_SKIP_COMMENTS", "true"); + + // Create the 'root' Spring application context + final AnnotationConfigWebApplicationContext root = new AnnotationConfigWebApplicationContext(); + root.register(SpringCoreConfig.class); + sc.addListener(new ContextLoaderListener(root)); + } + +} diff --git a/jsf/src/main/java/com/baeldung/springintegration/config/SpringCoreConfig.java b/jsf/src/main/java/com/baeldung/springintegration/config/SpringCoreConfig.java new file mode 100644 index 0000000000..a39da3fe25 --- /dev/null +++ b/jsf/src/main/java/com/baeldung/springintegration/config/SpringCoreConfig.java @@ -0,0 +1,15 @@ +package com.baeldung.springintegration.config; + +import com.baeldung.springintegration.dao.UserManagementDAO; +import com.baeldung.springintegration.dao.UserManagementDAOImpl; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SpringCoreConfig { + + @Bean + public UserManagementDAO userManagementDAO() { + return new UserManagementDAOImpl(); + } +} diff --git a/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java b/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java index 635e4d48b8..cf8dab5289 100644 --- a/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java +++ b/jsf/src/main/java/com/baeldung/springintegration/controllers/RegistrationBean.java @@ -1,6 +1,6 @@ package com.baeldung.springintegration.controllers; -import com.baeldung.springintegration.dao.IUserManagementDAO; +import com.baeldung.springintegration.dao.UserManagementDAO; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -16,7 +16,7 @@ public class RegistrationBean implements Serializable { private static final Logger LOGGER = LoggerFactory.getLogger(RegistrationBean.class); @ManagedProperty(value = "#{userManagementDAO}") - transient private IUserManagementDAO userDao; + transient private UserManagementDAO userDao; private String userName; private String operationMessage; @@ -44,11 +44,11 @@ public class RegistrationBean implements Serializable { this.userName = userName; } - public void setUserDao(IUserManagementDAO userDao) { + public void setUserDao(UserManagementDAO userDao) { this.userDao = userDao; } - public IUserManagementDAO getUserDao() { + public UserManagementDAO getUserDao() { return this.userDao; } diff --git a/jsf/src/main/java/com/baeldung/springintegration/dao/IUserManagementDAO.java b/jsf/src/main/java/com/baeldung/springintegration/dao/IUserManagementDAO.java deleted file mode 100644 index bfa50cc998..0000000000 --- a/jsf/src/main/java/com/baeldung/springintegration/dao/IUserManagementDAO.java +++ /dev/null @@ -1,18 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package com.baeldung.springintegration.dao; - - -/** - * @author Tayo - */ -public abstract class IUserManagementDAO implements UserManagementDAO { - - - @Override - public abstract boolean createUser(String userName); - - -} diff --git a/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAO.java b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAO.java index 8ee8bb906f..2acb4e636d 100644 --- a/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAO.java +++ b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAO.java @@ -1,16 +1,7 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ package com.baeldung.springintegration.dao; - -/** - * @author Tayo - */ public interface UserManagementDAO { - public boolean createUser(String newUserData); - + boolean createUser(String newUserData); } diff --git a/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java index b27aa582e3..56cbdd7b88 100644 --- a/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java +++ b/jsf/src/main/java/com/baeldung/springintegration/dao/UserManagementDAOImpl.java @@ -1,12 +1,17 @@ package com.baeldung.springintegration.dao; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Repository; + import java.util.ArrayList; import java.util.List; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.annotation.PostConstruct; -public class UserManagementDAOImpl extends IUserManagementDAO { +@Repository +public class UserManagementDAOImpl implements UserManagementDAO { + private static final Logger LOGGER = LoggerFactory.getLogger(UserManagementDAOImpl.class); private List users; @@ -19,7 +24,7 @@ public class UserManagementDAOImpl extends IUserManagementDAO { public boolean createUser(String newUserData) { if (newUserData != null) { users.add(newUserData); - Logger.getAnonymousLogger().log(Level.INFO, "User {0} successfully created", newUserData); + LOGGER.info("User {} successfully created", newUserData); return true; } else { return false; diff --git a/jsf/src/main/webapp/WEB-INF/applicationContext.xml b/jsf/src/main/webapp/WEB-INF/applicationContext.xml deleted file mode 100644 index 5d162f56ba..0000000000 --- a/jsf/src/main/webapp/WEB-INF/applicationContext.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - diff --git a/jsf/src/main/webapp/WEB-INF/web.xml b/jsf/src/main/webapp/WEB-INF/web.xml deleted file mode 100644 index 3522338919..0000000000 --- a/jsf/src/main/webapp/WEB-INF/web.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - javax.faces.PROJECT_STAGE - Production - - - javax.faces.STATE_SAVING_MODE - SERVER - - - javax.faces.FACELETS_SKIP_COMMENTS - true - - - Faces Servlet - javax.faces.webapp.FacesServlet - 1 - - - Faces Servlet - *.jsf - - - - 30 - - - - /index.jsf - - - - org.springframework.web.context.ContextLoaderListener - - - - From f831d98177e74625e14b57ab35e8b83990b72473 Mon Sep 17 00:00:00 2001 From: Slavisa Baeldung Date: Tue, 31 May 2016 11:24:41 +0200 Subject: [PATCH 045/283] jsf-spring-integration - adding war plugin --- jsf/pom.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/jsf/pom.xml b/jsf/pom.xml index 2f5d315e41..1049bbf38c 100644 --- a/jsf/pom.xml +++ b/jsf/pom.xml @@ -96,6 +96,14 @@ 1.8 + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + false + + @@ -112,5 +120,8 @@ 3.1.0 + + + 2.6 \ No newline at end of file From abb64b29a75656cd620ad99926e257d2d12a66ff Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Tue, 31 May 2016 21:50:25 +0300 Subject: [PATCH 046/283] modifications to request and session scopes examples --- .../org/baeldung/scopes/ScopesController.java | 37 ++++++------------- .../baeldung/spring/config/ScopesConfig.java | 12 ++++++ .../webapp/WEB-INF/view/scopesExample.jsp | 4 +- .../WEB-INF/view/scopesFirstRequest.jsp | 11 ------ .../WEB-INF/view/scopesSecondRequest.jsp | 10 ----- 5 files changed, 25 insertions(+), 49 deletions(-) delete mode 100644 spring-all/src/main/webapp/WEB-INF/view/scopesFirstRequest.jsp delete mode 100644 spring-all/src/main/webapp/WEB-INF/view/scopesSecondRequest.jsp diff --git a/spring-all/src/main/java/org/baeldung/scopes/ScopesController.java b/spring-all/src/main/java/org/baeldung/scopes/ScopesController.java index 5f29d0333f..bf733b75f9 100644 --- a/spring-all/src/main/java/org/baeldung/scopes/ScopesController.java +++ b/spring-all/src/main/java/org/baeldung/scopes/ScopesController.java @@ -2,45 +2,30 @@ package org.baeldung.scopes; import javax.annotation.Resource; +import org.apache.log4j.Logger; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class ScopesController { + public static final Logger LOG = Logger.getLogger(ScopesController.class); @Resource(name = "requestMessage") - HelloMessageGenerator firstRequestMessage; - - @Resource(name = "requestMessage") - HelloMessageGenerator secondRequestMessage; + HelloMessageGenerator requestMessage; @Resource(name = "sessionMessage") - HelloMessageGenerator firstSessionMessage; - - @Resource(name = "sessionMessage") - HelloMessageGenerator secondSessionMessage; + HelloMessageGenerator sessionMessage; @RequestMapping("/scopes") - public String getScopes() { + public String getScopes(final Model model) { + LOG.info("Request Message:" + requestMessage.getMessage()); + LOG.info("Session Message" + sessionMessage.getMessage()); + requestMessage.setMessage("Good morning!"); + sessionMessage.setMessage("Good afternoon!"); + model.addAttribute("requestMessage", requestMessage.getMessage()); + model.addAttribute("sessionMessage", sessionMessage.getMessage()); return "scopesExample"; } - @RequestMapping("/scopes/firstRequest") - public String getFirstRequest(final Model model) { - firstRequestMessage.setMessage("Good morning!"); - firstSessionMessage.setMessage("Good afternoon!"); - model.addAttribute("requestMessage", firstRequestMessage.getMessage()); - model.addAttribute("sessionMessage", firstSessionMessage.getMessage()); - return "scopesFirstRequest"; - } - - @RequestMapping("/scopes/secondRequest") - public String getSecondRequest(final Model model) { - secondRequestMessage.setMessage("Good evening!"); - model.addAttribute("requestMessage", secondRequestMessage.getMessage()); - model.addAttribute("sessionMessage", secondSessionMessage.getMessage()); - return "scopesSecondRequest"; - } - } diff --git a/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java b/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java index 1de7b32720..5a9b266388 100644 --- a/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java +++ b/spring-all/src/main/java/org/baeldung/spring/config/ScopesConfig.java @@ -1,6 +1,7 @@ package org.baeldung.spring.config; import org.baeldung.scopes.HelloMessageGenerator; +import org.baeldung.scopes.Person; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -42,4 +43,15 @@ public class ScopesConfig { return new HelloMessageGenerator(); } + @Bean + @Scope("prototype") + public Person personPrototype() { + return new Person(); + } + + @Bean + @Scope("singleton") + public Person personSingleton() { + return new Person(); + } } diff --git a/spring-all/src/main/webapp/WEB-INF/view/scopesExample.jsp b/spring-all/src/main/webapp/WEB-INF/view/scopesExample.jsp index 624ff46d5c..7974cf0220 100644 --- a/spring-all/src/main/webapp/WEB-INF/view/scopesExample.jsp +++ b/spring-all/src/main/webapp/WEB-INF/view/scopesExample.jsp @@ -4,7 +4,7 @@

Bean Scopes Examples


- First Request

- Second Request + Request Message: ${requestMessage }
+ Session Message: ${sessionMessage } \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/view/scopesFirstRequest.jsp b/spring-all/src/main/webapp/WEB-INF/view/scopesFirstRequest.jsp deleted file mode 100644 index 3804dfd1c6..0000000000 --- a/spring-all/src/main/webapp/WEB-INF/view/scopesFirstRequest.jsp +++ /dev/null @@ -1,11 +0,0 @@ - - - - -

Bean Scopes First Request

- - Request bean message: ${requestMessage } - Session bean message: ${sessionMessage } - - - \ No newline at end of file diff --git a/spring-all/src/main/webapp/WEB-INF/view/scopesSecondRequest.jsp b/spring-all/src/main/webapp/WEB-INF/view/scopesSecondRequest.jsp deleted file mode 100644 index 8e9d727661..0000000000 --- a/spring-all/src/main/webapp/WEB-INF/view/scopesSecondRequest.jsp +++ /dev/null @@ -1,10 +0,0 @@ - - - - -

Bean Scopes Second Request

- - Request bean message: ${requestMessage } - Session bean message: ${sessionMessage } - - \ No newline at end of file From 2f5f965ff210831bf9dd49cc58131bc3b28f156c Mon Sep 17 00:00:00 2001 From: Alex Theedom Date: Tue, 31 May 2016 22:02:45 +0100 Subject: [PATCH 047/283] Some minor changes to style and to sync with article code --- .../main/java/com/baeldung/enums/Pizza.java | 31 ++++++++++++------- .../PizzaDeliverySystemConfiguration.java | 7 +++-- .../java/com/baeldung/enums/PizzaTest.java | 6 ++-- 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/core-java-8/src/main/java/com/baeldung/enums/Pizza.java b/core-java-8/src/main/java/com/baeldung/enums/Pizza.java index 0599aea457..5bc2d9a9eb 100644 --- a/core-java-8/src/main/java/com/baeldung/enums/Pizza.java +++ b/core-java-8/src/main/java/com/baeldung/enums/Pizza.java @@ -8,24 +8,24 @@ import java.util.stream.Collectors; public class Pizza { private static EnumSet deliveredPizzaStatuses = - EnumSet.of(PizzaStatusEnum.DELIVERED); + EnumSet.of(PizzaStatusEnum.DELIVERED); private PizzaStatusEnum status; public enum PizzaStatusEnum { - ORDERED (5){ + ORDERED(5) { @Override public boolean isOrdered() { return true; } }, - READY (2){ + READY(2) { @Override public boolean isReady() { return true; } }, - DELIVERED (0){ + DELIVERED(0) { @Override public boolean isDelivered() { return true; @@ -34,16 +34,23 @@ public class Pizza { private int timeToDelivery; - public boolean isOrdered() {return false;} + public boolean isOrdered() { + return false; + } - public boolean isReady() {return false;} + public boolean isReady() { + return false; + } + + public boolean isDelivered() { + return false; + } - public boolean isDelivered(){return false;} public int getTimeToDelivery() { return timeToDelivery; } - private PizzaStatusEnum (int timeToDelivery) { + PizzaStatusEnum(int timeToDelivery) { this.timeToDelivery = timeToDelivery; } } @@ -69,10 +76,9 @@ public class Pizza { } public static EnumMap> groupPizzaByStatus(List pzList) { - EnumMap> map = pzList.stream().collect( - Collectors.groupingBy(Pizza::getStatus, - () -> new EnumMap>(PizzaStatusEnum.class), Collectors.toList())); - return map; + return pzList.stream().collect( + Collectors.groupingBy(Pizza::getStatus, + () -> new EnumMap<>(PizzaStatusEnum.class), Collectors.toList())); } public void deliver() { @@ -81,4 +87,5 @@ public class Pizza { this.setStatus(PizzaStatusEnum.DELIVERED); } } + } \ No newline at end of file diff --git a/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java b/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java index 96b6314574..5ccff5e959 100644 --- a/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java +++ b/core-java-8/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java @@ -2,9 +2,10 @@ package com.baeldung.enums; public enum PizzaDeliverySystemConfiguration { - INSTANCE ; - private PizzaDeliverySystemConfiguration() { - //Do the configuration initialization which + INSTANCE; + + PizzaDeliverySystemConfiguration() { + // Do the configuration initialization which // involves overriding defaults like delivery strategy } diff --git a/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java b/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java index ca1c71043e..deeebaa240 100644 --- a/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java +++ b/core-java-8/src/test/java/com/baeldung/enums/PizzaTest.java @@ -10,6 +10,7 @@ import java.util.List; import static junit.framework.TestCase.assertTrue; public class PizzaTest { + @Test public void givenPizaOrder_whenReady_thenDeliverable() { Pizza testPz = new Pizza(); @@ -19,7 +20,7 @@ public class PizzaTest { @Test public void givenPizaOrders_whenRetrievingUnDeliveredPzs_thenCorrectlyRetrieved() { - List pzList = new ArrayList(); + List pzList = new ArrayList<>(); Pizza pz1 = new Pizza(); pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); @@ -44,7 +45,7 @@ public class PizzaTest { @Test public void givenPizaOrders_whenGroupByStatusCalled_thenCorrectlyGrouped() { - List pzList = new ArrayList(); + List pzList = new ArrayList<>(); Pizza pz1 = new Pizza(); pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); @@ -75,4 +76,5 @@ public class PizzaTest { pz.deliver(); assertTrue(pz.getStatus() == Pizza.PizzaStatusEnum.DELIVERED); } + } From 882a9b5d5078241dfd506b9a3562048f03b85179 Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 1 Jun 2016 19:57:34 +0200 Subject: [PATCH 048/283] cleanup format --- .../couchbase/service/PersonServiceTest.java | 46 ++++++++----------- 1 file changed, 19 insertions(+), 27 deletions(-) diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java index bedae26e00..c3bf9f2138 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java @@ -27,28 +27,20 @@ public abstract class PersonServiceTest extends IntegrationTest { static final String smith = "Smith"; static final String johnSmithId = "person:" + john + ":" + smith; static final Person johnSmith = new Person(johnSmithId, john, smith); - static final JsonObject jsonJohnSmith = JsonObject.empty() - .put(typeField, Person.class.getName()) - .put("firstName", john) - .put("lastName", smith) - .put("created", DateTime.now().getMillis()); + static final JsonObject jsonJohnSmith = JsonObject.empty().put(typeField, Person.class.getName()).put("firstName", john).put("lastName", smith).put("created", DateTime.now().getMillis()); static final String foo = "Foo"; static final String bar = "Bar"; static final String foobarId = "person:" + foo + ":" + bar; static final Person foobar = new Person(foobarId, foo, bar); - static final JsonObject jsonFooBar = JsonObject.empty() - .put(typeField, Person.class.getName()) - .put("firstName", foo) - .put("lastName", bar) - .put("created", DateTime.now().getMillis()); - + static final JsonObject jsonFooBar = JsonObject.empty().put(typeField, Person.class.getName()).put("firstName", foo).put("lastName", bar).put("created", DateTime.now().getMillis()); + PersonService personService; - + @BeforeClass public static void setupBeforeClass() { - Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); - Bucket bucket = cluster.openBucket(MyCouchbaseConfig.BUCKET_NAME, MyCouchbaseConfig.BUCKET_PASSWORD); + final Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); + final Bucket bucket = cluster.openBucket(MyCouchbaseConfig.BUCKET_NAME, MyCouchbaseConfig.BUCKET_PASSWORD); bucket.upsert(JsonDocument.create(johnSmithId, jsonJohnSmith)); bucket.upsert(JsonDocument.create(foobarId, jsonFooBar)); bucket.close(); @@ -57,7 +49,7 @@ public abstract class PersonServiceTest extends IntegrationTest { @Test public void whenFindingPersonByJohnSmithId_thenReturnsJohnSmith() { - Person actualPerson = personService.findOne(johnSmithId); + final Person actualPerson = personService.findOne(johnSmithId); assertNotNull(actualPerson); assertNotNull(actualPerson.getCreated()); assertEquals(johnSmith, actualPerson); @@ -65,7 +57,7 @@ public abstract class PersonServiceTest extends IntegrationTest { @Test public void whenFindingAllPersons_thenReturnsTwoOrMorePersonsIncludingJohnSmithAndFooBar() { - List resultList = personService.findAll(); + final List resultList = personService.findAll(); assertNotNull(resultList); assertFalse(resultList.isEmpty()); assertTrue(resultContains(resultList, johnSmith)); @@ -75,8 +67,8 @@ public abstract class PersonServiceTest extends IntegrationTest { @Test public void whenFindingByFirstNameJohn_thenReturnsOnlyPersonsNamedJohn() { - String expectedFirstName = john; - List resultList = personService.findByFirstName(expectedFirstName); + final String expectedFirstName = john; + final List resultList = personService.findByFirstName(expectedFirstName); assertNotNull(resultList); assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedFirstName(resultList, expectedFirstName)); @@ -84,17 +76,17 @@ public abstract class PersonServiceTest extends IntegrationTest { @Test public void whenFindingByLastNameSmith_thenReturnsOnlyPersonsNamedSmith() { - String expectedLastName = smith; - List resultList = personService.findByLastName(expectedLastName); + final String expectedLastName = smith; + final List resultList = personService.findByLastName(expectedLastName); assertNotNull(resultList); assertFalse(resultList.isEmpty()); assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } - + private boolean resultContains(List resultList, Person person) { boolean found = false; - for(Person p : resultList) { - if(p.equals(person)) { + for (final Person p : resultList) { + if (p.equals(person)) { found = true; break; } @@ -104,8 +96,8 @@ public abstract class PersonServiceTest extends IntegrationTest { private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { boolean found = false; - for(Person p : resultList) { - if(p.getFirstName().equals(firstName)) { + for (final Person p : resultList) { + if (p.getFirstName().equals(firstName)) { found = true; break; } @@ -115,8 +107,8 @@ public abstract class PersonServiceTest extends IntegrationTest { private boolean allResultsContainExpectedLastName(List resultList, String lastName) { boolean found = false; - for(Person p : resultList) { - if(p.getLastName().equals(lastName)) { + for (final Person p : resultList) { + if (p.getLastName().equals(lastName)) { found = true; break; } From a75cad61f39fc82ffdd44944e10069d843183095 Mon Sep 17 00:00:00 2001 From: DOHA Date: Wed, 1 Jun 2016 19:59:06 +0200 Subject: [PATCH 049/283] upgrade and add test --- spring-data-couchbase-2/pom.xml | 2 +- .../spring/data/couchbase/service/PersonServiceTest.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/spring-data-couchbase-2/pom.xml b/spring-data-couchbase-2/pom.xml index 93b3dbddb4..d24ef4aeaa 100644 --- a/spring-data-couchbase-2/pom.xml +++ b/spring-data-couchbase-2/pom.xml @@ -93,7 +93,7 @@ 1.7 UTF-8 4.2.4.RELEASE - 2.0.0.RELEASE + 2.1.1.RELEASE 5.2.4.Final 2.9.2 1.1.3 diff --git a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java index c3bf9f2138..3fabf7a11e 100644 --- a/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java +++ b/spring-data-couchbase-2/src/test/java/org/baeldung/spring/data/couchbase/service/PersonServiceTest.java @@ -83,6 +83,13 @@ public abstract class PersonServiceTest extends IntegrationTest { assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); } + @Test + public void whenFindingByFirstNameJohn_thenReturnsOnePersonNamedJohn() { + final String expectedFirstName = john; + final List resultList = personService.findByFirstName(expectedFirstName); + assertTrue(resultList.size() == 1); + } + private boolean resultContains(List resultList, Person person) { boolean found = false; for (final Person p : resultList) { From 2e9efa16bc8dea7a6e798a3dbcbd077c2f0afa9e Mon Sep 17 00:00:00 2001 From: Kevin Gilmore Date: Fri, 3 Jun 2016 07:26:42 -0500 Subject: [PATCH 050/283] Spring Data Couchbase tutorial: multiple buckets and spatial queries --- spring-data-couchbase-2/README.md | 10 +- spring-data-couchbase-2b/.classpath | 36 ++++ spring-data-couchbase-2b/.project | 30 ++++ spring-data-couchbase-2b/.springBeans | 20 +++ spring-data-couchbase-2b/README.md | 36 ++++ spring-data-couchbase-2b/pom.xml | 105 +++++++++++ .../data/couchbase/MyCouchbaseConfig.java | 79 ++++++++ .../spring/data/couchbase/model/Campus.java | 102 +++++++++++ .../spring/data/couchbase/model/Person.java | 87 +++++++++ .../spring/data/couchbase/model/Student.java | 113 ++++++++++++ .../couchbase/repos/CampusRepository.java | 19 ++ .../couchbase/repos/PersonRepository.java | 11 ++ .../couchbase/repos/StudentRepository.java | 11 ++ .../service/CampusRepositoryService.java | 54 ++++++ .../data/couchbase/service/CampusService.java | 20 +++ .../service/PersonRepositoryService.java | 58 ++++++ .../data/couchbase/service/PersonService.java | 22 +++ .../service/StudentRepositoryService.java | 58 ++++++ .../couchbase/service/StudentService.java | 22 +++ .../src/main/resources/logback.xml | 17 ++ spring-data-couchbase-2b/src/site/site.xml | 25 +++ .../data/couchbase/IntegrationTest.java | 13 ++ .../data/couchbase/IntegrationTestConfig.java | 9 + .../data/couchbase/TestCouchbaseConfig.java | 17 ++ .../service/CampusRepositoryServiceTest.java | 135 ++++++++++++++ .../service/PersonRepositoryServiceTest.java | 130 ++++++++++++++ .../service/StudentRepositoryServiceTest.java | 170 ++++++++++++++++++ .../src/test/resources/logback.xml | 17 ++ 28 files changed, 1423 insertions(+), 3 deletions(-) create mode 100644 spring-data-couchbase-2b/.classpath create mode 100644 spring-data-couchbase-2b/.project create mode 100644 spring-data-couchbase-2b/.springBeans create mode 100644 spring-data-couchbase-2b/README.md create mode 100644 spring-data-couchbase-2b/pom.xml create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java create mode 100644 spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java create mode 100644 spring-data-couchbase-2b/src/main/resources/logback.xml create mode 100644 spring-data-couchbase-2b/src/site/site.xml create mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java create mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java create mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java create mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java create mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java create mode 100644 spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java create mode 100644 spring-data-couchbase-2b/src/test/resources/logback.xml diff --git a/spring-data-couchbase-2/README.md b/spring-data-couchbase-2/README.md index e58e37e090..3ed226fb33 100644 --- a/spring-data-couchbase-2/README.md +++ b/spring-data-couchbase-2/README.md @@ -2,11 +2,12 @@ ### Relevant Articles: - [Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase) +- [Entity Validation, Query Consistency, and Optimistic Locking in Spring Data Couchbase](http://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase) ### Overview This Maven project contains the Java code for Spring Data Couchbase entities, repositories, and template-based services -as described in the tutorial, as well as a unit test +as described in the tutorials, as well as a unit/integration test for each service implementation. ### Working with the Code @@ -22,13 +23,16 @@ mvn clean install ``` ### Running the tests -There are three test classes in src/test/java in the package +The following test classes are in src/test/java in the package org.baeldung.spring.data.couchbase.service: - PersonServiceTest (abstract) - PersonRepositoryTest (concrete) - PersonTemplateServiceTest (concrete) +- StudentServiceTest (abstract) +- StudentRepositoryTest (concrete) +- StudentTemplateServiceTest (concrete) -The latter two may be run as JUnit tests from your IDE +The concrete test classes may be run as JUnit tests from your IDE or using the Maven command line: ``` mvn test diff --git a/spring-data-couchbase-2b/.classpath b/spring-data-couchbase-2b/.classpath new file mode 100644 index 0000000000..450036fc00 --- /dev/null +++ b/spring-data-couchbase-2b/.classpath @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spring-data-couchbase-2b/.project b/spring-data-couchbase-2b/.project new file mode 100644 index 0000000000..1690ad8ce2 --- /dev/null +++ b/spring-data-couchbase-2b/.project @@ -0,0 +1,30 @@ + + + spring-data-couchbase-2 + This project is a simple template for a jar utility using Spring. + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.springframework.ide.eclipse.core.springbuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.springframework.ide.eclipse.core.springnature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/spring-data-couchbase-2b/.springBeans b/spring-data-couchbase-2b/.springBeans new file mode 100644 index 0000000000..0c014a97b6 --- /dev/null +++ b/spring-data-couchbase-2b/.springBeans @@ -0,0 +1,20 @@ + + + 1 + + + + + + + + + + + true + false + + + + + diff --git a/spring-data-couchbase-2b/README.md b/spring-data-couchbase-2b/README.md new file mode 100644 index 0000000000..262962f58a --- /dev/null +++ b/spring-data-couchbase-2b/README.md @@ -0,0 +1,36 @@ +## Spring Data Couchbase Tutorial Project + +### Relevant Articles: +- [Spring Data Couchbase](http://www.baeldung.com/spring-data-couchbase) +- [Entity Validation, Query Consistency, and Optimistic Locking in Spring Data Couchbase](http://www.baeldung.com/entity-validation-locking-and-query-consistency-in-spring-data-couchbase) + +### Overview +This Maven project contains the Java code for Spring Data Couchbase +entities, repositories, and repository-based services +as described in the tutorials, as well as a unit/integration test +for each service implementation. + +### Working with the Code +The project was developed and tested using Java 7 and 8 in the Eclipse-based +Spring Source Toolkit (STS) and therefore should run fine in any +recent version of Eclipse or another IDE of your choice +that supports Java 7 or later. + +### Building the Project +You can also build the project using Maven outside of any IDE: +``` +mvn clean install +``` + +### Running the tests +The following test classes are in src/test/java in the package +org.baeldung.spring.data.couchbase.service: +- CampusRepositoryServiceTest +- PersonRepositoryServiceTest +- StudentRepositoryServiceTest + +These may be run as JUnit tests from your IDE +or using the Maven command line: +``` +mvn test +``` diff --git a/spring-data-couchbase-2b/pom.xml b/spring-data-couchbase-2b/pom.xml new file mode 100644 index 0000000000..7d58f78ce5 --- /dev/null +++ b/spring-data-couchbase-2b/pom.xml @@ -0,0 +1,105 @@ + + 4.0.0 + org.baeldung + spring-data-couchbase-2b + 0.1-SNAPSHOT + spring-data-couchbase-2b + jar + + + + + + org.springframework + spring-context + ${spring-framework.version} + + + org.springframework + spring-context-support + ${spring-framework.version} + + + org.springframework.data + spring-data-couchbase + ${spring-data-couchbase.version} + + + + + org.hibernate + hibernate-validator + ${hibernate-validator.version} + + + + joda-time + joda-time + ${joda-time.version} + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + compile + + + ch.qos.logback + logback-classic + ${logback.version} + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + + + + + org.springframework + spring-test + ${spring-framework.version} + test + + + junit + junit + ${junit.version} + test + + + + + + + maven-compiler-plugin + 2.3.2 + + 1.7 + 1.7 + + + + + + + 1.7 + UTF-8 + 4.2.4.RELEASE + 2.1.1.RELEASE + 5.2.4.Final + 2.9.2 + 1.1.3 + 1.7.12 + 4.11 + + + + diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java new file mode 100644 index 0000000000..8eeda08455 --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/MyCouchbaseConfig.java @@ -0,0 +1,79 @@ +package org.baeldung.spring.data.couchbase; + +import java.util.Arrays; +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Campus; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.couchbase.config.AbstractCouchbaseConfiguration; +import org.springframework.data.couchbase.core.CouchbaseTemplate; +import org.springframework.data.couchbase.core.mapping.event.ValidatingCouchbaseEventListener; +import org.springframework.data.couchbase.core.query.Consistency; +import org.springframework.data.couchbase.repository.config.EnableCouchbaseRepositories; +import org.springframework.data.couchbase.repository.config.RepositoryOperationsMapping; +import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; + +import com.couchbase.client.java.Bucket; + +@Configuration +@EnableCouchbaseRepositories(basePackages={"org.baeldung.spring.data.couchbase"}) +public class MyCouchbaseConfig extends AbstractCouchbaseConfiguration { + + public static final List NODE_LIST = Arrays.asList("localhost"); + public static final String DEFAULT_BUCKET_NAME = "baeldung"; + public static final String DEFAULT_BUCKET_PASSWORD = ""; + + @Override + protected List getBootstrapHosts() { + return NODE_LIST; + } + + @Override + protected String getBucketName() { + return DEFAULT_BUCKET_NAME; + } + + @Override + protected String getBucketPassword() { + return DEFAULT_BUCKET_PASSWORD; + } + + @Bean + public Bucket campusBucket() throws Exception { + return couchbaseCluster().openBucket("baeldung2", ""); + } + + @Bean + public CouchbaseTemplate campusTemplate() throws Exception { + CouchbaseTemplate template = new CouchbaseTemplate( + couchbaseClusterInfo(), campusBucket(), + mappingCouchbaseConverter(), translationService()); + template.setDefaultConsistency(getDefaultConsistency()); + return template; + } + + @Override + public void configureRepositoryOperationsMapping(RepositoryOperationsMapping baseMapping) { + try { + baseMapping.mapEntity(Campus.class, campusTemplate()); + } catch (Exception e) { + //custom Exception handling + } + } + + @Override + protected Consistency getDefaultConsistency() { + return Consistency.READ_YOUR_OWN_WRITES; + } + + @Bean + public LocalValidatorFactoryBean localValidatorFactoryBean() { + return new LocalValidatorFactoryBean(); + } + + @Bean + public ValidatingCouchbaseEventListener validatingCouchbaseEventListener() { + return new ValidatingCouchbaseEventListener(localValidatorFactoryBean()); + } +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java new file mode 100644 index 0000000000..201b14cf0b --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Campus.java @@ -0,0 +1,102 @@ +package org.baeldung.spring.data.couchbase.model; + +import javax.validation.constraints.NotNull; + +import org.springframework.data.annotation.Id; +import org.springframework.data.couchbase.core.mapping.Document; +import org.springframework.data.geo.Point; + +import com.couchbase.client.java.repository.annotation.Field; + +@Document +public class Campus { + + @Id + private String id; + @Field + @NotNull + private String name; + @Field + @NotNull + private Point location; + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } + public Point getLocation() { + return location; + } + public void setLocation(Point location) { + this.location = location; + } + + @Override + public int hashCode() { + int hash = 1; + if(id != null) { + hash = hash * 31 + id.hashCode(); + } + if(name != null) { + hash = hash * 31 + name.hashCode(); + } + if(location != null) { + hash = hash * 31 + location.hashCode(); + } + return hash; + } + + @Override + public boolean equals(Object obj) { + if((obj == null) || (obj.getClass() != this.getClass())) return false; + if(obj == this) return true; + Campus other = (Campus) obj; + return this.hashCode() == other.hashCode(); + } + + @SuppressWarnings("unused") + private Campus() {} + + public Campus(Builder b) { + this.id = b.id; + this.name = b.name; + this.location = b.location; + } + + public static class Builder { + private String id; + private String name; + private Point location; + + public static Builder newInstance() { + return new Builder(); + } + + public Campus build() { + return new Campus(this); + } + + public Builder id(String id) { + this.id = id; + return this; + } + + public Builder name(String name) { + this.name = name; + return this; + } + + public Builder location(Point location) { + this.location = location; + return this; + } + } +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java new file mode 100644 index 0000000000..9220e157ed --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Person.java @@ -0,0 +1,87 @@ +package org.baeldung.spring.data.couchbase.model; + +import javax.validation.constraints.NotNull; + +import org.joda.time.DateTime; +import org.springframework.data.annotation.Id; +import org.springframework.data.couchbase.core.mapping.Document; + +import com.couchbase.client.java.repository.annotation.Field; + +@Document +public class Person { + + @Id + private String id; + @Field + @NotNull + private String firstName; + @Field + @NotNull + private String lastName; + @Field + @NotNull + private DateTime created; + @Field + private DateTime updated; + + public Person(String id, String firstName, String lastName) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + } + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getFirstName() { + return firstName; + } + public void setFirstName(String firstName) { + this.firstName = firstName; + } + public String getLastName() { + return lastName; + } + public void setLastName(String lastName) { + this.lastName = lastName; + } + public DateTime getCreated() { + return created; + } + public void setCreated(DateTime created) { + this.created = created; + } + public DateTime getUpdated() { + return updated; + } + public void setUpdated(DateTime updated) { + this.updated = updated; + } + + @Override + public int hashCode() { + int hash = 1; + if(id != null) { + hash = hash * 31 + id.hashCode(); + } + if(firstName != null) { + hash = hash * 31 + firstName.hashCode(); + } + if(lastName != null) { + hash = hash * 31 + lastName.hashCode(); + } + return hash; + } + + @Override + public boolean equals(Object obj) { + if((obj == null) || (obj.getClass() != this.getClass())) return false; + if(obj == this) return true; + Person other = (Person) obj; + return this.hashCode() == other.hashCode(); + } +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java new file mode 100644 index 0000000000..9c266c2c62 --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/model/Student.java @@ -0,0 +1,113 @@ +package org.baeldung.spring.data.couchbase.model; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Past; +import javax.validation.constraints.Pattern; +import javax.validation.constraints.Size; + +import org.joda.time.DateTime; +import org.springframework.data.annotation.Id; +import org.springframework.data.annotation.Version; +import org.springframework.data.couchbase.core.mapping.Document; + +import com.couchbase.client.java.repository.annotation.Field; + +@Document +public class Student { + private static final String NAME_REGEX = "^[a-zA-Z .'-]+$"; + + @Id + private String id; + @Field + @NotNull + @Size(min=1, max=20) + @Pattern(regexp=NAME_REGEX) + private String firstName; + @Field + @NotNull + @Size(min=1, max=20) + @Pattern(regexp=NAME_REGEX) + private String lastName; + @Field + @Past + private DateTime dateOfBirth; + @Field + @NotNull + private DateTime created; + @Field + private DateTime updated; + @Version + private long version; + + public Student() {} + + public Student(String id, String firstName, String lastName, DateTime dateOfBirth) { + this.id = id; + this.firstName = firstName; + this.lastName = lastName; + this.dateOfBirth = dateOfBirth; + } + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + public String getFirstName() { + return firstName; + } + public void setFirstName(String firstName) { + this.firstName = firstName; + } + public String getLastName() { + return lastName; + } + public void setLastName(String lastName) { + this.lastName = lastName; + } + public DateTime getDateOfBirth() { + return dateOfBirth; + } + public void setDateOfBirth(DateTime dateOfBirth) { + this.dateOfBirth = dateOfBirth; + } + public DateTime getCreated() { + return created; + } + public void setCreated(DateTime created) { + this.created = created; + } + public DateTime getUpdated() { + return updated; + } + public void setUpdated(DateTime updated) { + this.updated = updated; + } + + @Override + public int hashCode() { + int hash = 1; + if(id != null) { + hash = hash * 31 + id.hashCode(); + } + if(firstName != null) { + hash = hash * 31 + firstName.hashCode(); + } + if(lastName != null) { + hash = hash * 31 + lastName.hashCode(); + } + if(dateOfBirth != null) { + hash = hash * 31 + dateOfBirth.hashCode(); + } + return hash; + } + + @Override + public boolean equals(Object obj) { + if((obj == null) || (obj.getClass() != this.getClass())) return false; + if(obj == this) return true; + Student other = (Student) obj; + return this.hashCode() == other.hashCode(); + } +} \ No newline at end of file diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java new file mode 100644 index 0000000000..22b2fb2735 --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/CampusRepository.java @@ -0,0 +1,19 @@ +package org.baeldung.spring.data.couchbase.repos; + +import java.util.Set; + +import org.baeldung.spring.data.couchbase.model.Campus; +import org.springframework.data.couchbase.core.query.Dimensional; +import org.springframework.data.couchbase.core.query.View; +import org.springframework.data.geo.Distance; +import org.springframework.data.geo.Point; +import org.springframework.data.repository.CrudRepository; + +public interface CampusRepository extends CrudRepository { + + @View(designDocument="campus", viewName="byName") + Set findByName(String name); + + @Dimensional(dimensions=2, designDocument="campus_spatial", spatialViewName="byLocation") + Set findByLocationNear(Point point, Distance distance); +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java new file mode 100644 index 0000000000..14b77759e3 --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/PersonRepository.java @@ -0,0 +1,11 @@ +package org.baeldung.spring.data.couchbase.repos; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Person; +import org.springframework.data.repository.CrudRepository; + +public interface PersonRepository extends CrudRepository { + List findByFirstName(String firstName); + List findByLastName(String lastName); +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java new file mode 100644 index 0000000000..433964c872 --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/repos/StudentRepository.java @@ -0,0 +1,11 @@ +package org.baeldung.spring.data.couchbase.repos; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Student; +import org.springframework.data.repository.CrudRepository; + +public interface StudentRepository extends CrudRepository { + List findByFirstName(String firstName); + List findByLastName(String lastName); +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java new file mode 100644 index 0000000000..d12e59ba1f --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryService.java @@ -0,0 +1,54 @@ +package org.baeldung.spring.data.couchbase.service; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.baeldung.spring.data.couchbase.model.Campus; +import org.baeldung.spring.data.couchbase.repos.CampusRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.geo.Distance; +import org.springframework.data.geo.Point; +import org.springframework.stereotype.Service; + +@Service +@Qualifier("CampusRepositoryService") +public class CampusRepositoryService implements CampusService { + + private CampusRepository repo; + @Autowired + public void setCampusRepository(CampusRepository repo) { + this.repo = repo; + } + + @Override + public Campus find(String id) { + return repo.findOne(id); + } + + @Override + public Set findByName(String name) { + return repo.findByName(name); + } + + @Override + public Set findByLocationNear(Point point, Distance distance) { + return repo.findByLocationNear(point, distance); + } + + @Override + public Set findAll() { + Set campuses = new HashSet<>(); + Iterator it = repo.findAll().iterator(); + while(it.hasNext()) { + campuses.add(it.next()); + } + return campuses; + } + + @Override + public void save(Campus campus) { + repo.save(campus); + } +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java new file mode 100644 index 0000000000..e82c14cb87 --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/CampusService.java @@ -0,0 +1,20 @@ +package org.baeldung.spring.data.couchbase.service; + +import java.util.Set; + +import org.baeldung.spring.data.couchbase.model.Campus; +import org.springframework.data.geo.Distance; +import org.springframework.data.geo.Point; + +public interface CampusService { + + Campus find(String id); + + Set findByName(String name); + + Set findByLocationNear(Point point, Distance distance); + + Set findAll(); + + void save(Campus campus); +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java new file mode 100644 index 0000000000..90cc36780a --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryService.java @@ -0,0 +1,58 @@ +package org.baeldung.spring.data.couchbase.service; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Person; +import org.baeldung.spring.data.couchbase.repos.PersonRepository; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +@Service +@Qualifier("PersonRepositoryService") +public class PersonRepositoryService implements PersonService { + + private PersonRepository repo; + @Autowired + public void setPersonRepository(PersonRepository repo) { + this.repo = repo; + } + + public Person findOne(String id) { + return repo.findOne(id); + } + + public List findAll() { + List people = new ArrayList(); + Iterator it = repo.findAll().iterator(); + while(it.hasNext()) { + people.add(it.next()); + } + return people; + } + + public List findByFirstName(String firstName) { + return repo.findByFirstName(firstName); + } + + public List findByLastName(String lastName) { + return repo.findByLastName(lastName); + } + + public void create(Person person) { + person.setCreated(DateTime.now()); + repo.save(person); + } + + public void update(Person person) { + person.setUpdated(DateTime.now()); + repo.save(person); + } + + public void delete(Person person) { + repo.delete(person); + } +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java new file mode 100644 index 0000000000..a823908b01 --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/PersonService.java @@ -0,0 +1,22 @@ +package org.baeldung.spring.data.couchbase.service; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Person; + +public interface PersonService { + + Person findOne(String id); + + List findAll(); + + List findByFirstName(String firstName); + + List findByLastName(String lastName); + + void create(Person person); + + void update(Person person); + + void delete(Person person); +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java new file mode 100644 index 0000000000..58304afc1c --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryService.java @@ -0,0 +1,58 @@ +package org.baeldung.spring.data.couchbase.service; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Student; +import org.baeldung.spring.data.couchbase.repos.StudentRepository; +import org.joda.time.DateTime; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; + +@Service +@Qualifier("StudentRepositoryService") +public class StudentRepositoryService implements StudentService { + + private StudentRepository repo; + @Autowired + public void setStudentRepository(StudentRepository repo) { + this.repo = repo; + } + + public Student findOne(String id) { + return repo.findOne(id); + } + + public List findAll() { + List people = new ArrayList(); + Iterator it = repo.findAll().iterator(); + while(it.hasNext()) { + people.add(it.next()); + } + return people; + } + + public List findByFirstName(String firstName) { + return repo.findByFirstName(firstName); + } + + public List findByLastName(String lastName) { + return repo.findByLastName(lastName); + } + + public void create(Student student) { + student.setCreated(DateTime.now()); + repo.save(student); + } + + public void update(Student student) { + student.setUpdated(DateTime.now()); + repo.save(student); + } + + public void delete(Student student) { + repo.delete(student); + } +} diff --git a/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java new file mode 100644 index 0000000000..f483ef0fb6 --- /dev/null +++ b/spring-data-couchbase-2b/src/main/java/org/baeldung/spring/data/couchbase/service/StudentService.java @@ -0,0 +1,22 @@ +package org.baeldung.spring.data.couchbase.service; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.model.Student; + +public interface StudentService { + + Student findOne(String id); + + List findAll(); + + List findByFirstName(String firstName); + + List findByLastName(String lastName); + + void create(Student student); + + void update(Student student); + + void delete(Student student); +} diff --git a/spring-data-couchbase-2b/src/main/resources/logback.xml b/spring-data-couchbase-2b/src/main/resources/logback.xml new file mode 100644 index 0000000000..d9067fd1da --- /dev/null +++ b/spring-data-couchbase-2b/src/main/resources/logback.xml @@ -0,0 +1,17 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + \ No newline at end of file diff --git a/spring-data-couchbase-2b/src/site/site.xml b/spring-data-couchbase-2b/src/site/site.xml new file mode 100644 index 0000000000..dda96feecd --- /dev/null +++ b/spring-data-couchbase-2b/src/site/site.xml @@ -0,0 +1,25 @@ + + + + + Spring Sample: ${project.name} + index.html + + + + org.springframework.maven.skins + maven-spring-skin + 1.0.5 + + + + + + + + + + + + + diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java new file mode 100644 index 0000000000..ce2daa92cd --- /dev/null +++ b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTest.java @@ -0,0 +1,13 @@ +package org.baeldung.spring.data.couchbase; + +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.TestExecutionListeners; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.support.DependencyInjectionTestExecutionListener; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = { MyCouchbaseConfig.class, IntegrationTestConfig.class }) +@TestExecutionListeners(listeners = { DependencyInjectionTestExecutionListener.class }) +public abstract class IntegrationTest { +} diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java new file mode 100644 index 0000000000..6f040c34db --- /dev/null +++ b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/IntegrationTestConfig.java @@ -0,0 +1,9 @@ +package org.baeldung.spring.data.couchbase; + +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ComponentScan(basePackages = "org.baeldung.spring.data.couchbase") +public class IntegrationTestConfig { +} diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java new file mode 100644 index 0000000000..c298ef0a61 --- /dev/null +++ b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/TestCouchbaseConfig.java @@ -0,0 +1,17 @@ +package org.baeldung.spring.data.couchbase; + +import org.springframework.data.couchbase.core.convert.MappingCouchbaseConverter; +import org.springframework.data.couchbase.core.query.Consistency; + +public class TestCouchbaseConfig extends MyCouchbaseConfig { + + @Override + public String typeKey() { + return MappingCouchbaseConverter.TYPEKEY_SYNCGATEWAY_COMPATIBLE; + } + + @Override + public Consistency getDefaultConsistency() { + return Consistency.READ_YOUR_OWN_WRITES; + } +} diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java new file mode 100644 index 0000000000..5a718f0807 --- /dev/null +++ b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/CampusRepositoryServiceTest.java @@ -0,0 +1,135 @@ +package org.baeldung.spring.data.couchbase.service; + +import static org.junit.Assert.*; + +import java.util.Set; + +import javax.annotation.PostConstruct; + +import org.baeldung.spring.data.couchbase.IntegrationTest; +import org.baeldung.spring.data.couchbase.model.Campus; +import org.baeldung.spring.data.couchbase.repos.CampusRepository; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.geo.Distance; +import org.springframework.data.geo.Metrics; +import org.springframework.data.geo.Point; + +public class CampusRepositoryServiceTest extends IntegrationTest { + + @Autowired + @Qualifier("CampusRepositoryService") + private CampusRepositoryService campusService; + + @Autowired + private CampusRepository campusRepo; + + private final Campus Brown = Campus.Builder.newInstance() + .id("campus:Brown") + .name("Brown") + .location(new Point(71.4025, 51.8268)) + .build(); + + private final Campus Cornell = Campus.Builder.newInstance() + .id("campus:Cornell") + .name("Cornell") + .location(new Point(76.4833, 42.4459)) + .build(); + + private final Campus Columbia = Campus.Builder.newInstance() + .id("campus:Columbia") + .name("Columbia") + .location(new Point(73.9626, 40.8075)) + .build(); + + private final Campus Dartmouth = Campus.Builder.newInstance() + .id("campus:Dartmouth") + .name("Dartmouth") + .location(new Point(72.2887, 43.7044)) + .build(); + + private final Campus Harvard = Campus.Builder.newInstance() + .id("campus:Harvard") + .name("Harvard") + .location(new Point(71.1167, 42.3770)) + .build(); + + private final Campus Penn = Campus.Builder.newInstance() + .id("campus:Penn") + .name("Penn") + .location(new Point(75.1932, 39.9522)) + .build(); + + private final Campus Princeton = Campus.Builder.newInstance() + .id("campus:Princeton") + .name("Princeton") + .location(new Point(74.6514, 40.3340)) + .build(); + + private final Campus Yale = Campus.Builder.newInstance() + .id("campus:Yale") + .name("Yale") + .location(new Point(72.9223, 41.3163)) + .build(); + + private final Point Boston = new Point(71.0589, 42.3601); + private final Point NewYorkCity = new Point(74.0059, 40.7128); + + @PostConstruct + private void loadCampuses() throws Exception { + campusRepo.save(Brown); + campusRepo.save(Columbia); + campusRepo.save(Cornell); + campusRepo.save(Dartmouth); + campusRepo.save(Harvard); + campusRepo.save(Penn); + campusRepo.save(Princeton); + campusRepo.save(Yale); + } + + @Test + public final void givenNameHarvard_whenFindByName_thenReturnsHarvard() throws Exception { + Set campuses = campusService.findByName(Harvard.getName()); + assertNotNull(campuses); + assertFalse(campuses.isEmpty()); + assertTrue(campuses.size() == 1); + assertTrue(campuses.contains(Harvard)); + } + + @Test + public final void givenHarvardId_whenFind_thenReturnsHarvard() throws Exception { + Campus actual = campusService.find(Harvard.getId()); + assertNotNull(actual); + assertEquals(Harvard, actual); + } + + @Test + public final void whenFindAll_thenReturnsAll() throws Exception { + Set campuses = campusService.findAll(); + assertTrue(campuses.contains(Brown)); + assertTrue(campuses.contains(Columbia)); + assertTrue(campuses.contains(Cornell)); + assertTrue(campuses.contains(Dartmouth)); + assertTrue(campuses.contains(Harvard)); + assertTrue(campuses.contains(Penn)); + assertTrue(campuses.contains(Princeton)); + assertTrue(campuses.contains(Yale)); + } + + @Test + public final void whenFindByLocationNearBoston_thenResultContainsHarvard() throws Exception { + Set campuses = campusService.findByLocationNear(Boston, new Distance(1, Metrics.NEUTRAL)); + assertFalse(campuses.isEmpty()); + assertTrue(campuses.contains(Harvard)); + assertFalse(campuses.contains(Columbia)); + } + + @Test + public final void whenFindByLocationNearNewYorkCity_thenResultContainsColumbia() throws Exception { + Set campuses = campusService.findByLocationNear(NewYorkCity, new Distance(1, Metrics.NEUTRAL)); + assertFalse(campuses.isEmpty()); + assertTrue(campuses.contains(Columbia)); + assertFalse(campuses.contains(Harvard)); + } +} diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java new file mode 100644 index 0000000000..84b6f75d56 --- /dev/null +++ b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/PersonRepositoryServiceTest.java @@ -0,0 +1,130 @@ +package org.baeldung.spring.data.couchbase.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.baeldung.spring.data.couchbase.IntegrationTest; +import org.baeldung.spring.data.couchbase.MyCouchbaseConfig; +import org.baeldung.spring.data.couchbase.model.Person; +import org.joda.time.DateTime; +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonObject; + +public class PersonRepositoryServiceTest extends IntegrationTest { + + private static final String typeField = "_class"; + private static final String john = "John"; + private static final String smith = "Smith"; + private static final String johnSmithId = "person:" + john + ":" + smith; + private static final Person johnSmith = new Person(johnSmithId, john, smith); + private static final JsonObject jsonJohnSmith = JsonObject.empty() + .put(typeField, Person.class.getName()) + .put("firstName", john) + .put("lastName", smith) + .put("created", DateTime.now().getMillis()); + + private static final String foo = "Foo"; + private static final String bar = "Bar"; + private static final String foobarId = "person:" + foo + ":" + bar; + private static final Person foobar = new Person(foobarId, foo, bar); + private static final JsonObject jsonFooBar = JsonObject.empty() + .put(typeField, Person.class.getName()) + .put("firstName", foo) + .put("lastName", bar) + .put("created", DateTime.now().getMillis()); + + @Autowired + @Qualifier("PersonRepositoryService") + private PersonService personService; + + @BeforeClass + public static void setupBeforeClass() { + Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); + Bucket bucket = cluster.openBucket(MyCouchbaseConfig.DEFAULT_BUCKET_NAME, MyCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); + bucket.upsert(JsonDocument.create(johnSmithId, jsonJohnSmith)); + bucket.upsert(JsonDocument.create(foobarId, jsonFooBar)); + bucket.close(); + cluster.disconnect(); + } + + @Test + public void whenFindingPersonByJohnSmithId_thenReturnsJohnSmith() { + Person actualPerson = personService.findOne(johnSmithId); + assertNotNull(actualPerson); + assertNotNull(actualPerson.getCreated()); + assertEquals(johnSmith, actualPerson); + } + + @Test + public void whenFindingAllPersons_thenReturnsTwoOrMorePersonsIncludingJohnSmithAndFooBar() { + List resultList = personService.findAll(); + assertNotNull(resultList); + assertFalse(resultList.isEmpty()); + assertTrue(resultContains(resultList, johnSmith)); + assertTrue(resultContains(resultList, foobar)); + assertTrue(resultList.size() >= 2); + } + + @Test + public void whenFindingByFirstNameJohn_thenReturnsOnlyPersonsNamedJohn() { + String expectedFirstName = john; + List resultList = personService.findByFirstName(expectedFirstName); + assertNotNull(resultList); + assertFalse(resultList.isEmpty()); + assertTrue(allResultsContainExpectedFirstName(resultList, expectedFirstName)); + } + + @Test + public void whenFindingByLastNameSmith_thenReturnsOnlyPersonsNamedSmith() { + String expectedLastName = smith; + List resultList = personService.findByLastName(expectedLastName); + assertNotNull(resultList); + assertFalse(resultList.isEmpty()); + assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); + } + + private boolean resultContains(List resultList, Person person) { + boolean found = false; + for(Person p : resultList) { + if(p.equals(person)) { + found = true; + break; + } + } + return found; + } + + private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { + boolean found = false; + for(Person p : resultList) { + if(p.getFirstName().equals(firstName)) { + found = true; + break; + } + } + return found; + } + + private boolean allResultsContainExpectedLastName(List resultList, String lastName) { + boolean found = false; + for(Person p : resultList) { + if(p.getLastName().equals(lastName)) { + found = true; + break; + } + } + return found; + } +} diff --git a/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java new file mode 100644 index 0000000000..166f01d754 --- /dev/null +++ b/spring-data-couchbase-2b/src/test/java/org/baeldung/spring/data/couchbase/service/StudentRepositoryServiceTest.java @@ -0,0 +1,170 @@ +package org.baeldung.spring.data.couchbase.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import javax.validation.ConstraintViolationException; + +import org.baeldung.spring.data.couchbase.IntegrationTest; +import org.baeldung.spring.data.couchbase.MyCouchbaseConfig; +import org.baeldung.spring.data.couchbase.model.Student; +import org.joda.time.DateTime; +import org.junit.BeforeClass; +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; + +import com.couchbase.client.java.Bucket; +import com.couchbase.client.java.Cluster; +import com.couchbase.client.java.CouchbaseCluster; +import com.couchbase.client.java.document.JsonDocument; +import com.couchbase.client.java.document.json.JsonObject; + +public class StudentRepositoryServiceTest extends IntegrationTest { + + private static final String typeField = "_class"; + private static final String joe = "Joe"; + private static final String college = "College"; + private static final String joeCollegeId = "student:" + joe + ":" + college; + private static final DateTime joeCollegeDob = DateTime.now().minusYears(21); + private static final Student joeCollege = new Student(joeCollegeId, joe, college, joeCollegeDob); + private static final JsonObject jsonJoeCollege = JsonObject.empty() + .put(typeField, Student.class.getName()) + .put("firstName", joe) + .put("lastName", college) + .put("created", DateTime.now().getMillis()) + .put("version", 1); + + private static final String judy = "Judy"; + private static final String jetson = "Jetson"; + private static final String judyJetsonId = "student:" + judy + ":" + jetson; + private static final DateTime judyJetsonDob = DateTime.now().minusYears(19).minusMonths(5).minusDays(3); + private static final Student judyJetson = new Student(judyJetsonId, judy, jetson, judyJetsonDob); + private static final JsonObject jsonJudyJetson = JsonObject.empty() + .put(typeField, Student.class.getName()) + .put("firstName", judy) + .put("lastName", jetson) + .put("created", DateTime.now().getMillis()) + .put("version", 1); + + @Autowired + @Qualifier("StudentRepositoryService") + private StudentService studentService; + + @BeforeClass + public static void setupBeforeClass() { + Cluster cluster = CouchbaseCluster.create(MyCouchbaseConfig.NODE_LIST); + Bucket bucket = cluster.openBucket(MyCouchbaseConfig.DEFAULT_BUCKET_NAME, MyCouchbaseConfig.DEFAULT_BUCKET_PASSWORD); + bucket.upsert(JsonDocument.create(joeCollegeId, jsonJoeCollege)); + bucket.upsert(JsonDocument.create(judyJetsonId, jsonJudyJetson)); + bucket.close(); + cluster.disconnect(); + } + + @Test + public void whenCreatingStudent_thenDocumentIsPersisted() { + String firstName = "Eric"; + String lastName = "Stratton"; + DateTime dateOfBirth = DateTime.now().minusYears(25); + String id = "student:" + firstName + ":" + lastName; + Student expectedStudent = new Student(id, firstName, lastName, dateOfBirth); + studentService.create(expectedStudent); + Student actualStudent = studentService.findOne(id); + assertNotNull(actualStudent.getCreated()); + assertNotNull(actualStudent); + assertEquals(expectedStudent.getId(), actualStudent.getId()); + } + + @Test(expected=ConstraintViolationException.class) + public void whenCreatingStudentWithInvalidFirstName_thenConstraintViolationException() { + String firstName = "Er+ic"; + String lastName = "Stratton"; + DateTime dateOfBirth = DateTime.now().minusYears(25); + String id = "student:" + firstName + ":" + lastName; + Student student = new Student(id, firstName, lastName, dateOfBirth); + studentService.create(student); + } + + @Test(expected=ConstraintViolationException.class) + public void whenCreatingStudentWithFutureDob_thenConstraintViolationException() { + String firstName = "Jane"; + String lastName = "Doe"; + DateTime dateOfBirth = DateTime.now().plusDays(1); + String id = "student:" + firstName + ":" + lastName; + Student student = new Student(id, firstName, lastName, dateOfBirth); + studentService.create(student); + } + + @Test + public void whenFindingStudentByJohnSmithId_thenReturnsJohnSmith() { + Student actualStudent = studentService.findOne(joeCollegeId); + assertNotNull(actualStudent); + assertNotNull(actualStudent.getCreated()); + assertEquals(joeCollegeId, actualStudent.getId()); + } + + @Test + public void whenFindingAllStudents_thenReturnsTwoOrMoreStudentsIncludingJoeCollegeAndJudyJetson() { + List resultList = studentService.findAll(); + assertNotNull(resultList); + assertFalse(resultList.isEmpty()); + assertTrue(resultContains(resultList, joeCollege)); + assertTrue(resultContains(resultList, judyJetson)); + assertTrue(resultList.size() >= 2); + } + + @Test + public void whenFindingByFirstNameJohn_thenReturnsOnlyStudentsNamedJohn() { + String expectedFirstName = joe; + List resultList = studentService.findByFirstName(expectedFirstName); + assertNotNull(resultList); + assertFalse(resultList.isEmpty()); + assertTrue(allResultsContainExpectedFirstName(resultList, expectedFirstName)); + } + + @Test + public void whenFindingByLastNameSmith_thenReturnsOnlyStudentsNamedSmith() { + String expectedLastName = college; + List resultList = studentService.findByLastName(expectedLastName); + assertNotNull(resultList); + assertFalse(resultList.isEmpty()); + assertTrue(allResultsContainExpectedLastName(resultList, expectedLastName)); + } + + private boolean resultContains(List resultList, Student student) { + boolean found = false; + for(Student p : resultList) { + if(p.getId().equals(student.getId())) { + found = true; + break; + } + } + return found; + } + + private boolean allResultsContainExpectedFirstName(List resultList, String firstName) { + boolean found = false; + for(Student p : resultList) { + if(p.getFirstName().equals(firstName)) { + found = true; + break; + } + } + return found; + } + + private boolean allResultsContainExpectedLastName(List resultList, String lastName) { + boolean found = false; + for(Student p : resultList) { + if(p.getLastName().equals(lastName)) { + found = true; + break; + } + } + return found; + } +} diff --git a/spring-data-couchbase-2b/src/test/resources/logback.xml b/spring-data-couchbase-2b/src/test/resources/logback.xml new file mode 100644 index 0000000000..d9067fd1da --- /dev/null +++ b/spring-data-couchbase-2b/src/test/resources/logback.xml @@ -0,0 +1,17 @@ + + + + + web - %date [%thread] %-5level %logger{36} - %message%n + + + + + + + + + + + + \ No newline at end of file From b11f8ea8218189ca8f32c8988e5e35fe765c8af5 Mon Sep 17 00:00:00 2001 From: Slavisa Avramovic Date: Mon, 6 Jun 2016 07:29:44 +0200 Subject: [PATCH 051/283] spring-jsf-integration - adding maven-war-plugin --- jsf/pom.xml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/jsf/pom.xml b/jsf/pom.xml index 2f5d315e41..c4801996de 100644 --- a/jsf/pom.xml +++ b/jsf/pom.xml @@ -90,12 +90,21 @@ org.apache.maven.plugins maven-compiler-plugin - 3.5.1 + ${maven-compiler-plugin.version} 1.8 1.8 + + + org.apache.maven.plugins + maven-war-plugin + ${maven-war-plugin.version} + + false + + @@ -112,5 +121,10 @@ 3.1.0 + + + 3.5.1 + 2.6 + \ No newline at end of file From f53ac9d4a17365f652202064704b8b278c55b464 Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Mon, 6 Jun 2016 23:19:05 +0700 Subject: [PATCH 052/283] adds the wire_mock.json file --- rest-testing/src/main/resources/wiremock_intro.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 rest-testing/src/main/resources/wiremock_intro.json diff --git a/rest-testing/src/main/resources/wiremock_intro.json b/rest-testing/src/main/resources/wiremock_intro.json new file mode 100644 index 0000000000..ece2d35907 --- /dev/null +++ b/rest-testing/src/main/resources/wiremock_intro.json @@ -0,0 +1,5 @@ +{ + "testing-library": "WireMock", + "creator": "Tom Akehurst", + "website": "wiremock.org" +} \ No newline at end of file From c38e6c187681113ad5403d3dcc501756538077c2 Mon Sep 17 00:00:00 2001 From: Thai Nguyen Date: Tue, 7 Jun 2016 00:22:22 +0700 Subject: [PATCH 053/283] initial commit for rest testing with cucumber --- rest-testing/pom.xml | 11 +++ .../main/resources/Feature/cucumber.feature | 10 +++ rest-testing/src/main/resources/cucumber.json | 14 ++++ .../baeldung/rest/cucumber/CucumberTest.java | 10 +++ .../rest/cucumber/StepDefinition.java | 83 +++++++++++++++++++ 5 files changed, 128 insertions(+) create mode 100644 rest-testing/src/main/resources/Feature/cucumber.feature create mode 100644 rest-testing/src/main/resources/cucumber.json create mode 100644 rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberTest.java create mode 100644 rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java diff --git a/rest-testing/pom.xml b/rest-testing/pom.xml index 3bd7efb4d5..652f2ab601 100644 --- a/rest-testing/pom.xml +++ b/rest-testing/pom.xml @@ -110,6 +110,17 @@ test + + info.cukes + cucumber-java + 1.2.4 + test + + + info.cukes + cucumber-junit + 1.2.4 + diff --git a/rest-testing/src/main/resources/Feature/cucumber.feature b/rest-testing/src/main/resources/Feature/cucumber.feature new file mode 100644 index 0000000000..99dd8249fe --- /dev/null +++ b/rest-testing/src/main/resources/Feature/cucumber.feature @@ -0,0 +1,10 @@ +Feature: Testing a REST API + Users should be able to submit GET and POST requests to a web service, represented by WireMock + + Scenario: Data Upload to a web service + When users upload data on a project + Then the server should handle it and return a success status + + Scenario: Data retrieval from a web service + When users want to get information on the Cucumber project + Then the requested data is returned \ No newline at end of file diff --git a/rest-testing/src/main/resources/cucumber.json b/rest-testing/src/main/resources/cucumber.json new file mode 100644 index 0000000000..38ebe066ac --- /dev/null +++ b/rest-testing/src/main/resources/cucumber.json @@ -0,0 +1,14 @@ +{ + "testing-framework": "cucumber", + "supported-language": + [ + "Ruby", + "Java", + "Javascript", + "PHP", + "Python", + "C++" + ], + + "website": "cucumber.io" +} \ No newline at end of file diff --git a/rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberTest.java b/rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberTest.java new file mode 100644 index 0000000000..041de592e9 --- /dev/null +++ b/rest-testing/src/test/java/com/baeldung/rest/cucumber/CucumberTest.java @@ -0,0 +1,10 @@ +package com.baeldung.rest.cucumber; + +import org.junit.runner.RunWith; +import cucumber.api.CucumberOptions; +import cucumber.api.junit.Cucumber; + +@RunWith(Cucumber.class) +@CucumberOptions(features = "classpath:Feature") +public class CucumberTest { +} \ No newline at end of file diff --git a/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java b/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java new file mode 100644 index 0000000000..0d72c60950 --- /dev/null +++ b/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java @@ -0,0 +1,83 @@ +package com.baeldung.rest.cucumber; + +import static org.junit.Assert.*; +import static org.hamcrest.CoreMatchers.containsString; +import static com.github.tomakehurst.wiremock.client.WireMock.*; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Scanner; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; + +import com.github.tomakehurst.wiremock.WireMockServer; + +import cucumber.api.java.en.Then; +import cucumber.api.java.en.When; + +public class StepDefinition { + InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("cucumber.json"); + String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); + + WireMockServer wireMockServer = new WireMockServer(); + CloseableHttpClient httpClient = HttpClients.createDefault(); + + @When("^users upload data on a project$") + public void usersUploadDataOnAProject() throws IOException { + wireMockServer.start(); + + configureFor("localhost", 8080); + stubFor(post(urlEqualTo("/create")).withHeader("content-type", equalTo("application/json")).withRequestBody(containing("testing-framework")).willReturn(aResponse().withStatus(200))); + + HttpPost request = new HttpPost("http://localhost:8080/create"); + StringEntity entity = new StringEntity(jsonString); + request.addHeader("content-type", "application/json"); + request.setEntity(entity); + HttpResponse response = httpClient.execute(request); + + assertEquals(200, response.getStatusLine().getStatusCode()); + verify(postRequestedFor(urlEqualTo("/create")).withHeader("content-type", equalTo("application/json"))); + + wireMockServer.stop(); + } + + @When("^users want to get information on the (.+) project$") + public void usersGetInformationOnAProject(String projectName) throws IOException { + wireMockServer.start(); + + configureFor("localhost", 8080); + stubFor(get(urlEqualTo("/projects/cucumber")).withHeader("accept", equalTo("application/json")).willReturn(aResponse().withBody(jsonString))); + + HttpGet request = new HttpGet("http://localhost:8080/projects/" + projectName.toLowerCase()); + request.addHeader("accept", "application/json"); + HttpResponse httpResponse = httpClient.execute(request); + String responseString = convertResponseToString(httpResponse); + + assertThat(responseString, containsString("\"testing-framework\": \"cucumber\"")); + assertThat(responseString, containsString("\"website\": \"cucumber.io\"")); + verify(getRequestedFor(urlEqualTo("/projects/cucumber")).withHeader("accept", equalTo("application/json"))); + + wireMockServer.stop(); + } + + @Then("^the server should handle it and return a success status$") + public void theServerShouldReturnASuccessStatus() { + } + + @Then("^the requested data is returned$") + public void theRequestedDataIsReturned() { + } + + private String convertResponseToString(HttpResponse response) throws IOException { + InputStream responseStream = response.getEntity().getContent(); + Scanner scanner = new Scanner(responseStream, "UTF-8"); + String responseString = scanner.useDelimiter("\\Z").next(); + scanner.close(); + return responseString; + } +} \ No newline at end of file From aadaba033182c848c448a78c3cfa5274af5b3855 Mon Sep 17 00:00:00 2001 From: nguyennamthai Date: Tue, 7 Jun 2016 18:44:55 +0700 Subject: [PATCH 054/283] Introduction to WireMock (#437) * initial commit for wiremock * introduction to wiremock * minor fixes * adds the wire_mock.json file --- rest-testing/pom.xml | 285 +++++++++--------- .../src/main/resources/wiremock_intro.json | 5 + .../wiremock/introduction/JUnitManaged.java | 127 ++++++++ .../introduction/ProgrammaticallyManaged.java | 52 ++++ 4 files changed, 330 insertions(+), 139 deletions(-) create mode 100644 rest-testing/src/main/resources/wiremock_intro.json create mode 100644 rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java create mode 100644 rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java diff --git a/rest-testing/pom.xml b/rest-testing/pom.xml index e159af0b77..3bd7efb4d5 100644 --- a/rest-testing/pom.xml +++ b/rest-testing/pom.xml @@ -1,173 +1,180 @@ - - 4.0.0 - com.baeldung - rest-testing - 0.1-SNAPSHOT + + 4.0.0 + com.baeldung + rest-testing + 0.1-SNAPSHOT - rest-testing + rest-testing - + - + - - com.google.guava - guava - ${guava.version} - + + com.google.guava + guava + ${guava.version} + - - commons-io - commons-io - 2.4 - + + commons-io + commons-io + 2.4 + - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + - + - - org.apache.httpcomponents - httpclient - ${httpclient.version} - - - org.apache.httpcomponents - httpcore - ${httpcore.version} - + + org.apache.httpcomponents + httpclient + ${httpclient.version} + + + org.apache.httpcomponents + httpcore + ${httpcore.version} + - + - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + - + - - org.slf4j - slf4j-api - ${org.slf4j.version} - - - ch.qos.logback - logback-classic - ${logback.version} - - - - org.slf4j - jcl-over-slf4j - ${org.slf4j.version} - runtime - - - org.slf4j - log4j-over-slf4j - ${org.slf4j.version} - + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + ch.qos.logback + logback-classic + ${logback.version} + + + + org.slf4j + jcl-over-slf4j + ${org.slf4j.version} + runtime + + + org.slf4j + log4j-over-slf4j + ${org.slf4j.version} + - + - - junit - junit - ${junit.version} - test - + + junit + junit + ${junit.version} + test + - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + - - org.mockito - mockito-core - ${mockito.version} - test - + + org.mockito + mockito-core + ${mockito.version} + test + + + com.github.tomakehurst + wiremock + 1.58 + test + - + - - rest-testing - - - src/main/resources - true - - + + rest-testing + + + src/main/resources + true + + - + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + - + - + - - - 2.7.2 + + + 2.7.2 - - 1.7.13 - 1.1.3 + + 1.7.13 + 1.1.3 - - 5.1.3.Final + + 5.1.3.Final - - 19.0 - 3.4 + + 19.0 + 3.4 - - 1.3 - 4.12 - 1.10.19 + + 1.3 + 4.12 + 1.10.19 - 4.4.1 - 4.5 + 4.4.1 + 4.5 - 2.9.0 + 2.9.0 - - 3.5.1 - 2.6 - 2.19.1 - 2.7 - 1.4.18 + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 - + \ No newline at end of file diff --git a/rest-testing/src/main/resources/wiremock_intro.json b/rest-testing/src/main/resources/wiremock_intro.json new file mode 100644 index 0000000000..ece2d35907 --- /dev/null +++ b/rest-testing/src/main/resources/wiremock_intro.json @@ -0,0 +1,5 @@ +{ + "testing-library": "WireMock", + "creator": "Tom Akehurst", + "website": "wiremock.org" +} \ No newline at end of file diff --git a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java new file mode 100644 index 0000000000..f6a46256ac --- /dev/null +++ b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java @@ -0,0 +1,127 @@ +package com.baeldung.rest.wiremock.introduction; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; +import static com.github.tomakehurst.wiremock.client.WireMock.matching; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Scanner; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.junit.Rule; +import org.junit.Test; + +import com.github.tomakehurst.wiremock.junit.WireMockRule; + +public class JUnitManaged { + @Rule + public WireMockRule wireMockRule = new WireMockRule(); + + @Test + public void givenJUnitManagedServer_whenMatchingURL_thenCorrect() throws IOException { + stubFor(get(urlPathMatching("/baeldung/.*")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody("\"testing-library\": \"WireMock\""))); + + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); + HttpResponse httpResponse = httpClient.execute(request); + String stringResponse = convertHttpResponseToString(httpResponse); + + verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + assertEquals(200, httpResponse.getStatusLine().getStatusCode()); + assertEquals("application/json", httpResponse.getFirstHeader("Content-Type").getValue()); + assertEquals("\"testing-library\": \"WireMock\"", stringResponse); + } + + @Test + public void givenJUnitManagedServer_whenMatchingHeaders_thenCorrect() throws IOException { + stubFor(get(urlPathEqualTo("/baeldung/wiremock")).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503).withHeader("Content-Type", "text/html").withBody("!!! Service Unavailable !!!"))); + + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); + request.addHeader("Accept", "text/html"); + HttpResponse httpResponse = httpClient.execute(request); + String stringResponse = convertHttpResponseToString(httpResponse); + + verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + assertEquals(503, httpResponse.getStatusLine().getStatusCode()); + assertEquals("text/html", httpResponse.getFirstHeader("Content-Type").getValue()); + assertEquals("!!! Service Unavailable !!!", stringResponse); + } + + @Test + public void givenJUnitManagedServer_whenMatchingBody_thenCorrect() throws IOException { + stubFor(post(urlEqualTo("/baeldung/wiremock")).withHeader("Content-Type", equalTo("application/json")).withRequestBody(containing("\"testing-library\": \"WireMock\"")).withRequestBody(containing("\"creator\": \"Tom Akehurst\"")) + .withRequestBody(containing("\"website\": \"wiremock.org\"")).willReturn(aResponse().withStatus(200))); + + InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("wiremock_intro.json"); + String jsonString = convertInputStreamToString(jsonInputStream); + StringEntity entity = new StringEntity(jsonString); + + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpPost request = new HttpPost("http://localhost:8080/baeldung/wiremock"); + request.addHeader("Content-Type", "application/json"); + request.setEntity(entity); + HttpResponse response = httpClient.execute(request); + + verify(postRequestedFor(urlEqualTo("/baeldung/wiremock")).withHeader("Content-Type", equalTo("application/json"))); + assertEquals(200, response.getStatusLine().getStatusCode()); + } + + @Test + public void givenJUnitManagedServer_whenNotUsingPriority_thenCorrect() throws IOException { + stubFor(get(urlPathMatching("/baeldung/.*")).willReturn(aResponse().withStatus(200))); + stubFor(get(urlPathEqualTo("/baeldung/wiremock")).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503))); + + HttpResponse httpResponse = generateClientAndReceiveResponseForPriorityTests(); + + verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + assertEquals(503, httpResponse.getStatusLine().getStatusCode()); + } + + @Test + public void givenJUnitManagedServer_whenUsingPriority_thenCorrect() throws IOException { + stubFor(get(urlPathMatching("/baeldung/.*")).atPriority(1).willReturn(aResponse().withStatus(200))); + stubFor(get(urlPathEqualTo("/baeldung/wiremock")).atPriority(2).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503))); + + HttpResponse httpResponse = generateClientAndReceiveResponseForPriorityTests(); + + verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + assertEquals(200, httpResponse.getStatusLine().getStatusCode()); + } + + private String convertHttpResponseToString(HttpResponse httpResponse) throws IOException { + InputStream inputStream = httpResponse.getEntity().getContent(); + return convertInputStreamToString(inputStream); + } + + private String convertInputStreamToString(InputStream inputStream) { + Scanner scanner = new Scanner(inputStream, "UTF-8"); + String string = scanner.useDelimiter("\\Z").next(); + scanner.close(); + return string; + } + + private HttpResponse generateClientAndReceiveResponseForPriorityTests() throws IOException { + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); + request.addHeader("Accept", "text/xml"); + return httpClient.execute(request); + } +} \ No newline at end of file diff --git a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java new file mode 100644 index 0000000000..34b445ac0f --- /dev/null +++ b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java @@ -0,0 +1,52 @@ +package com.baeldung.rest.wiremock.introduction; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.configureFor; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Scanner; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.junit.Test; + +import com.github.tomakehurst.wiremock.WireMockServer; + +public class ProgrammaticallyManaged { + WireMockServer wireMockServer = new WireMockServer(); + CloseableHttpClient httpClient = HttpClients.createDefault(); + + @Test + public void givenProgrammaticallyManagedServer_whenUsingSimpleStubbing_thenCorrect() throws IOException { + wireMockServer.start(); + + configureFor("localhost", 8080); + stubFor(get(urlEqualTo("/baeldung")).willReturn(aResponse().withBody("Welcome to Baeldung!"))); + + HttpGet request = new HttpGet("http://localhost:8080/baeldung"); + HttpResponse httpResponse = httpClient.execute(request); + String stringResponse = convertResponseToString(httpResponse); + + verify(getRequestedFor(urlEqualTo("/baeldung"))); + assertEquals("Welcome to Baeldung!", stringResponse); + + wireMockServer.stop(); + } + + private String convertResponseToString(HttpResponse response) throws IOException { + InputStream responseStream = response.getEntity().getContent(); + Scanner scanner = new Scanner(responseStream, "UTF-8"); + String stringResponse = scanner.useDelimiter("\\Z").next(); + scanner.close(); + return stringResponse; + } +} \ No newline at end of file From 04c942f5d0b73cb7961bcbc4b606bd2ce6b3a3d5 Mon Sep 17 00:00:00 2001 From: nguyennamthai Date: Tue, 7 Jun 2016 22:21:06 +0700 Subject: [PATCH 055/283] Spring Boot Support for jOOQ (#438) * initial commit * revision of spring boot support for jooq * initial commit for spring boot support for jooq --- jooq-spring/pom.xml | 20 +- .../information_schema/InformationSchema.java | 113 +++ .../db/information_schema/Keys.java | 42 + .../db/information_schema/Tables.java | 196 ++++ .../information_schema/tables/Catalogs.java | 87 ++ .../information_schema/tables/Collations.java | 92 ++ .../tables/ColumnPrivileges.java | 122 +++ .../db/information_schema/tables/Columns.java | 197 ++++ .../information_schema/tables/Constants.java | 117 +++ .../tables/Constraints.java | 147 +++ .../tables/CrossReferences.java | 152 +++ .../db/information_schema/tables/Domains.java | 152 +++ .../tables/FunctionAliases.java | 142 +++ .../tables/FunctionColumns.java | 167 ++++ .../db/information_schema/tables/Help.java | 107 ++ .../db/information_schema/tables/InDoubt.java | 92 ++ .../db/information_schema/tables/Indexes.java | 187 ++++ .../db/information_schema/tables/Locks.java | 102 ++ .../tables/QueryStatistics.java | 142 +++ .../db/information_schema/tables/Rights.java | 117 +++ .../db/information_schema/tables/Roles.java | 97 ++ .../information_schema/tables/Schemata.java | 122 +++ .../information_schema/tables/Sequences.java | 142 +++ .../tables/SessionState.java | 92 ++ .../information_schema/tables/Sessions.java | 112 +++ .../information_schema/tables/Settings.java | 92 ++ .../tables/TablePrivileges.java | 117 +++ .../information_schema/tables/TableTypes.java | 87 ++ .../db/information_schema/tables/Tables.java | 142 +++ .../information_schema/tables/Triggers.java | 152 +++ .../information_schema/tables/TypeInfo.java | 152 +++ .../db/information_schema/tables/Users.java | 102 ++ .../db/information_schema/tables/Views.java | 127 +++ .../tables/records/CatalogsRecord.java | 119 +++ .../tables/records/CollationsRecord.java | 160 +++ .../records/ColumnPrivilegesRecord.java | 406 ++++++++ .../tables/records/ColumnsRecord.java | 392 ++++++++ .../tables/records/ConstantsRecord.java | 365 +++++++ .../tables/records/ConstraintsRecord.java | 611 ++++++++++++ .../tables/records/CrossReferencesRecord.java | 652 ++++++++++++ .../tables/records/DomainsRecord.java | 652 ++++++++++++ .../tables/records/FunctionAliasesRecord.java | 570 +++++++++++ .../tables/records/FunctionColumnsRecord.java | 775 +++++++++++++++ .../tables/records/HelpRecord.java | 283 ++++++ .../tables/records/InDoubtRecord.java | 160 +++ .../tables/records/IndexesRecord.java | 939 ++++++++++++++++++ .../tables/records/LocksRecord.java | 242 +++++ .../tables/records/QueryStatisticsRecord.java | 570 +++++++++++ .../tables/records/RightsRecord.java | 365 +++++++ .../tables/records/RolesRecord.java | 201 ++++ .../tables/records/SchemataRecord.java | 406 ++++++++ .../tables/records/SequencesRecord.java | 570 +++++++++++ .../tables/records/SessionStateRecord.java | 160 +++ .../tables/records/SessionsRecord.java | 324 ++++++ .../tables/records/SettingsRecord.java | 160 +++ .../tables/records/TablePrivilegesRecord.java | 365 +++++++ .../tables/records/TableTypesRecord.java | 119 +++ .../tables/records/TablesRecord.java | 570 +++++++++++ .../tables/records/TriggersRecord.java | 652 ++++++++++++ .../tables/records/TypeInfoRecord.java | 652 ++++++++++++ .../tables/records/UsersRecord.java | 242 +++++ .../tables/records/ViewsRecord.java | 447 +++++++++ .../jooq/introduction/db/public_/Keys.java | 69 ++ .../jooq/introduction/db/public_/Public.java | 61 ++ .../jooq/introduction/db/public_/Tables.java | 41 + .../db/public_/tables/Author.java | 118 +++ .../db/public_/tables/AuthorBook.java | 122 +++ .../introduction/db/public_/tables/Book.java | 113 +++ .../tables/records/AuthorBookRecord.java | 172 ++++ .../public_/tables/records/AuthorRecord.java | 214 ++++ .../db/public_/tables/records/BookRecord.java | 173 ++++ .../src/main/resources/application.properties | 3 + .../baeldung/jooq/springboot/Application.java | 68 ++ .../jooq/springboot/SpringBootTest.java | 85 ++ 74 files changed, 17396 insertions(+), 1 deletion(-) create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/InformationSchema.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Keys.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Tables.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Catalogs.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Collations.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/ColumnPrivileges.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Columns.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constants.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constraints.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/CrossReferences.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Domains.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionAliases.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionColumns.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Help.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/InDoubt.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Indexes.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Locks.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/QueryStatistics.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Rights.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Roles.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Schemata.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sequences.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/SessionState.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sessions.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Settings.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TablePrivileges.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TableTypes.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Tables.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Triggers.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TypeInfo.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Users.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Views.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CatalogsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CollationsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnPrivilegesRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstantsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstraintsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CrossReferencesRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/DomainsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionAliasesRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionColumnsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/HelpRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/InDoubtRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/IndexesRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/LocksRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/QueryStatisticsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RightsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RolesRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SchemataRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SequencesRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionStateRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SettingsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablePrivilegesRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TableTypesRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablesRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TriggersRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TypeInfoRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/UsersRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ViewsRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Keys.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Public.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Tables.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Author.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/AuthorBook.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Book.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorBookRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorRecord.java create mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/BookRecord.java create mode 100644 jooq-spring/src/main/resources/application.properties create mode 100644 jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java create mode 100644 jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java diff --git a/jooq-spring/pom.xml b/jooq-spring/pom.xml index 76198c4993..7a3ec0ac24 100644 --- a/jooq-spring/pom.xml +++ b/jooq-spring/pom.xml @@ -14,6 +14,19 @@ 4.12 + + + + + org.springframework.boot + spring-boot-dependencies + 1.3.3.RELEASE + pom + import + + + + @@ -40,6 +53,11 @@ spring-jdbc ${org.springframework.version} + + org.springframework.boot + spring-boot-starter-jooq + 1.3.3.RELEASE + @@ -67,7 +85,7 @@ spring-test ${org.springframework.version} test - + diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/InformationSchema.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/InformationSchema.java new file mode 100644 index 0000000000..94138a9ebe --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/InformationSchema.java @@ -0,0 +1,113 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Catalogs; +import com.baeldung.jooq.introduction.db.information_schema.tables.Collations; +import com.baeldung.jooq.introduction.db.information_schema.tables.ColumnPrivileges; +import com.baeldung.jooq.introduction.db.information_schema.tables.Columns; +import com.baeldung.jooq.introduction.db.information_schema.tables.Constants; +import com.baeldung.jooq.introduction.db.information_schema.tables.Constraints; +import com.baeldung.jooq.introduction.db.information_schema.tables.CrossReferences; +import com.baeldung.jooq.introduction.db.information_schema.tables.Domains; +import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionAliases; +import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionColumns; +import com.baeldung.jooq.introduction.db.information_schema.tables.Help; +import com.baeldung.jooq.introduction.db.information_schema.tables.InDoubt; +import com.baeldung.jooq.introduction.db.information_schema.tables.Indexes; +import com.baeldung.jooq.introduction.db.information_schema.tables.Locks; +import com.baeldung.jooq.introduction.db.information_schema.tables.QueryStatistics; +import com.baeldung.jooq.introduction.db.information_schema.tables.Rights; +import com.baeldung.jooq.introduction.db.information_schema.tables.Roles; +import com.baeldung.jooq.introduction.db.information_schema.tables.Schemata; +import com.baeldung.jooq.introduction.db.information_schema.tables.Sequences; +import com.baeldung.jooq.introduction.db.information_schema.tables.SessionState; +import com.baeldung.jooq.introduction.db.information_schema.tables.Sessions; +import com.baeldung.jooq.introduction.db.information_schema.tables.Settings; +import com.baeldung.jooq.introduction.db.information_schema.tables.TablePrivileges; +import com.baeldung.jooq.introduction.db.information_schema.tables.TableTypes; +import com.baeldung.jooq.introduction.db.information_schema.tables.Tables; +import com.baeldung.jooq.introduction.db.information_schema.tables.Triggers; +import com.baeldung.jooq.introduction.db.information_schema.tables.TypeInfo; +import com.baeldung.jooq.introduction.db.information_schema.tables.Users; +import com.baeldung.jooq.introduction.db.information_schema.tables.Views; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Generated; + +import org.jooq.Table; +import org.jooq.impl.SchemaImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class InformationSchema extends SchemaImpl { + + private static final long serialVersionUID = 436617961; + + /** + * The reference instance of INFORMATION_SCHEMA + */ + public static final InformationSchema INFORMATION_SCHEMA = new InformationSchema(); + + /** + * No further instances allowed + */ + private InformationSchema() { + super("INFORMATION_SCHEMA"); + } + + @Override + public final List> getTables() { + List result = new ArrayList(); + result.addAll(getTables0()); + return result; + } + + private final List> getTables0() { + return Arrays.>asList( + QueryStatistics.QUERY_STATISTICS, + SessionState.SESSION_STATE, + Locks.LOCKS, + Sessions.SESSIONS, + Triggers.TRIGGERS, + Domains.DOMAINS, + Constants.CONSTANTS, + FunctionColumns.FUNCTION_COLUMNS, + Constraints.CONSTRAINTS, + CrossReferences.CROSS_REFERENCES, + InDoubt.IN_DOUBT, + Views.VIEWS, + Collations.COLLATIONS, + ColumnPrivileges.COLUMN_PRIVILEGES, + TablePrivileges.TABLE_PRIVILEGES, + Schemata.SCHEMATA, + FunctionAliases.FUNCTION_ALIASES, + Rights.RIGHTS, + Roles.ROLES, + Users.USERS, + Sequences.SEQUENCES, + Help.HELP, + Settings.SETTINGS, + Catalogs.CATALOGS, + TypeInfo.TYPE_INFO, + TableTypes.TABLE_TYPES, + Indexes.INDEXES, + Columns.COLUMNS, + Tables.TABLES); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Keys.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Keys.java new file mode 100644 index 0000000000..87a1a03e55 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Keys.java @@ -0,0 +1,42 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema; + + +import javax.annotation.Generated; + + +/** + * A class modelling foreign key relationships between tables of the INFORMATION_SCHEMA + * schema + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Keys { + + // ------------------------------------------------------------------------- + // IDENTITY definitions + // ------------------------------------------------------------------------- + + + // ------------------------------------------------------------------------- + // UNIQUE and PRIMARY KEY definitions + // ------------------------------------------------------------------------- + + + // ------------------------------------------------------------------------- + // FOREIGN KEY definitions + // ------------------------------------------------------------------------- + + + // ------------------------------------------------------------------------- + // [#1459] distribute members to avoid static initialisers > 64kb + // ------------------------------------------------------------------------- +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Tables.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Tables.java new file mode 100644 index 0000000000..9d66776232 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Tables.java @@ -0,0 +1,196 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Catalogs; +import com.baeldung.jooq.introduction.db.information_schema.tables.Collations; +import com.baeldung.jooq.introduction.db.information_schema.tables.ColumnPrivileges; +import com.baeldung.jooq.introduction.db.information_schema.tables.Columns; +import com.baeldung.jooq.introduction.db.information_schema.tables.Constants; +import com.baeldung.jooq.introduction.db.information_schema.tables.Constraints; +import com.baeldung.jooq.introduction.db.information_schema.tables.CrossReferences; +import com.baeldung.jooq.introduction.db.information_schema.tables.Domains; +import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionAliases; +import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionColumns; +import com.baeldung.jooq.introduction.db.information_schema.tables.Help; +import com.baeldung.jooq.introduction.db.information_schema.tables.InDoubt; +import com.baeldung.jooq.introduction.db.information_schema.tables.Indexes; +import com.baeldung.jooq.introduction.db.information_schema.tables.Locks; +import com.baeldung.jooq.introduction.db.information_schema.tables.QueryStatistics; +import com.baeldung.jooq.introduction.db.information_schema.tables.Rights; +import com.baeldung.jooq.introduction.db.information_schema.tables.Roles; +import com.baeldung.jooq.introduction.db.information_schema.tables.Schemata; +import com.baeldung.jooq.introduction.db.information_schema.tables.Sequences; +import com.baeldung.jooq.introduction.db.information_schema.tables.SessionState; +import com.baeldung.jooq.introduction.db.information_schema.tables.Sessions; +import com.baeldung.jooq.introduction.db.information_schema.tables.Settings; +import com.baeldung.jooq.introduction.db.information_schema.tables.TablePrivileges; +import com.baeldung.jooq.introduction.db.information_schema.tables.TableTypes; +import com.baeldung.jooq.introduction.db.information_schema.tables.Triggers; +import com.baeldung.jooq.introduction.db.information_schema.tables.TypeInfo; +import com.baeldung.jooq.introduction.db.information_schema.tables.Users; +import com.baeldung.jooq.introduction.db.information_schema.tables.Views; + +import javax.annotation.Generated; + + +/** + * Convenience access to all tables in INFORMATION_SCHEMA + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Tables { + + /** + * The table INFORMATION_SCHEMA.QUERY_STATISTICS + */ + public static final QueryStatistics QUERY_STATISTICS = com.baeldung.jooq.introduction.db.information_schema.tables.QueryStatistics.QUERY_STATISTICS; + + /** + * The table INFORMATION_SCHEMA.SESSION_STATE + */ + public static final SessionState SESSION_STATE = com.baeldung.jooq.introduction.db.information_schema.tables.SessionState.SESSION_STATE; + + /** + * The table INFORMATION_SCHEMA.LOCKS + */ + public static final Locks LOCKS = com.baeldung.jooq.introduction.db.information_schema.tables.Locks.LOCKS; + + /** + * The table INFORMATION_SCHEMA.SESSIONS + */ + public static final Sessions SESSIONS = com.baeldung.jooq.introduction.db.information_schema.tables.Sessions.SESSIONS; + + /** + * The table INFORMATION_SCHEMA.TRIGGERS + */ + public static final Triggers TRIGGERS = com.baeldung.jooq.introduction.db.information_schema.tables.Triggers.TRIGGERS; + + /** + * The table INFORMATION_SCHEMA.DOMAINS + */ + public static final Domains DOMAINS = com.baeldung.jooq.introduction.db.information_schema.tables.Domains.DOMAINS; + + /** + * The table INFORMATION_SCHEMA.CONSTANTS + */ + public static final Constants CONSTANTS = com.baeldung.jooq.introduction.db.information_schema.tables.Constants.CONSTANTS; + + /** + * The table INFORMATION_SCHEMA.FUNCTION_COLUMNS + */ + public static final FunctionColumns FUNCTION_COLUMNS = com.baeldung.jooq.introduction.db.information_schema.tables.FunctionColumns.FUNCTION_COLUMNS; + + /** + * The table INFORMATION_SCHEMA.CONSTRAINTS + */ + public static final Constraints CONSTRAINTS = com.baeldung.jooq.introduction.db.information_schema.tables.Constraints.CONSTRAINTS; + + /** + * The table INFORMATION_SCHEMA.CROSS_REFERENCES + */ + public static final CrossReferences CROSS_REFERENCES = com.baeldung.jooq.introduction.db.information_schema.tables.CrossReferences.CROSS_REFERENCES; + + /** + * The table INFORMATION_SCHEMA.IN_DOUBT + */ + public static final InDoubt IN_DOUBT = com.baeldung.jooq.introduction.db.information_schema.tables.InDoubt.IN_DOUBT; + + /** + * The table INFORMATION_SCHEMA.VIEWS + */ + public static final Views VIEWS = com.baeldung.jooq.introduction.db.information_schema.tables.Views.VIEWS; + + /** + * The table INFORMATION_SCHEMA.COLLATIONS + */ + public static final Collations COLLATIONS = com.baeldung.jooq.introduction.db.information_schema.tables.Collations.COLLATIONS; + + /** + * The table INFORMATION_SCHEMA.COLUMN_PRIVILEGES + */ + public static final ColumnPrivileges COLUMN_PRIVILEGES = com.baeldung.jooq.introduction.db.information_schema.tables.ColumnPrivileges.COLUMN_PRIVILEGES; + + /** + * The table INFORMATION_SCHEMA.TABLE_PRIVILEGES + */ + public static final TablePrivileges TABLE_PRIVILEGES = com.baeldung.jooq.introduction.db.information_schema.tables.TablePrivileges.TABLE_PRIVILEGES; + + /** + * The table INFORMATION_SCHEMA.SCHEMATA + */ + public static final Schemata SCHEMATA = com.baeldung.jooq.introduction.db.information_schema.tables.Schemata.SCHEMATA; + + /** + * The table INFORMATION_SCHEMA.FUNCTION_ALIASES + */ + public static final FunctionAliases FUNCTION_ALIASES = com.baeldung.jooq.introduction.db.information_schema.tables.FunctionAliases.FUNCTION_ALIASES; + + /** + * The table INFORMATION_SCHEMA.RIGHTS + */ + public static final Rights RIGHTS = com.baeldung.jooq.introduction.db.information_schema.tables.Rights.RIGHTS; + + /** + * The table INFORMATION_SCHEMA.ROLES + */ + public static final Roles ROLES = com.baeldung.jooq.introduction.db.information_schema.tables.Roles.ROLES; + + /** + * The table INFORMATION_SCHEMA.USERS + */ + public static final Users USERS = com.baeldung.jooq.introduction.db.information_schema.tables.Users.USERS; + + /** + * The table INFORMATION_SCHEMA.SEQUENCES + */ + public static final Sequences SEQUENCES = com.baeldung.jooq.introduction.db.information_schema.tables.Sequences.SEQUENCES; + + /** + * The table INFORMATION_SCHEMA.HELP + */ + public static final Help HELP = com.baeldung.jooq.introduction.db.information_schema.tables.Help.HELP; + + /** + * The table INFORMATION_SCHEMA.SETTINGS + */ + public static final Settings SETTINGS = com.baeldung.jooq.introduction.db.information_schema.tables.Settings.SETTINGS; + + /** + * The table INFORMATION_SCHEMA.CATALOGS + */ + public static final Catalogs CATALOGS = com.baeldung.jooq.introduction.db.information_schema.tables.Catalogs.CATALOGS; + + /** + * The table INFORMATION_SCHEMA.TYPE_INFO + */ + public static final TypeInfo TYPE_INFO = com.baeldung.jooq.introduction.db.information_schema.tables.TypeInfo.TYPE_INFO; + + /** + * The table INFORMATION_SCHEMA.TABLE_TYPES + */ + public static final TableTypes TABLE_TYPES = com.baeldung.jooq.introduction.db.information_schema.tables.TableTypes.TABLE_TYPES; + + /** + * The table INFORMATION_SCHEMA.INDEXES + */ + public static final Indexes INDEXES = com.baeldung.jooq.introduction.db.information_schema.tables.Indexes.INDEXES; + + /** + * The table INFORMATION_SCHEMA.COLUMNS + */ + public static final Columns COLUMNS = com.baeldung.jooq.introduction.db.information_schema.tables.Columns.COLUMNS; + + /** + * The table INFORMATION_SCHEMA.TABLES + */ + public static final com.baeldung.jooq.introduction.db.information_schema.tables.Tables TABLES = com.baeldung.jooq.introduction.db.information_schema.tables.Tables.TABLES; +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Catalogs.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Catalogs.java new file mode 100644 index 0000000000..f7091cfbe4 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Catalogs.java @@ -0,0 +1,87 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.CatalogsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Catalogs extends TableImpl { + + private static final long serialVersionUID = 1558896306; + + /** + * The reference instance of INFORMATION_SCHEMA.CATALOGS + */ + public static final Catalogs CATALOGS = new Catalogs(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return CatalogsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.CATALOGS.CATALOG_NAME. + */ + public final TableField CATALOG_NAME = createField("CATALOG_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.CATALOGS table reference + */ + public Catalogs() { + this("CATALOGS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.CATALOGS table reference + */ + public Catalogs(String alias) { + this(alias, CATALOGS); + } + + private Catalogs(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Catalogs(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Catalogs as(String alias) { + return new Catalogs(alias, this); + } + + /** + * Rename this table + */ + public Catalogs rename(String name) { + return new Catalogs(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Collations.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Collations.java new file mode 100644 index 0000000000..e16ed17605 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Collations.java @@ -0,0 +1,92 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.CollationsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Collations extends TableImpl { + + private static final long serialVersionUID = 1978393146; + + /** + * The reference instance of INFORMATION_SCHEMA.COLLATIONS + */ + public static final Collations COLLATIONS = new Collations(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return CollationsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.COLLATIONS.NAME. + */ + public final TableField NAME = createField("NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLLATIONS.KEY. + */ + public final TableField KEY = createField("KEY", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.COLLATIONS table reference + */ + public Collations() { + this("COLLATIONS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.COLLATIONS table reference + */ + public Collations(String alias) { + this(alias, COLLATIONS); + } + + private Collations(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Collations(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Collations as(String alias) { + return new Collations(alias, this); + } + + /** + * Rename this table + */ + public Collations rename(String name) { + return new Collations(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/ColumnPrivileges.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/ColumnPrivileges.java new file mode 100644 index 0000000000..307682f434 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/ColumnPrivileges.java @@ -0,0 +1,122 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.ColumnPrivilegesRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class ColumnPrivileges extends TableImpl { + + private static final long serialVersionUID = -282101680; + + /** + * The reference instance of INFORMATION_SCHEMA.COLUMN_PRIVILEGES + */ + public static final ColumnPrivileges COLUMN_PRIVILEGES = new ColumnPrivileges(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return ColumnPrivilegesRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTOR. + */ + public final TableField GRANTOR = createField("GRANTOR", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTEE. + */ + public final TableField GRANTEE = createField("GRANTEE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_CATALOG. + */ + public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.COLUMN_NAME. + */ + public final TableField COLUMN_NAME = createField("COLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.PRIVILEGE_TYPE. + */ + public final TableField PRIVILEGE_TYPE = createField("PRIVILEGE_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.IS_GRANTABLE. + */ + public final TableField IS_GRANTABLE = createField("IS_GRANTABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.COLUMN_PRIVILEGES table reference + */ + public ColumnPrivileges() { + this("COLUMN_PRIVILEGES", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.COLUMN_PRIVILEGES table reference + */ + public ColumnPrivileges(String alias) { + this(alias, COLUMN_PRIVILEGES); + } + + private ColumnPrivileges(String alias, Table aliased) { + this(alias, aliased, null); + } + + private ColumnPrivileges(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivileges as(String alias) { + return new ColumnPrivileges(alias, this); + } + + /** + * Rename this table + */ + public ColumnPrivileges rename(String name) { + return new ColumnPrivileges(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Columns.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Columns.java new file mode 100644 index 0000000000..d95a518c1f --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Columns.java @@ -0,0 +1,197 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.ColumnsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Columns extends TableImpl { + + private static final long serialVersionUID = 1721995161; + + /** + * The reference instance of INFORMATION_SCHEMA.COLUMNS + */ + public static final Columns COLUMNS = new Columns(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return ColumnsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG. + */ + public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME. + */ + public final TableField COLUMN_NAME = createField("COLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION. + */ + public final TableField ORDINAL_POSITION = createField("ORDINAL_POSITION", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT. + */ + public final TableField COLUMN_DEFAULT = createField("COLUMN_DEFAULT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.IS_NULLABLE. + */ + public final TableField IS_NULLABLE = createField("IS_NULLABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.DATA_TYPE. + */ + public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.CHARACTER_MAXIMUM_LENGTH. + */ + public final TableField CHARACTER_MAXIMUM_LENGTH = createField("CHARACTER_MAXIMUM_LENGTH", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.CHARACTER_OCTET_LENGTH. + */ + public final TableField CHARACTER_OCTET_LENGTH = createField("CHARACTER_OCTET_LENGTH", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION. + */ + public final TableField NUMERIC_PRECISION = createField("NUMERIC_PRECISION", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION_RADIX. + */ + public final TableField NUMERIC_PRECISION_RADIX = createField("NUMERIC_PRECISION_RADIX", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.NUMERIC_SCALE. + */ + public final TableField NUMERIC_SCALE = createField("NUMERIC_SCALE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.CHARACTER_SET_NAME. + */ + public final TableField CHARACTER_SET_NAME = createField("CHARACTER_SET_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.COLLATION_NAME. + */ + public final TableField COLLATION_NAME = createField("COLLATION_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.TYPE_NAME. + */ + public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.NULLABLE. + */ + public final TableField NULLABLE = createField("NULLABLE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.IS_COMPUTED. + */ + public final TableField IS_COMPUTED = createField("IS_COMPUTED", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.SELECTIVITY. + */ + public final TableField SELECTIVITY = createField("SELECTIVITY", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.CHECK_CONSTRAINT. + */ + public final TableField CHECK_CONSTRAINT = createField("CHECK_CONSTRAINT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.SEQUENCE_NAME. + */ + public final TableField SEQUENCE_NAME = createField("SEQUENCE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.COLUMNS.SOURCE_DATA_TYPE. + */ + public final TableField SOURCE_DATA_TYPE = createField("SOURCE_DATA_TYPE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * Create a INFORMATION_SCHEMA.COLUMNS table reference + */ + public Columns() { + this("COLUMNS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.COLUMNS table reference + */ + public Columns(String alias) { + this(alias, COLUMNS); + } + + private Columns(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Columns(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Columns as(String alias) { + return new Columns(alias, this); + } + + /** + * Rename this table + */ + public Columns rename(String name) { + return new Columns(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constants.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constants.java new file mode 100644 index 0000000000..7d2d97f5f8 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constants.java @@ -0,0 +1,117 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.ConstantsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Constants extends TableImpl { + + private static final long serialVersionUID = 107996087; + + /** + * The reference instance of INFORMATION_SCHEMA.CONSTANTS + */ + public static final Constants CONSTANTS = new Constants(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return ConstantsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.CONSTANTS.CONSTANT_CATALOG. + */ + public final TableField CONSTANT_CATALOG = createField("CONSTANT_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTANTS.CONSTANT_SCHEMA. + */ + public final TableField CONSTANT_SCHEMA = createField("CONSTANT_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTANTS.CONSTANT_NAME. + */ + public final TableField CONSTANT_NAME = createField("CONSTANT_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTANTS.DATA_TYPE. + */ + public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTANTS.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTANTS.SQL. + */ + public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTANTS.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.CONSTANTS table reference + */ + public Constants() { + this("CONSTANTS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.CONSTANTS table reference + */ + public Constants(String alias) { + this(alias, CONSTANTS); + } + + private Constants(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Constants(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Constants as(String alias) { + return new Constants(alias, this); + } + + /** + * Rename this table + */ + public Constants rename(String name) { + return new Constants(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constraints.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constraints.java new file mode 100644 index 0000000000..1c95f369ec --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constraints.java @@ -0,0 +1,147 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.ConstraintsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Constraints extends TableImpl { + + private static final long serialVersionUID = 529190017; + + /** + * The reference instance of INFORMATION_SCHEMA.CONSTRAINTS + */ + public static final Constraints CONSTRAINTS = new Constraints(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return ConstraintsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_CATALOG. + */ + public final TableField CONSTRAINT_CATALOG = createField("CONSTRAINT_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_SCHEMA. + */ + public final TableField CONSTRAINT_SCHEMA = createField("CONSTRAINT_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_NAME. + */ + public final TableField CONSTRAINT_NAME = createField("CONSTRAINT_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_TYPE. + */ + public final TableField CONSTRAINT_TYPE = createField("CONSTRAINT_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.TABLE_CATALOG. + */ + public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.UNIQUE_INDEX_NAME. + */ + public final TableField UNIQUE_INDEX_NAME = createField("UNIQUE_INDEX_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.CHECK_EXPRESSION. + */ + public final TableField CHECK_EXPRESSION = createField("CHECK_EXPRESSION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.COLUMN_LIST. + */ + public final TableField COLUMN_LIST = createField("COLUMN_LIST", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.SQL. + */ + public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CONSTRAINTS.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.CONSTRAINTS table reference + */ + public Constraints() { + this("CONSTRAINTS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.CONSTRAINTS table reference + */ + public Constraints(String alias) { + this(alias, CONSTRAINTS); + } + + private Constraints(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Constraints(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Constraints as(String alias) { + return new Constraints(alias, this); + } + + /** + * Rename this table + */ + public Constraints rename(String name) { + return new Constraints(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/CrossReferences.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/CrossReferences.java new file mode 100644 index 0000000000..d3d9cebded --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/CrossReferences.java @@ -0,0 +1,152 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.CrossReferencesRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class CrossReferences extends TableImpl { + + private static final long serialVersionUID = 846378739; + + /** + * The reference instance of INFORMATION_SCHEMA.CROSS_REFERENCES + */ + public static final CrossReferences CROSS_REFERENCES = new CrossReferences(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return CrossReferencesRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_CATALOG. + */ + public final TableField PKTABLE_CATALOG = createField("PKTABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_SCHEMA. + */ + public final TableField PKTABLE_SCHEMA = createField("PKTABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_NAME. + */ + public final TableField PKTABLE_NAME = createField("PKTABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PKCOLUMN_NAME. + */ + public final TableField PKCOLUMN_NAME = createField("PKCOLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_CATALOG. + */ + public final TableField FKTABLE_CATALOG = createField("FKTABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_SCHEMA. + */ + public final TableField FKTABLE_SCHEMA = createField("FKTABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_NAME. + */ + public final TableField FKTABLE_NAME = createField("FKTABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FKCOLUMN_NAME. + */ + public final TableField FKCOLUMN_NAME = createField("FKCOLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.ORDINAL_POSITION. + */ + public final TableField ORDINAL_POSITION = createField("ORDINAL_POSITION", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.UPDATE_RULE. + */ + public final TableField UPDATE_RULE = createField("UPDATE_RULE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.DELETE_RULE. + */ + public final TableField DELETE_RULE = createField("DELETE_RULE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FK_NAME. + */ + public final TableField FK_NAME = createField("FK_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PK_NAME. + */ + public final TableField PK_NAME = createField("PK_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.CROSS_REFERENCES.DEFERRABILITY. + */ + public final TableField DEFERRABILITY = createField("DEFERRABILITY", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * Create a INFORMATION_SCHEMA.CROSS_REFERENCES table reference + */ + public CrossReferences() { + this("CROSS_REFERENCES", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.CROSS_REFERENCES table reference + */ + public CrossReferences(String alias) { + this(alias, CROSS_REFERENCES); + } + + private CrossReferences(String alias, Table aliased) { + this(alias, aliased, null); + } + + private CrossReferences(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferences as(String alias) { + return new CrossReferences(alias, this); + } + + /** + * Rename this table + */ + public CrossReferences rename(String name) { + return new CrossReferences(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Domains.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Domains.java new file mode 100644 index 0000000000..597f3d2e2b --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Domains.java @@ -0,0 +1,152 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.DomainsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Domains extends TableImpl { + + private static final long serialVersionUID = -742107682; + + /** + * The reference instance of INFORMATION_SCHEMA.DOMAINS + */ + public static final Domains DOMAINS = new Domains(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return DomainsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.DOMAINS.DOMAIN_CATALOG. + */ + public final TableField DOMAIN_CATALOG = createField("DOMAIN_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.DOMAIN_SCHEMA. + */ + public final TableField DOMAIN_SCHEMA = createField("DOMAIN_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.DOMAIN_NAME. + */ + public final TableField DOMAIN_NAME = createField("DOMAIN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.COLUMN_DEFAULT. + */ + public final TableField COLUMN_DEFAULT = createField("COLUMN_DEFAULT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.IS_NULLABLE. + */ + public final TableField IS_NULLABLE = createField("IS_NULLABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.DATA_TYPE. + */ + public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.PRECISION. + */ + public final TableField PRECISION = createField("PRECISION", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.SCALE. + */ + public final TableField SCALE = createField("SCALE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.TYPE_NAME. + */ + public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.SELECTIVITY. + */ + public final TableField SELECTIVITY = createField("SELECTIVITY", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.CHECK_CONSTRAINT. + */ + public final TableField CHECK_CONSTRAINT = createField("CHECK_CONSTRAINT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.SQL. + */ + public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.DOMAINS.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.DOMAINS table reference + */ + public Domains() { + this("DOMAINS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.DOMAINS table reference + */ + public Domains(String alias) { + this(alias, DOMAINS); + } + + private Domains(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Domains(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Domains as(String alias) { + return new Domains(alias, this); + } + + /** + * Rename this table + */ + public Domains rename(String name) { + return new Domains(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionAliases.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionAliases.java new file mode 100644 index 0000000000..8b85980d38 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionAliases.java @@ -0,0 +1,142 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.FunctionAliasesRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class FunctionAliases extends TableImpl { + + private static final long serialVersionUID = -232882186; + + /** + * The reference instance of INFORMATION_SCHEMA.FUNCTION_ALIASES + */ + public static final FunctionAliases FUNCTION_ALIASES = new FunctionAliases(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return FunctionAliasesRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_CATALOG. + */ + public final TableField ALIAS_CATALOG = createField("ALIAS_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_SCHEMA. + */ + public final TableField ALIAS_SCHEMA = createField("ALIAS_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_NAME. + */ + public final TableField ALIAS_NAME = createField("ALIAS_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_CLASS. + */ + public final TableField JAVA_CLASS = createField("JAVA_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_METHOD. + */ + public final TableField JAVA_METHOD = createField("JAVA_METHOD", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.DATA_TYPE. + */ + public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.TYPE_NAME. + */ + public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.COLUMN_COUNT. + */ + public final TableField COLUMN_COUNT = createField("COLUMN_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.RETURNS_RESULT. + */ + public final TableField RETURNS_RESULT = createField("RETURNS_RESULT", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.SOURCE. + */ + public final TableField SOURCE = createField("SOURCE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.FUNCTION_ALIASES table reference + */ + public FunctionAliases() { + this("FUNCTION_ALIASES", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.FUNCTION_ALIASES table reference + */ + public FunctionAliases(String alias) { + this(alias, FUNCTION_ALIASES); + } + + private FunctionAliases(String alias, Table aliased) { + this(alias, aliased, null); + } + + private FunctionAliases(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliases as(String alias) { + return new FunctionAliases(alias, this); + } + + /** + * Rename this table + */ + public FunctionAliases rename(String name) { + return new FunctionAliases(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionColumns.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionColumns.java new file mode 100644 index 0000000000..b5df94b4f0 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionColumns.java @@ -0,0 +1,167 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.FunctionColumnsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class FunctionColumns extends TableImpl { + + private static final long serialVersionUID = -406719584; + + /** + * The reference instance of INFORMATION_SCHEMA.FUNCTION_COLUMNS + */ + public static final FunctionColumns FUNCTION_COLUMNS = new FunctionColumns(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return FunctionColumnsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_CATALOG. + */ + public final TableField ALIAS_CATALOG = createField("ALIAS_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_SCHEMA. + */ + public final TableField ALIAS_SCHEMA = createField("ALIAS_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_NAME. + */ + public final TableField ALIAS_NAME = createField("ALIAS_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_CLASS. + */ + public final TableField JAVA_CLASS = createField("JAVA_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_METHOD. + */ + public final TableField JAVA_METHOD = createField("JAVA_METHOD", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_COUNT. + */ + public final TableField COLUMN_COUNT = createField("COLUMN_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.POS. + */ + public final TableField POS = createField("POS", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_NAME. + */ + public final TableField COLUMN_NAME = createField("COLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.DATA_TYPE. + */ + public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.TYPE_NAME. + */ + public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.PRECISION. + */ + public final TableField PRECISION = createField("PRECISION", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.SCALE. + */ + public final TableField SCALE = createField("SCALE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.RADIX. + */ + public final TableField RADIX = createField("RADIX", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.NULLABLE. + */ + public final TableField NULLABLE = createField("NULLABLE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_TYPE. + */ + public final TableField COLUMN_TYPE = createField("COLUMN_TYPE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_DEFAULT. + */ + public final TableField COLUMN_DEFAULT = createField("COLUMN_DEFAULT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.FUNCTION_COLUMNS table reference + */ + public FunctionColumns() { + this("FUNCTION_COLUMNS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.FUNCTION_COLUMNS table reference + */ + public FunctionColumns(String alias) { + this(alias, FUNCTION_COLUMNS); + } + + private FunctionColumns(String alias, Table aliased) { + this(alias, aliased, null); + } + + private FunctionColumns(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumns as(String alias) { + return new FunctionColumns(alias, this); + } + + /** + * Rename this table + */ + public FunctionColumns rename(String name) { + return new FunctionColumns(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Help.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Help.java new file mode 100644 index 0000000000..449eed4f72 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Help.java @@ -0,0 +1,107 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.HelpRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Help extends TableImpl { + + private static final long serialVersionUID = 1402170374; + + /** + * The reference instance of INFORMATION_SCHEMA.HELP + */ + public static final Help HELP = new Help(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return HelpRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.HELP.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.HELP.SECTION. + */ + public final TableField SECTION = createField("SECTION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.HELP.TOPIC. + */ + public final TableField TOPIC = createField("TOPIC", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.HELP.SYNTAX. + */ + public final TableField SYNTAX = createField("SYNTAX", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.HELP.TEXT. + */ + public final TableField TEXT = createField("TEXT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.HELP table reference + */ + public Help() { + this("HELP", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.HELP table reference + */ + public Help(String alias) { + this(alias, HELP); + } + + private Help(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Help(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Help as(String alias) { + return new Help(alias, this); + } + + /** + * Rename this table + */ + public Help rename(String name) { + return new Help(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/InDoubt.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/InDoubt.java new file mode 100644 index 0000000000..c37e06e47e --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/InDoubt.java @@ -0,0 +1,92 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.InDoubtRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class InDoubt extends TableImpl { + + private static final long serialVersionUID = 284524946; + + /** + * The reference instance of INFORMATION_SCHEMA.IN_DOUBT + */ + public static final InDoubt IN_DOUBT = new InDoubt(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return InDoubtRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.IN_DOUBT.TRANSACTION. + */ + public final TableField TRANSACTION = createField("TRANSACTION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.IN_DOUBT.STATE. + */ + public final TableField STATE = createField("STATE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.IN_DOUBT table reference + */ + public InDoubt() { + this("IN_DOUBT", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.IN_DOUBT table reference + */ + public InDoubt(String alias) { + this(alias, IN_DOUBT); + } + + private InDoubt(String alias, Table aliased) { + this(alias, aliased, null); + } + + private InDoubt(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public InDoubt as(String alias) { + return new InDoubt(alias, this); + } + + /** + * Rename this table + */ + public InDoubt rename(String name) { + return new InDoubt(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Indexes.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Indexes.java new file mode 100644 index 0000000000..1cc3b176a2 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Indexes.java @@ -0,0 +1,187 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.IndexesRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Indexes extends TableImpl { + + private static final long serialVersionUID = 2077967696; + + /** + * The reference instance of INFORMATION_SCHEMA.INDEXES + */ + public static final Indexes INDEXES = new Indexes(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return IndexesRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.INDEXES.TABLE_CATALOG. + */ + public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.NON_UNIQUE. + */ + public final TableField NON_UNIQUE = createField("NON_UNIQUE", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.INDEX_NAME. + */ + public final TableField INDEX_NAME = createField("INDEX_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.ORDINAL_POSITION. + */ + public final TableField ORDINAL_POSITION = createField("ORDINAL_POSITION", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.COLUMN_NAME. + */ + public final TableField COLUMN_NAME = createField("COLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.CARDINALITY. + */ + public final TableField CARDINALITY = createField("CARDINALITY", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.PRIMARY_KEY. + */ + public final TableField PRIMARY_KEY = createField("PRIMARY_KEY", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.INDEX_TYPE_NAME. + */ + public final TableField INDEX_TYPE_NAME = createField("INDEX_TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.IS_GENERATED. + */ + public final TableField IS_GENERATED = createField("IS_GENERATED", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.INDEX_TYPE. + */ + public final TableField INDEX_TYPE = createField("INDEX_TYPE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.ASC_OR_DESC. + */ + public final TableField ASC_OR_DESC = createField("ASC_OR_DESC", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.PAGES. + */ + public final TableField PAGES = createField("PAGES", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.FILTER_CONDITION. + */ + public final TableField FILTER_CONDITION = createField("FILTER_CONDITION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.SQL. + */ + public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.SORT_TYPE. + */ + public final TableField SORT_TYPE = createField("SORT_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.CONSTRAINT_NAME. + */ + public final TableField CONSTRAINT_NAME = createField("CONSTRAINT_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.INDEXES.INDEX_CLASS. + */ + public final TableField INDEX_CLASS = createField("INDEX_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.INDEXES table reference + */ + public Indexes() { + this("INDEXES", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.INDEXES table reference + */ + public Indexes(String alias) { + this(alias, INDEXES); + } + + private Indexes(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Indexes(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Indexes as(String alias) { + return new Indexes(alias, this); + } + + /** + * Rename this table + */ + public Indexes rename(String name) { + return new Indexes(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Locks.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Locks.java new file mode 100644 index 0000000000..df9f900f5c --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Locks.java @@ -0,0 +1,102 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.LocksRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Locks extends TableImpl { + + private static final long serialVersionUID = 169116031; + + /** + * The reference instance of INFORMATION_SCHEMA.LOCKS + */ + public static final Locks LOCKS = new Locks(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return LocksRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.LOCKS.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.LOCKS.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.LOCKS.SESSION_ID. + */ + public final TableField SESSION_ID = createField("SESSION_ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.LOCKS.LOCK_TYPE. + */ + public final TableField LOCK_TYPE = createField("LOCK_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.LOCKS table reference + */ + public Locks() { + this("LOCKS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.LOCKS table reference + */ + public Locks(String alias) { + this(alias, LOCKS); + } + + private Locks(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Locks(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Locks as(String alias) { + return new Locks(alias, this); + } + + /** + * Rename this table + */ + public Locks rename(String name) { + return new Locks(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/QueryStatistics.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/QueryStatistics.java new file mode 100644 index 0000000000..6c65dd7de8 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/QueryStatistics.java @@ -0,0 +1,142 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.QueryStatisticsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class QueryStatistics extends TableImpl { + + private static final long serialVersionUID = -1610174414; + + /** + * The reference instance of INFORMATION_SCHEMA.QUERY_STATISTICS + */ + public static final QueryStatistics QUERY_STATISTICS = new QueryStatistics(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return QueryStatisticsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.SQL_STATEMENT. + */ + public final TableField SQL_STATEMENT = createField("SQL_STATEMENT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.EXECUTION_COUNT. + */ + public final TableField EXECUTION_COUNT = createField("EXECUTION_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_EXECUTION_TIME. + */ + public final TableField MIN_EXECUTION_TIME = createField("MIN_EXECUTION_TIME", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_EXECUTION_TIME. + */ + public final TableField MAX_EXECUTION_TIME = createField("MAX_EXECUTION_TIME", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_EXECUTION_TIME. + */ + public final TableField CUMULATIVE_EXECUTION_TIME = createField("CUMULATIVE_EXECUTION_TIME", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_EXECUTION_TIME. + */ + public final TableField AVERAGE_EXECUTION_TIME = createField("AVERAGE_EXECUTION_TIME", org.jooq.impl.SQLDataType.DOUBLE, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_EXECUTION_TIME. + */ + public final TableField STD_DEV_EXECUTION_TIME = createField("STD_DEV_EXECUTION_TIME", org.jooq.impl.SQLDataType.DOUBLE, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_ROW_COUNT. + */ + public final TableField MIN_ROW_COUNT = createField("MIN_ROW_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_ROW_COUNT. + */ + public final TableField MAX_ROW_COUNT = createField("MAX_ROW_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_ROW_COUNT. + */ + public final TableField CUMULATIVE_ROW_COUNT = createField("CUMULATIVE_ROW_COUNT", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_ROW_COUNT. + */ + public final TableField AVERAGE_ROW_COUNT = createField("AVERAGE_ROW_COUNT", org.jooq.impl.SQLDataType.DOUBLE, this, ""); + + /** + * The column INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_ROW_COUNT. + */ + public final TableField STD_DEV_ROW_COUNT = createField("STD_DEV_ROW_COUNT", org.jooq.impl.SQLDataType.DOUBLE, this, ""); + + /** + * Create a INFORMATION_SCHEMA.QUERY_STATISTICS table reference + */ + public QueryStatistics() { + this("QUERY_STATISTICS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.QUERY_STATISTICS table reference + */ + public QueryStatistics(String alias) { + this(alias, QUERY_STATISTICS); + } + + private QueryStatistics(String alias, Table aliased) { + this(alias, aliased, null); + } + + private QueryStatistics(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatistics as(String alias) { + return new QueryStatistics(alias, this); + } + + /** + * Rename this table + */ + public QueryStatistics rename(String name) { + return new QueryStatistics(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Rights.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Rights.java new file mode 100644 index 0000000000..e00c2d336e --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Rights.java @@ -0,0 +1,117 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.RightsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Rights extends TableImpl { + + private static final long serialVersionUID = -2076280081; + + /** + * The reference instance of INFORMATION_SCHEMA.RIGHTS + */ + public static final Rights RIGHTS = new Rights(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return RightsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.RIGHTS.GRANTEE. + */ + public final TableField GRANTEE = createField("GRANTEE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.RIGHTS.GRANTEETYPE. + */ + public final TableField GRANTEETYPE = createField("GRANTEETYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.RIGHTS.GRANTEDROLE. + */ + public final TableField GRANTEDROLE = createField("GRANTEDROLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.RIGHTS.RIGHTS. + */ + public final TableField RIGHTS_ = createField("RIGHTS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.RIGHTS.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.RIGHTS.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.RIGHTS.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.RIGHTS table reference + */ + public Rights() { + this("RIGHTS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.RIGHTS table reference + */ + public Rights(String alias) { + this(alias, RIGHTS); + } + + private Rights(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Rights(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Rights as(String alias) { + return new Rights(alias, this); + } + + /** + * Rename this table + */ + public Rights rename(String name) { + return new Rights(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Roles.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Roles.java new file mode 100644 index 0000000000..74a394945a --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Roles.java @@ -0,0 +1,97 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.RolesRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Roles extends TableImpl { + + private static final long serialVersionUID = 1847269376; + + /** + * The reference instance of INFORMATION_SCHEMA.ROLES + */ + public static final Roles ROLES = new Roles(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return RolesRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.ROLES.NAME. + */ + public final TableField NAME = createField("NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.ROLES.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.ROLES.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.ROLES table reference + */ + public Roles() { + this("ROLES", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.ROLES table reference + */ + public Roles(String alias) { + this(alias, ROLES); + } + + private Roles(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Roles(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Roles as(String alias) { + return new Roles(alias, this); + } + + /** + * Rename this table + */ + public Roles rename(String name) { + return new Roles(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Schemata.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Schemata.java new file mode 100644 index 0000000000..b084c3501c --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Schemata.java @@ -0,0 +1,122 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.SchemataRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Schemata extends TableImpl { + + private static final long serialVersionUID = -1029782582; + + /** + * The reference instance of INFORMATION_SCHEMA.SCHEMATA + */ + public static final Schemata SCHEMATA = new Schemata(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return SchemataRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.SCHEMATA.CATALOG_NAME. + */ + public final TableField CATALOG_NAME = createField("CATALOG_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME. + */ + public final TableField SCHEMA_NAME = createField("SCHEMA_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SCHEMATA.SCHEMA_OWNER. + */ + public final TableField SCHEMA_OWNER = createField("SCHEMA_OWNER", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SCHEMATA.DEFAULT_CHARACTER_SET_NAME. + */ + public final TableField DEFAULT_CHARACTER_SET_NAME = createField("DEFAULT_CHARACTER_SET_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SCHEMATA.DEFAULT_COLLATION_NAME. + */ + public final TableField DEFAULT_COLLATION_NAME = createField("DEFAULT_COLLATION_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SCHEMATA.IS_DEFAULT. + */ + public final TableField IS_DEFAULT = createField("IS_DEFAULT", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.SCHEMATA.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SCHEMATA.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.SCHEMATA table reference + */ + public Schemata() { + this("SCHEMATA", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.SCHEMATA table reference + */ + public Schemata(String alias) { + this(alias, SCHEMATA); + } + + private Schemata(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Schemata(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Schemata as(String alias) { + return new Schemata(alias, this); + } + + /** + * Rename this table + */ + public Schemata rename(String name) { + return new Schemata(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sequences.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sequences.java new file mode 100644 index 0000000000..26c2da9080 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sequences.java @@ -0,0 +1,142 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.SequencesRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Sequences extends TableImpl { + + private static final long serialVersionUID = -1302373749; + + /** + * The reference instance of INFORMATION_SCHEMA.SEQUENCES + */ + public static final Sequences SEQUENCES = new Sequences(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return SequencesRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_CATALOG. + */ + public final TableField SEQUENCE_CATALOG = createField("SEQUENCE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA. + */ + public final TableField SEQUENCE_SCHEMA = createField("SEQUENCE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME. + */ + public final TableField SEQUENCE_NAME = createField("SEQUENCE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.CURRENT_VALUE. + */ + public final TableField CURRENT_VALUE = createField("CURRENT_VALUE", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.INCREMENT. + */ + public final TableField INCREMENT = createField("INCREMENT", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.IS_GENERATED. + */ + public final TableField IS_GENERATED = createField("IS_GENERATED", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.CACHE. + */ + public final TableField CACHE = createField("CACHE", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.MIN_VALUE. + */ + public final TableField MIN_VALUE = createField("MIN_VALUE", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.MAX_VALUE. + */ + public final TableField MAX_VALUE = createField("MAX_VALUE", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.IS_CYCLE. + */ + public final TableField IS_CYCLE = createField("IS_CYCLE", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.SEQUENCES.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.SEQUENCES table reference + */ + public Sequences() { + this("SEQUENCES", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.SEQUENCES table reference + */ + public Sequences(String alias) { + this(alias, SEQUENCES); + } + + private Sequences(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Sequences(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Sequences as(String alias) { + return new Sequences(alias, this); + } + + /** + * Rename this table + */ + public Sequences rename(String name) { + return new Sequences(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/SessionState.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/SessionState.java new file mode 100644 index 0000000000..78e0ff743a --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/SessionState.java @@ -0,0 +1,92 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.SessionStateRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class SessionState extends TableImpl { + + private static final long serialVersionUID = 919891380; + + /** + * The reference instance of INFORMATION_SCHEMA.SESSION_STATE + */ + public static final SessionState SESSION_STATE = new SessionState(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return SessionStateRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.SESSION_STATE.KEY. + */ + public final TableField KEY = createField("KEY", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SESSION_STATE.SQL. + */ + public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.SESSION_STATE table reference + */ + public SessionState() { + this("SESSION_STATE", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.SESSION_STATE table reference + */ + public SessionState(String alias) { + this(alias, SESSION_STATE); + } + + private SessionState(String alias, Table aliased) { + this(alias, aliased, null); + } + + private SessionState(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public SessionState as(String alias) { + return new SessionState(alias, this); + } + + /** + * Rename this table + */ + public SessionState rename(String name) { + return new SessionState(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sessions.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sessions.java new file mode 100644 index 0000000000..22166987d9 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sessions.java @@ -0,0 +1,112 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.SessionsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Sessions extends TableImpl { + + private static final long serialVersionUID = -975884629; + + /** + * The reference instance of INFORMATION_SCHEMA.SESSIONS + */ + public static final Sessions SESSIONS = new Sessions(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return SessionsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.SESSIONS.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.SESSIONS.USER_NAME. + */ + public final TableField USER_NAME = createField("USER_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SESSIONS.SESSION_START. + */ + public final TableField SESSION_START = createField("SESSION_START", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SESSIONS.STATEMENT. + */ + public final TableField STATEMENT = createField("STATEMENT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SESSIONS.STATEMENT_START. + */ + public final TableField STATEMENT_START = createField("STATEMENT_START", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SESSIONS.CONTAINS_UNCOMMITTED. + */ + public final TableField CONTAINS_UNCOMMITTED = createField("CONTAINS_UNCOMMITTED", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.SESSIONS table reference + */ + public Sessions() { + this("SESSIONS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.SESSIONS table reference + */ + public Sessions(String alias) { + this(alias, SESSIONS); + } + + private Sessions(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Sessions(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Sessions as(String alias) { + return new Sessions(alias, this); + } + + /** + * Rename this table + */ + public Sessions rename(String name) { + return new Sessions(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Settings.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Settings.java new file mode 100644 index 0000000000..caca515c67 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Settings.java @@ -0,0 +1,92 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.SettingsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Settings extends TableImpl { + + private static final long serialVersionUID = -1983664507; + + /** + * The reference instance of INFORMATION_SCHEMA.SETTINGS + */ + public static final Settings SETTINGS = new Settings(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return SettingsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.SETTINGS.NAME. + */ + public final TableField NAME = createField("NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.SETTINGS.VALUE. + */ + public final TableField VALUE = createField("VALUE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.SETTINGS table reference + */ + public Settings() { + this("SETTINGS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.SETTINGS table reference + */ + public Settings(String alias) { + this(alias, SETTINGS); + } + + private Settings(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Settings(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Settings as(String alias) { + return new Settings(alias, this); + } + + /** + * Rename this table + */ + public Settings rename(String name) { + return new Settings(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TablePrivileges.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TablePrivileges.java new file mode 100644 index 0000000000..16104aa4bb --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TablePrivileges.java @@ -0,0 +1,117 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.TablePrivilegesRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TablePrivileges extends TableImpl { + + private static final long serialVersionUID = -270543696; + + /** + * The reference instance of INFORMATION_SCHEMA.TABLE_PRIVILEGES + */ + public static final TablePrivileges TABLE_PRIVILEGES = new TablePrivileges(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return TablePrivilegesRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTOR. + */ + public final TableField GRANTOR = createField("GRANTOR", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTEE. + */ + public final TableField GRANTEE = createField("GRANTEE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_CATALOG. + */ + public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.PRIVILEGE_TYPE. + */ + public final TableField PRIVILEGE_TYPE = createField("PRIVILEGE_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.IS_GRANTABLE. + */ + public final TableField IS_GRANTABLE = createField("IS_GRANTABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.TABLE_PRIVILEGES table reference + */ + public TablePrivileges() { + this("TABLE_PRIVILEGES", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.TABLE_PRIVILEGES table reference + */ + public TablePrivileges(String alias) { + this(alias, TABLE_PRIVILEGES); + } + + private TablePrivileges(String alias, Table aliased) { + this(alias, aliased, null); + } + + private TablePrivileges(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public TablePrivileges as(String alias) { + return new TablePrivileges(alias, this); + } + + /** + * Rename this table + */ + public TablePrivileges rename(String name) { + return new TablePrivileges(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TableTypes.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TableTypes.java new file mode 100644 index 0000000000..6901b10786 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TableTypes.java @@ -0,0 +1,87 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.TableTypesRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TableTypes extends TableImpl { + + private static final long serialVersionUID = 676525061; + + /** + * The reference instance of INFORMATION_SCHEMA.TABLE_TYPES + */ + public static final TableTypes TABLE_TYPES = new TableTypes(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return TableTypesRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.TABLE_TYPES.TYPE. + */ + public final TableField TYPE = createField("TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * Create a INFORMATION_SCHEMA.TABLE_TYPES table reference + */ + public TableTypes() { + this("TABLE_TYPES", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.TABLE_TYPES table reference + */ + public TableTypes(String alias) { + this(alias, TABLE_TYPES); + } + + private TableTypes(String alias, Table aliased) { + this(alias, aliased, null); + } + + private TableTypes(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public TableTypes as(String alias) { + return new TableTypes(alias, this); + } + + /** + * Rename this table + */ + public TableTypes rename(String name) { + return new TableTypes(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Tables.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Tables.java new file mode 100644 index 0000000000..f0927166a5 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Tables.java @@ -0,0 +1,142 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.TablesRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Tables extends TableImpl { + + private static final long serialVersionUID = 123051350; + + /** + * The reference instance of INFORMATION_SCHEMA.TABLES + */ + public static final Tables TABLES = new Tables(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return TablesRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.TABLES.TABLE_CATALOG. + */ + public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.TABLE_TYPE. + */ + public final TableField TABLE_TYPE = createField("TABLE_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.STORAGE_TYPE. + */ + public final TableField STORAGE_TYPE = createField("STORAGE_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.SQL. + */ + public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.LAST_MODIFICATION. + */ + public final TableField LAST_MODIFICATION = createField("LAST_MODIFICATION", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.TYPE_NAME. + */ + public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.TABLE_CLASS. + */ + public final TableField TABLE_CLASS = createField("TABLE_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TABLES.ROW_COUNT_ESTIMATE. + */ + public final TableField ROW_COUNT_ESTIMATE = createField("ROW_COUNT_ESTIMATE", org.jooq.impl.SQLDataType.BIGINT, this, ""); + + /** + * Create a INFORMATION_SCHEMA.TABLES table reference + */ + public Tables() { + this("TABLES", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.TABLES table reference + */ + public Tables(String alias) { + this(alias, TABLES); + } + + private Tables(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Tables(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Tables as(String alias) { + return new Tables(alias, this); + } + + /** + * Rename this table + */ + public Tables rename(String name) { + return new Tables(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Triggers.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Triggers.java new file mode 100644 index 0000000000..375478af7a --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Triggers.java @@ -0,0 +1,152 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.TriggersRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Triggers extends TableImpl { + + private static final long serialVersionUID = 376103066; + + /** + * The reference instance of INFORMATION_SCHEMA.TRIGGERS + */ + public static final Triggers TRIGGERS = new Triggers(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return TriggersRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.TRIGGER_CATALOG. + */ + public final TableField TRIGGER_CATALOG = createField("TRIGGER_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.TRIGGER_SCHEMA. + */ + public final TableField TRIGGER_SCHEMA = createField("TRIGGER_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.TRIGGER_NAME. + */ + public final TableField TRIGGER_NAME = createField("TRIGGER_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.TRIGGER_TYPE. + */ + public final TableField TRIGGER_TYPE = createField("TRIGGER_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.TABLE_CATALOG. + */ + public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.BEFORE. + */ + public final TableField BEFORE = createField("BEFORE", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.JAVA_CLASS. + */ + public final TableField JAVA_CLASS = createField("JAVA_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.QUEUE_SIZE. + */ + public final TableField QUEUE_SIZE = createField("QUEUE_SIZE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.NO_WAIT. + */ + public final TableField NO_WAIT = createField("NO_WAIT", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.SQL. + */ + public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TRIGGERS.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.TRIGGERS table reference + */ + public Triggers() { + this("TRIGGERS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.TRIGGERS table reference + */ + public Triggers(String alias) { + this(alias, TRIGGERS); + } + + private Triggers(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Triggers(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Triggers as(String alias) { + return new Triggers(alias, this); + } + + /** + * Rename this table + */ + public Triggers rename(String name) { + return new Triggers(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TypeInfo.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TypeInfo.java new file mode 100644 index 0000000000..3db18ebee4 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TypeInfo.java @@ -0,0 +1,152 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.TypeInfoRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TypeInfo extends TableImpl { + + private static final long serialVersionUID = -242556633; + + /** + * The reference instance of INFORMATION_SCHEMA.TYPE_INFO + */ + public static final TypeInfo TYPE_INFO = new TypeInfo(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return TypeInfoRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.TYPE_NAME. + */ + public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.DATA_TYPE. + */ + public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.PRECISION. + */ + public final TableField PRECISION = createField("PRECISION", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.PREFIX. + */ + public final TableField PREFIX = createField("PREFIX", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.SUFFIX. + */ + public final TableField SUFFIX = createField("SUFFIX", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.PARAMS. + */ + public final TableField PARAMS = createField("PARAMS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.AUTO_INCREMENT. + */ + public final TableField AUTO_INCREMENT = createField("AUTO_INCREMENT", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.MINIMUM_SCALE. + */ + public final TableField MINIMUM_SCALE = createField("MINIMUM_SCALE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.MAXIMUM_SCALE. + */ + public final TableField MAXIMUM_SCALE = createField("MAXIMUM_SCALE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.RADIX. + */ + public final TableField RADIX = createField("RADIX", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.POS. + */ + public final TableField POS = createField("POS", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.CASE_SENSITIVE. + */ + public final TableField CASE_SENSITIVE = createField("CASE_SENSITIVE", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.NULLABLE. + */ + public final TableField NULLABLE = createField("NULLABLE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * The column INFORMATION_SCHEMA.TYPE_INFO.SEARCHABLE. + */ + public final TableField SEARCHABLE = createField("SEARCHABLE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); + + /** + * Create a INFORMATION_SCHEMA.TYPE_INFO table reference + */ + public TypeInfo() { + this("TYPE_INFO", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.TYPE_INFO table reference + */ + public TypeInfo(String alias) { + this(alias, TYPE_INFO); + } + + private TypeInfo(String alias, Table aliased) { + this(alias, aliased, null); + } + + private TypeInfo(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfo as(String alias) { + return new TypeInfo(alias, this); + } + + /** + * Rename this table + */ + public TypeInfo rename(String name) { + return new TypeInfo(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Users.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Users.java new file mode 100644 index 0000000000..417382aed0 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Users.java @@ -0,0 +1,102 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.UsersRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Users extends TableImpl { + + private static final long serialVersionUID = 1971797833; + + /** + * The reference instance of INFORMATION_SCHEMA.USERS + */ + public static final Users USERS = new Users(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return UsersRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.USERS.NAME. + */ + public final TableField NAME = createField("NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.USERS.ADMIN. + */ + public final TableField ADMIN = createField("ADMIN", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.USERS.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.USERS.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.USERS table reference + */ + public Users() { + this("USERS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.USERS table reference + */ + public Users(String alias) { + this(alias, USERS); + } + + private Users(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Users(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Users as(String alias) { + return new Users(alias, this); + } + + /** + * Rename this table + */ + public Users rename(String name) { + return new Users(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Views.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Views.java new file mode 100644 index 0000000000..54ffe377d7 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Views.java @@ -0,0 +1,127 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables; + + +import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; +import com.baeldung.jooq.introduction.db.information_schema.tables.records.ViewsRecord; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Views extends TableImpl { + + private static final long serialVersionUID = 1565009994; + + /** + * The reference instance of INFORMATION_SCHEMA.VIEWS + */ + public static final Views VIEWS = new Views(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return ViewsRecord.class; + } + + /** + * The column INFORMATION_SCHEMA.VIEWS.TABLE_CATALOG. + */ + public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.VIEWS.TABLE_SCHEMA. + */ + public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.VIEWS.TABLE_NAME. + */ + public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION. + */ + public final TableField VIEW_DEFINITION = createField("VIEW_DEFINITION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.VIEWS.CHECK_OPTION. + */ + public final TableField CHECK_OPTION = createField("CHECK_OPTION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.VIEWS.IS_UPDATABLE. + */ + public final TableField IS_UPDATABLE = createField("IS_UPDATABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.VIEWS.STATUS. + */ + public final TableField STATUS = createField("STATUS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.VIEWS.REMARKS. + */ + public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); + + /** + * The column INFORMATION_SCHEMA.VIEWS.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); + + /** + * Create a INFORMATION_SCHEMA.VIEWS table reference + */ + public Views() { + this("VIEWS", null); + } + + /** + * Create an aliased INFORMATION_SCHEMA.VIEWS table reference + */ + public Views(String alias) { + this(alias, VIEWS); + } + + private Views(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Views(String alias, Table aliased, Field[] parameters) { + super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public Views as(String alias) { + return new Views(alias, this); + } + + /** + * Rename this table + */ + public Views rename(String name) { + return new Views(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CatalogsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CatalogsRecord.java new file mode 100644 index 0000000000..d59728bf01 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CatalogsRecord.java @@ -0,0 +1,119 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Catalogs; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Row1; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class CatalogsRecord extends TableRecordImpl implements Record1 { + + private static final long serialVersionUID = -2119003002; + + /** + * Setter for INFORMATION_SCHEMA.CATALOGS.CATALOG_NAME. + */ + public void setCatalogName(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CATALOGS.CATALOG_NAME. + */ + public String getCatalogName() { + return (String) getValue(0); + } + + // ------------------------------------------------------------------------- + // Record1 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row1 fieldsRow() { + return (Row1) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row1 valuesRow() { + return (Row1) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Catalogs.CATALOGS.CATALOG_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getCatalogName(); + } + + /** + * {@inheritDoc} + */ + @Override + public CatalogsRecord value1(String value) { + setCatalogName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CatalogsRecord values(String value1) { + value1(value1); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached CatalogsRecord + */ + public CatalogsRecord() { + super(Catalogs.CATALOGS); + } + + /** + * Create a detached, initialised CatalogsRecord + */ + public CatalogsRecord(String catalogName) { + super(Catalogs.CATALOGS); + + setValue(0, catalogName); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CollationsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CollationsRecord.java new file mode 100644 index 0000000000..e0abb49012 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CollationsRecord.java @@ -0,0 +1,160 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Collations; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record2; +import org.jooq.Row2; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class CollationsRecord extends TableRecordImpl implements Record2 { + + private static final long serialVersionUID = -890210086; + + /** + * Setter for INFORMATION_SCHEMA.COLLATIONS.NAME. + */ + public void setName(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLLATIONS.NAME. + */ + public String getName() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.COLLATIONS.KEY. + */ + public void setKey(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLLATIONS.KEY. + */ + public String getKey() { + return (String) getValue(1); + } + + // ------------------------------------------------------------------------- + // Record2 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row2 fieldsRow() { + return (Row2) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row2 valuesRow() { + return (Row2) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Collations.COLLATIONS.NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Collations.COLLATIONS.KEY; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getKey(); + } + + /** + * {@inheritDoc} + */ + @Override + public CollationsRecord value1(String value) { + setName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CollationsRecord value2(String value) { + setKey(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CollationsRecord values(String value1, String value2) { + value1(value1); + value2(value2); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached CollationsRecord + */ + public CollationsRecord() { + super(Collations.COLLATIONS); + } + + /** + * Create a detached, initialised CollationsRecord + */ + public CollationsRecord(String name, String key) { + super(Collations.COLLATIONS); + + setValue(0, name); + setValue(1, key); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnPrivilegesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnPrivilegesRecord.java new file mode 100644 index 0000000000..105348a339 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnPrivilegesRecord.java @@ -0,0 +1,406 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.ColumnPrivileges; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record8; +import org.jooq.Row8; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class ColumnPrivilegesRecord extends TableRecordImpl implements Record8 { + + private static final long serialVersionUID = 1884367853; + + /** + * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTOR. + */ + public void setGrantor(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTOR. + */ + public String getGrantor() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTEE. + */ + public void setGrantee(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTEE. + */ + public String getGrantee() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_CATALOG. + */ + public void setTableCatalog(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_CATALOG. + */ + public String getTableCatalog() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.COLUMN_NAME. + */ + public void setColumnName(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.COLUMN_NAME. + */ + public String getColumnName() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.PRIVILEGE_TYPE. + */ + public void setPrivilegeType(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.PRIVILEGE_TYPE. + */ + public String getPrivilegeType() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.IS_GRANTABLE. + */ + public void setIsGrantable(String value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.IS_GRANTABLE. + */ + public String getIsGrantable() { + return (String) getValue(7); + } + + // ------------------------------------------------------------------------- + // Record8 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row8 fieldsRow() { + return (Row8) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row8 valuesRow() { + return (Row8) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return ColumnPrivileges.COLUMN_PRIVILEGES.GRANTOR; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return ColumnPrivileges.COLUMN_PRIVILEGES.GRANTEE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return ColumnPrivileges.COLUMN_PRIVILEGES.TABLE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return ColumnPrivileges.COLUMN_PRIVILEGES.TABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return ColumnPrivileges.COLUMN_PRIVILEGES.TABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return ColumnPrivileges.COLUMN_PRIVILEGES.COLUMN_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return ColumnPrivileges.COLUMN_PRIVILEGES.PRIVILEGE_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return ColumnPrivileges.COLUMN_PRIVILEGES.IS_GRANTABLE; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getGrantor(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getGrantee(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getTableCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getTableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getTableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getColumnName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getPrivilegeType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value8() { + return getIsGrantable(); + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivilegesRecord value1(String value) { + setGrantor(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivilegesRecord value2(String value) { + setGrantee(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivilegesRecord value3(String value) { + setTableCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivilegesRecord value4(String value) { + setTableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivilegesRecord value5(String value) { + setTableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivilegesRecord value6(String value) { + setColumnName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivilegesRecord value7(String value) { + setPrivilegeType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivilegesRecord value8(String value) { + setIsGrantable(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ColumnPrivilegesRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, String value8) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached ColumnPrivilegesRecord + */ + public ColumnPrivilegesRecord() { + super(ColumnPrivileges.COLUMN_PRIVILEGES); + } + + /** + * Create a detached, initialised ColumnPrivilegesRecord + */ + public ColumnPrivilegesRecord(String grantor, String grantee, String tableCatalog, String tableSchema, String tableName, String columnName, String privilegeType, String isGrantable) { + super(ColumnPrivileges.COLUMN_PRIVILEGES); + + setValue(0, grantor); + setValue(1, grantee); + setValue(2, tableCatalog); + setValue(3, tableSchema); + setValue(4, tableName); + setValue(5, columnName); + setValue(6, privilegeType); + setValue(7, isGrantable); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnsRecord.java new file mode 100644 index 0000000000..63a83b0056 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnsRecord.java @@ -0,0 +1,392 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Columns; + +import javax.annotation.Generated; + +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class ColumnsRecord extends TableRecordImpl { + + private static final long serialVersionUID = 1850723283; + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG. + */ + public void setTableCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG. + */ + public String getTableCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME. + */ + public void setColumnName(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME. + */ + public String getColumnName() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION. + */ + public void setOrdinalPosition(Integer value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION. + */ + public Integer getOrdinalPosition() { + return (Integer) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT. + */ + public void setColumnDefault(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT. + */ + public String getColumnDefault() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.IS_NULLABLE. + */ + public void setIsNullable(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.IS_NULLABLE. + */ + public String getIsNullable() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.DATA_TYPE. + */ + public void setDataType(Integer value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.DATA_TYPE. + */ + public Integer getDataType() { + return (Integer) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_MAXIMUM_LENGTH. + */ + public void setCharacterMaximumLength(Integer value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_MAXIMUM_LENGTH. + */ + public Integer getCharacterMaximumLength() { + return (Integer) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_OCTET_LENGTH. + */ + public void setCharacterOctetLength(Integer value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_OCTET_LENGTH. + */ + public Integer getCharacterOctetLength() { + return (Integer) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION. + */ + public void setNumericPrecision(Integer value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION. + */ + public Integer getNumericPrecision() { + return (Integer) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION_RADIX. + */ + public void setNumericPrecisionRadix(Integer value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION_RADIX. + */ + public Integer getNumericPrecisionRadix() { + return (Integer) getValue(11); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_SCALE. + */ + public void setNumericScale(Integer value) { + setValue(12, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_SCALE. + */ + public Integer getNumericScale() { + return (Integer) getValue(12); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_SET_NAME. + */ + public void setCharacterSetName(String value) { + setValue(13, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_SET_NAME. + */ + public String getCharacterSetName() { + return (String) getValue(13); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.COLLATION_NAME. + */ + public void setCollationName(String value) { + setValue(14, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.COLLATION_NAME. + */ + public String getCollationName() { + return (String) getValue(14); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.TYPE_NAME. + */ + public void setTypeName(String value) { + setValue(15, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.TYPE_NAME. + */ + public String getTypeName() { + return (String) getValue(15); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.NULLABLE. + */ + public void setNullable(Integer value) { + setValue(16, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.NULLABLE. + */ + public Integer getNullable() { + return (Integer) getValue(16); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.IS_COMPUTED. + */ + public void setIsComputed(Boolean value) { + setValue(17, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.IS_COMPUTED. + */ + public Boolean getIsComputed() { + return (Boolean) getValue(17); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.SELECTIVITY. + */ + public void setSelectivity(Integer value) { + setValue(18, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.SELECTIVITY. + */ + public Integer getSelectivity() { + return (Integer) getValue(18); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.CHECK_CONSTRAINT. + */ + public void setCheckConstraint(String value) { + setValue(19, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.CHECK_CONSTRAINT. + */ + public String getCheckConstraint() { + return (String) getValue(19); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.SEQUENCE_NAME. + */ + public void setSequenceName(String value) { + setValue(20, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.SEQUENCE_NAME. + */ + public String getSequenceName() { + return (String) getValue(20); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.REMARKS. + */ + public void setRemarks(String value) { + setValue(21, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.REMARKS. + */ + public String getRemarks() { + return (String) getValue(21); + } + + /** + * Setter for INFORMATION_SCHEMA.COLUMNS.SOURCE_DATA_TYPE. + */ + public void setSourceDataType(Short value) { + setValue(22, value); + } + + /** + * Getter for INFORMATION_SCHEMA.COLUMNS.SOURCE_DATA_TYPE. + */ + public Short getSourceDataType() { + return (Short) getValue(22); + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached ColumnsRecord + */ + public ColumnsRecord() { + super(Columns.COLUMNS); + } + + /** + * Create a detached, initialised ColumnsRecord + */ + public ColumnsRecord(String tableCatalog, String tableSchema, String tableName, String columnName, Integer ordinalPosition, String columnDefault, String isNullable, Integer dataType, Integer characterMaximumLength, Integer characterOctetLength, Integer numericPrecision, Integer numericPrecisionRadix, Integer numericScale, String characterSetName, String collationName, String typeName, Integer nullable, Boolean isComputed, Integer selectivity, String checkConstraint, String sequenceName, String remarks, Short sourceDataType) { + super(Columns.COLUMNS); + + setValue(0, tableCatalog); + setValue(1, tableSchema); + setValue(2, tableName); + setValue(3, columnName); + setValue(4, ordinalPosition); + setValue(5, columnDefault); + setValue(6, isNullable); + setValue(7, dataType); + setValue(8, characterMaximumLength); + setValue(9, characterOctetLength); + setValue(10, numericPrecision); + setValue(11, numericPrecisionRadix); + setValue(12, numericScale); + setValue(13, characterSetName); + setValue(14, collationName); + setValue(15, typeName); + setValue(16, nullable); + setValue(17, isComputed); + setValue(18, selectivity); + setValue(19, checkConstraint); + setValue(20, sequenceName); + setValue(21, remarks); + setValue(22, sourceDataType); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstantsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstantsRecord.java new file mode 100644 index 0000000000..b1225bd747 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstantsRecord.java @@ -0,0 +1,365 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Constants; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record7; +import org.jooq.Row7; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class ConstantsRecord extends TableRecordImpl implements Record7 { + + private static final long serialVersionUID = -775500532; + + /** + * Setter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_CATALOG. + */ + public void setConstantCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_CATALOG. + */ + public String getConstantCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_SCHEMA. + */ + public void setConstantSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_SCHEMA. + */ + public String getConstantSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_NAME. + */ + public void setConstantName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_NAME. + */ + public String getConstantName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTANTS.DATA_TYPE. + */ + public void setDataType(Integer value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTANTS.DATA_TYPE. + */ + public Integer getDataType() { + return (Integer) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTANTS.REMARKS. + */ + public void setRemarks(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTANTS.REMARKS. + */ + public String getRemarks() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTANTS.SQL. + */ + public void setSql(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTANTS.SQL. + */ + public String getSql() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTANTS.ID. + */ + public void setId(Integer value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTANTS.ID. + */ + public Integer getId() { + return (Integer) getValue(6); + } + + // ------------------------------------------------------------------------- + // Record7 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row7 fieldsRow() { + return (Row7) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row7 valuesRow() { + return (Row7) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Constants.CONSTANTS.CONSTANT_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Constants.CONSTANTS.CONSTANT_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Constants.CONSTANTS.CONSTANT_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Constants.CONSTANTS.DATA_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Constants.CONSTANTS.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Constants.CONSTANTS.SQL; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Constants.CONSTANTS.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getConstantCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getConstantSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getConstantName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value4() { + return getDataType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getSql(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value7() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public ConstantsRecord value1(String value) { + setConstantCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstantsRecord value2(String value) { + setConstantSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstantsRecord value3(String value) { + setConstantName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstantsRecord value4(Integer value) { + setDataType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstantsRecord value5(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstantsRecord value6(String value) { + setSql(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstantsRecord value7(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstantsRecord values(String value1, String value2, String value3, Integer value4, String value5, String value6, Integer value7) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached ConstantsRecord + */ + public ConstantsRecord() { + super(Constants.CONSTANTS); + } + + /** + * Create a detached, initialised ConstantsRecord + */ + public ConstantsRecord(String constantCatalog, String constantSchema, String constantName, Integer dataType, String remarks, String sql, Integer id) { + super(Constants.CONSTANTS); + + setValue(0, constantCatalog); + setValue(1, constantSchema); + setValue(2, constantName); + setValue(3, dataType); + setValue(4, remarks); + setValue(5, sql); + setValue(6, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstraintsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstraintsRecord.java new file mode 100644 index 0000000000..f1727739a2 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstraintsRecord.java @@ -0,0 +1,611 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Constraints; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record13; +import org.jooq.Row13; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class ConstraintsRecord extends TableRecordImpl implements Record13 { + + private static final long serialVersionUID = 759662490; + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_CATALOG. + */ + public void setConstraintCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_CATALOG. + */ + public String getConstraintCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_SCHEMA. + */ + public void setConstraintSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_SCHEMA. + */ + public String getConstraintSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_NAME. + */ + public void setConstraintName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_NAME. + */ + public String getConstraintName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_TYPE. + */ + public void setConstraintType(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_TYPE. + */ + public String getConstraintType() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_CATALOG. + */ + public void setTableCatalog(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_CATALOG. + */ + public String getTableCatalog() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.UNIQUE_INDEX_NAME. + */ + public void setUniqueIndexName(String value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.UNIQUE_INDEX_NAME. + */ + public String getUniqueIndexName() { + return (String) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CHECK_EXPRESSION. + */ + public void setCheckExpression(String value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CHECK_EXPRESSION. + */ + public String getCheckExpression() { + return (String) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.COLUMN_LIST. + */ + public void setColumnList(String value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.COLUMN_LIST. + */ + public String getColumnList() { + return (String) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.REMARKS. + */ + public void setRemarks(String value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.REMARKS. + */ + public String getRemarks() { + return (String) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.SQL. + */ + public void setSql(String value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.SQL. + */ + public String getSql() { + return (String) getValue(11); + } + + /** + * Setter for INFORMATION_SCHEMA.CONSTRAINTS.ID. + */ + public void setId(Integer value) { + setValue(12, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CONSTRAINTS.ID. + */ + public Integer getId() { + return (Integer) getValue(12); + } + + // ------------------------------------------------------------------------- + // Record13 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row13 fieldsRow() { + return (Row13) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row13 valuesRow() { + return (Row13) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Constraints.CONSTRAINTS.CONSTRAINT_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Constraints.CONSTRAINTS.CONSTRAINT_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Constraints.CONSTRAINTS.CONSTRAINT_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Constraints.CONSTRAINTS.CONSTRAINT_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Constraints.CONSTRAINTS.TABLE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Constraints.CONSTRAINTS.TABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Constraints.CONSTRAINTS.TABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return Constraints.CONSTRAINTS.UNIQUE_INDEX_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return Constraints.CONSTRAINTS.CHECK_EXPRESSION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return Constraints.CONSTRAINTS.COLUMN_LIST; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return Constraints.CONSTRAINTS.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return Constraints.CONSTRAINTS.SQL; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field13() { + return Constraints.CONSTRAINTS.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getConstraintCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getConstraintSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getConstraintName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getConstraintType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getTableCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getTableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getTableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value8() { + return getUniqueIndexName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value9() { + return getCheckExpression(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value10() { + return getColumnList(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value11() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value12() { + return getSql(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value13() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value1(String value) { + setConstraintCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value2(String value) { + setConstraintSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value3(String value) { + setConstraintName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value4(String value) { + setConstraintType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value5(String value) { + setTableCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value6(String value) { + setTableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value7(String value) { + setTableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value8(String value) { + setUniqueIndexName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value9(String value) { + setCheckExpression(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value10(String value) { + setColumnList(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value11(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value12(String value) { + setSql(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord value13(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ConstraintsRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, String value8, String value9, String value10, String value11, String value12, Integer value13) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + value13(value13); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached ConstraintsRecord + */ + public ConstraintsRecord() { + super(Constraints.CONSTRAINTS); + } + + /** + * Create a detached, initialised ConstraintsRecord + */ + public ConstraintsRecord(String constraintCatalog, String constraintSchema, String constraintName, String constraintType, String tableCatalog, String tableSchema, String tableName, String uniqueIndexName, String checkExpression, String columnList, String remarks, String sql, Integer id) { + super(Constraints.CONSTRAINTS); + + setValue(0, constraintCatalog); + setValue(1, constraintSchema); + setValue(2, constraintName); + setValue(3, constraintType); + setValue(4, tableCatalog); + setValue(5, tableSchema); + setValue(6, tableName); + setValue(7, uniqueIndexName); + setValue(8, checkExpression); + setValue(9, columnList); + setValue(10, remarks); + setValue(11, sql); + setValue(12, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CrossReferencesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CrossReferencesRecord.java new file mode 100644 index 0000000000..ab5ae9c2a3 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CrossReferencesRecord.java @@ -0,0 +1,652 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.CrossReferences; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record14; +import org.jooq.Row14; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class CrossReferencesRecord extends TableRecordImpl implements Record14 { + + private static final long serialVersionUID = -328289893; + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_CATALOG. + */ + public void setPktableCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_CATALOG. + */ + public String getPktableCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_SCHEMA. + */ + public void setPktableSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_SCHEMA. + */ + public String getPktableSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_NAME. + */ + public void setPktableName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_NAME. + */ + public String getPktableName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKCOLUMN_NAME. + */ + public void setPkcolumnName(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKCOLUMN_NAME. + */ + public String getPkcolumnName() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_CATALOG. + */ + public void setFktableCatalog(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_CATALOG. + */ + public String getFktableCatalog() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_SCHEMA. + */ + public void setFktableSchema(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_SCHEMA. + */ + public String getFktableSchema() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_NAME. + */ + public void setFktableName(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_NAME. + */ + public String getFktableName() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKCOLUMN_NAME. + */ + public void setFkcolumnName(String value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKCOLUMN_NAME. + */ + public String getFkcolumnName() { + return (String) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.ORDINAL_POSITION. + */ + public void setOrdinalPosition(Short value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.ORDINAL_POSITION. + */ + public Short getOrdinalPosition() { + return (Short) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.UPDATE_RULE. + */ + public void setUpdateRule(Short value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.UPDATE_RULE. + */ + public Short getUpdateRule() { + return (Short) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.DELETE_RULE. + */ + public void setDeleteRule(Short value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.DELETE_RULE. + */ + public Short getDeleteRule() { + return (Short) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FK_NAME. + */ + public void setFkName(String value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FK_NAME. + */ + public String getFkName() { + return (String) getValue(11); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PK_NAME. + */ + public void setPkName(String value) { + setValue(12, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PK_NAME. + */ + public String getPkName() { + return (String) getValue(12); + } + + /** + * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.DEFERRABILITY. + */ + public void setDeferrability(Short value) { + setValue(13, value); + } + + /** + * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.DEFERRABILITY. + */ + public Short getDeferrability() { + return (Short) getValue(13); + } + + // ------------------------------------------------------------------------- + // Record14 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row14 fieldsRow() { + return (Row14) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row14 valuesRow() { + return (Row14) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return CrossReferences.CROSS_REFERENCES.PKTABLE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return CrossReferences.CROSS_REFERENCES.PKTABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return CrossReferences.CROSS_REFERENCES.PKTABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return CrossReferences.CROSS_REFERENCES.PKCOLUMN_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return CrossReferences.CROSS_REFERENCES.FKTABLE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return CrossReferences.CROSS_REFERENCES.FKTABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return CrossReferences.CROSS_REFERENCES.FKTABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return CrossReferences.CROSS_REFERENCES.FKCOLUMN_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return CrossReferences.CROSS_REFERENCES.ORDINAL_POSITION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return CrossReferences.CROSS_REFERENCES.UPDATE_RULE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return CrossReferences.CROSS_REFERENCES.DELETE_RULE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return CrossReferences.CROSS_REFERENCES.FK_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field13() { + return CrossReferences.CROSS_REFERENCES.PK_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field14() { + return CrossReferences.CROSS_REFERENCES.DEFERRABILITY; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getPktableCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getPktableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getPktableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getPkcolumnName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getFktableCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getFktableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getFktableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value8() { + return getFkcolumnName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value9() { + return getOrdinalPosition(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value10() { + return getUpdateRule(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value11() { + return getDeleteRule(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value12() { + return getFkName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value13() { + return getPkName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value14() { + return getDeferrability(); + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value1(String value) { + setPktableCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value2(String value) { + setPktableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value3(String value) { + setPktableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value4(String value) { + setPkcolumnName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value5(String value) { + setFktableCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value6(String value) { + setFktableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value7(String value) { + setFktableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value8(String value) { + setFkcolumnName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value9(Short value) { + setOrdinalPosition(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value10(Short value) { + setUpdateRule(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value11(Short value) { + setDeleteRule(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value12(String value) { + setFkName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value13(String value) { + setPkName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord value14(Short value) { + setDeferrability(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public CrossReferencesRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, String value8, Short value9, Short value10, Short value11, String value12, String value13, Short value14) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + value13(value13); + value14(value14); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached CrossReferencesRecord + */ + public CrossReferencesRecord() { + super(CrossReferences.CROSS_REFERENCES); + } + + /** + * Create a detached, initialised CrossReferencesRecord + */ + public CrossReferencesRecord(String pktableCatalog, String pktableSchema, String pktableName, String pkcolumnName, String fktableCatalog, String fktableSchema, String fktableName, String fkcolumnName, Short ordinalPosition, Short updateRule, Short deleteRule, String fkName, String pkName, Short deferrability) { + super(CrossReferences.CROSS_REFERENCES); + + setValue(0, pktableCatalog); + setValue(1, pktableSchema); + setValue(2, pktableName); + setValue(3, pkcolumnName); + setValue(4, fktableCatalog); + setValue(5, fktableSchema); + setValue(6, fktableName); + setValue(7, fkcolumnName); + setValue(8, ordinalPosition); + setValue(9, updateRule); + setValue(10, deleteRule); + setValue(11, fkName); + setValue(12, pkName); + setValue(13, deferrability); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/DomainsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/DomainsRecord.java new file mode 100644 index 0000000000..7f3b812750 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/DomainsRecord.java @@ -0,0 +1,652 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Domains; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record14; +import org.jooq.Row14; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class DomainsRecord extends TableRecordImpl implements Record14 { + + private static final long serialVersionUID = 1750298997; + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_CATALOG. + */ + public void setDomainCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_CATALOG. + */ + public String getDomainCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_SCHEMA. + */ + public void setDomainSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_SCHEMA. + */ + public String getDomainSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_NAME. + */ + public void setDomainName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_NAME. + */ + public String getDomainName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.COLUMN_DEFAULT. + */ + public void setColumnDefault(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.COLUMN_DEFAULT. + */ + public String getColumnDefault() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.IS_NULLABLE. + */ + public void setIsNullable(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.IS_NULLABLE. + */ + public String getIsNullable() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.DATA_TYPE. + */ + public void setDataType(Integer value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.DATA_TYPE. + */ + public Integer getDataType() { + return (Integer) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.PRECISION. + */ + public void setPrecision(Integer value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.PRECISION. + */ + public Integer getPrecision() { + return (Integer) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.SCALE. + */ + public void setScale(Integer value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.SCALE. + */ + public Integer getScale() { + return (Integer) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.TYPE_NAME. + */ + public void setTypeName(String value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.TYPE_NAME. + */ + public String getTypeName() { + return (String) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.SELECTIVITY. + */ + public void setSelectivity(Integer value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.SELECTIVITY. + */ + public Integer getSelectivity() { + return (Integer) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.CHECK_CONSTRAINT. + */ + public void setCheckConstraint(String value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.CHECK_CONSTRAINT. + */ + public String getCheckConstraint() { + return (String) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.REMARKS. + */ + public void setRemarks(String value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.REMARKS. + */ + public String getRemarks() { + return (String) getValue(11); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.SQL. + */ + public void setSql(String value) { + setValue(12, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.SQL. + */ + public String getSql() { + return (String) getValue(12); + } + + /** + * Setter for INFORMATION_SCHEMA.DOMAINS.ID. + */ + public void setId(Integer value) { + setValue(13, value); + } + + /** + * Getter for INFORMATION_SCHEMA.DOMAINS.ID. + */ + public Integer getId() { + return (Integer) getValue(13); + } + + // ------------------------------------------------------------------------- + // Record14 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row14 fieldsRow() { + return (Row14) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row14 valuesRow() { + return (Row14) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Domains.DOMAINS.DOMAIN_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Domains.DOMAINS.DOMAIN_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Domains.DOMAINS.DOMAIN_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Domains.DOMAINS.COLUMN_DEFAULT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Domains.DOMAINS.IS_NULLABLE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Domains.DOMAINS.DATA_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Domains.DOMAINS.PRECISION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return Domains.DOMAINS.SCALE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return Domains.DOMAINS.TYPE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return Domains.DOMAINS.SELECTIVITY; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return Domains.DOMAINS.CHECK_CONSTRAINT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return Domains.DOMAINS.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field13() { + return Domains.DOMAINS.SQL; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field14() { + return Domains.DOMAINS.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getDomainCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getDomainSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getDomainName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getColumnDefault(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getIsNullable(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value6() { + return getDataType(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value7() { + return getPrecision(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value8() { + return getScale(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value9() { + return getTypeName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value10() { + return getSelectivity(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value11() { + return getCheckConstraint(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value12() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value13() { + return getSql(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value14() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value1(String value) { + setDomainCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value2(String value) { + setDomainSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value3(String value) { + setDomainName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value4(String value) { + setColumnDefault(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value5(String value) { + setIsNullable(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value6(Integer value) { + setDataType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value7(Integer value) { + setPrecision(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value8(Integer value) { + setScale(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value9(String value) { + setTypeName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value10(Integer value) { + setSelectivity(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value11(String value) { + setCheckConstraint(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value12(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value13(String value) { + setSql(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord value14(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public DomainsRecord values(String value1, String value2, String value3, String value4, String value5, Integer value6, Integer value7, Integer value8, String value9, Integer value10, String value11, String value12, String value13, Integer value14) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + value13(value13); + value14(value14); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached DomainsRecord + */ + public DomainsRecord() { + super(Domains.DOMAINS); + } + + /** + * Create a detached, initialised DomainsRecord + */ + public DomainsRecord(String domainCatalog, String domainSchema, String domainName, String columnDefault, String isNullable, Integer dataType, Integer precision, Integer scale, String typeName, Integer selectivity, String checkConstraint, String remarks, String sql, Integer id) { + super(Domains.DOMAINS); + + setValue(0, domainCatalog); + setValue(1, domainSchema); + setValue(2, domainName); + setValue(3, columnDefault); + setValue(4, isNullable); + setValue(5, dataType); + setValue(6, precision); + setValue(7, scale); + setValue(8, typeName); + setValue(9, selectivity); + setValue(10, checkConstraint); + setValue(11, remarks); + setValue(12, sql); + setValue(13, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionAliasesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionAliasesRecord.java new file mode 100644 index 0000000000..7c095555bc --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionAliasesRecord.java @@ -0,0 +1,570 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionAliases; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record12; +import org.jooq.Row12; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class FunctionAliasesRecord extends TableRecordImpl implements Record12 { + + private static final long serialVersionUID = -788602015; + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_CATALOG. + */ + public void setAliasCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_CATALOG. + */ + public String getAliasCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_SCHEMA. + */ + public void setAliasSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_SCHEMA. + */ + public String getAliasSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_NAME. + */ + public void setAliasName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_NAME. + */ + public String getAliasName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_CLASS. + */ + public void setJavaClass(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_CLASS. + */ + public String getJavaClass() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_METHOD. + */ + public void setJavaMethod(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_METHOD. + */ + public String getJavaMethod() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.DATA_TYPE. + */ + public void setDataType(Integer value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.DATA_TYPE. + */ + public Integer getDataType() { + return (Integer) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.TYPE_NAME. + */ + public void setTypeName(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.TYPE_NAME. + */ + public String getTypeName() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.COLUMN_COUNT. + */ + public void setColumnCount(Integer value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.COLUMN_COUNT. + */ + public Integer getColumnCount() { + return (Integer) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.RETURNS_RESULT. + */ + public void setReturnsResult(Short value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.RETURNS_RESULT. + */ + public Short getReturnsResult() { + return (Short) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.REMARKS. + */ + public void setRemarks(String value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.REMARKS. + */ + public String getRemarks() { + return (String) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ID. + */ + public void setId(Integer value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ID. + */ + public Integer getId() { + return (Integer) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.SOURCE. + */ + public void setSource(String value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.SOURCE. + */ + public String getSource() { + return (String) getValue(11); + } + + // ------------------------------------------------------------------------- + // Record12 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row12 fieldsRow() { + return (Row12) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row12 valuesRow() { + return (Row12) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return FunctionAliases.FUNCTION_ALIASES.ALIAS_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return FunctionAliases.FUNCTION_ALIASES.ALIAS_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return FunctionAliases.FUNCTION_ALIASES.ALIAS_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return FunctionAliases.FUNCTION_ALIASES.JAVA_CLASS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return FunctionAliases.FUNCTION_ALIASES.JAVA_METHOD; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return FunctionAliases.FUNCTION_ALIASES.DATA_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return FunctionAliases.FUNCTION_ALIASES.TYPE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return FunctionAliases.FUNCTION_ALIASES.COLUMN_COUNT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return FunctionAliases.FUNCTION_ALIASES.RETURNS_RESULT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return FunctionAliases.FUNCTION_ALIASES.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return FunctionAliases.FUNCTION_ALIASES.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return FunctionAliases.FUNCTION_ALIASES.SOURCE; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getAliasCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getAliasSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getAliasName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getJavaClass(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getJavaMethod(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value6() { + return getDataType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getTypeName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value8() { + return getColumnCount(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value9() { + return getReturnsResult(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value10() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value11() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value12() { + return getSource(); + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value1(String value) { + setAliasCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value2(String value) { + setAliasSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value3(String value) { + setAliasName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value4(String value) { + setJavaClass(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value5(String value) { + setJavaMethod(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value6(Integer value) { + setDataType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value7(String value) { + setTypeName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value8(Integer value) { + setColumnCount(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value9(Short value) { + setReturnsResult(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value10(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value11(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord value12(String value) { + setSource(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionAliasesRecord values(String value1, String value2, String value3, String value4, String value5, Integer value6, String value7, Integer value8, Short value9, String value10, Integer value11, String value12) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached FunctionAliasesRecord + */ + public FunctionAliasesRecord() { + super(FunctionAliases.FUNCTION_ALIASES); + } + + /** + * Create a detached, initialised FunctionAliasesRecord + */ + public FunctionAliasesRecord(String aliasCatalog, String aliasSchema, String aliasName, String javaClass, String javaMethod, Integer dataType, String typeName, Integer columnCount, Short returnsResult, String remarks, Integer id, String source) { + super(FunctionAliases.FUNCTION_ALIASES); + + setValue(0, aliasCatalog); + setValue(1, aliasSchema); + setValue(2, aliasName); + setValue(3, javaClass); + setValue(4, javaMethod); + setValue(5, dataType); + setValue(6, typeName); + setValue(7, columnCount); + setValue(8, returnsResult); + setValue(9, remarks); + setValue(10, id); + setValue(11, source); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionColumnsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionColumnsRecord.java new file mode 100644 index 0000000000..3d0c81d2cd --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionColumnsRecord.java @@ -0,0 +1,775 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionColumns; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record17; +import org.jooq.Row17; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class FunctionColumnsRecord extends TableRecordImpl implements Record17 { + + private static final long serialVersionUID = 1196004173; + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_CATALOG. + */ + public void setAliasCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_CATALOG. + */ + public String getAliasCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_SCHEMA. + */ + public void setAliasSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_SCHEMA. + */ + public String getAliasSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_NAME. + */ + public void setAliasName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_NAME. + */ + public String getAliasName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_CLASS. + */ + public void setJavaClass(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_CLASS. + */ + public String getJavaClass() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_METHOD. + */ + public void setJavaMethod(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_METHOD. + */ + public String getJavaMethod() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_COUNT. + */ + public void setColumnCount(Integer value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_COUNT. + */ + public Integer getColumnCount() { + return (Integer) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.POS. + */ + public void setPos(Integer value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.POS. + */ + public Integer getPos() { + return (Integer) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_NAME. + */ + public void setColumnName(String value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_NAME. + */ + public String getColumnName() { + return (String) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.DATA_TYPE. + */ + public void setDataType(Integer value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.DATA_TYPE. + */ + public Integer getDataType() { + return (Integer) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.TYPE_NAME. + */ + public void setTypeName(String value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.TYPE_NAME. + */ + public String getTypeName() { + return (String) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.PRECISION. + */ + public void setPrecision(Integer value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.PRECISION. + */ + public Integer getPrecision() { + return (Integer) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.SCALE. + */ + public void setScale(Short value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.SCALE. + */ + public Short getScale() { + return (Short) getValue(11); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.RADIX. + */ + public void setRadix(Short value) { + setValue(12, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.RADIX. + */ + public Short getRadix() { + return (Short) getValue(12); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.NULLABLE. + */ + public void setNullable(Short value) { + setValue(13, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.NULLABLE. + */ + public Short getNullable() { + return (Short) getValue(13); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_TYPE. + */ + public void setColumnType(Short value) { + setValue(14, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_TYPE. + */ + public Short getColumnType() { + return (Short) getValue(14); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.REMARKS. + */ + public void setRemarks(String value) { + setValue(15, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.REMARKS. + */ + public String getRemarks() { + return (String) getValue(15); + } + + /** + * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_DEFAULT. + */ + public void setColumnDefault(String value) { + setValue(16, value); + } + + /** + * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_DEFAULT. + */ + public String getColumnDefault() { + return (String) getValue(16); + } + + // ------------------------------------------------------------------------- + // Record17 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row17 fieldsRow() { + return (Row17) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row17 valuesRow() { + return (Row17) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return FunctionColumns.FUNCTION_COLUMNS.ALIAS_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return FunctionColumns.FUNCTION_COLUMNS.ALIAS_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return FunctionColumns.FUNCTION_COLUMNS.ALIAS_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return FunctionColumns.FUNCTION_COLUMNS.JAVA_CLASS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return FunctionColumns.FUNCTION_COLUMNS.JAVA_METHOD; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return FunctionColumns.FUNCTION_COLUMNS.COLUMN_COUNT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return FunctionColumns.FUNCTION_COLUMNS.POS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return FunctionColumns.FUNCTION_COLUMNS.COLUMN_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return FunctionColumns.FUNCTION_COLUMNS.DATA_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return FunctionColumns.FUNCTION_COLUMNS.TYPE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return FunctionColumns.FUNCTION_COLUMNS.PRECISION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return FunctionColumns.FUNCTION_COLUMNS.SCALE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field13() { + return FunctionColumns.FUNCTION_COLUMNS.RADIX; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field14() { + return FunctionColumns.FUNCTION_COLUMNS.NULLABLE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field15() { + return FunctionColumns.FUNCTION_COLUMNS.COLUMN_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field16() { + return FunctionColumns.FUNCTION_COLUMNS.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field17() { + return FunctionColumns.FUNCTION_COLUMNS.COLUMN_DEFAULT; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getAliasCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getAliasSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getAliasName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getJavaClass(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getJavaMethod(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value6() { + return getColumnCount(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value7() { + return getPos(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value8() { + return getColumnName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value9() { + return getDataType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value10() { + return getTypeName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value11() { + return getPrecision(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value12() { + return getScale(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value13() { + return getRadix(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value14() { + return getNullable(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value15() { + return getColumnType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value16() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value17() { + return getColumnDefault(); + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value1(String value) { + setAliasCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value2(String value) { + setAliasSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value3(String value) { + setAliasName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value4(String value) { + setJavaClass(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value5(String value) { + setJavaMethod(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value6(Integer value) { + setColumnCount(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value7(Integer value) { + setPos(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value8(String value) { + setColumnName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value9(Integer value) { + setDataType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value10(String value) { + setTypeName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value11(Integer value) { + setPrecision(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value12(Short value) { + setScale(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value13(Short value) { + setRadix(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value14(Short value) { + setNullable(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value15(Short value) { + setColumnType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value16(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord value17(String value) { + setColumnDefault(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public FunctionColumnsRecord values(String value1, String value2, String value3, String value4, String value5, Integer value6, Integer value7, String value8, Integer value9, String value10, Integer value11, Short value12, Short value13, Short value14, Short value15, String value16, String value17) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + value13(value13); + value14(value14); + value15(value15); + value16(value16); + value17(value17); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached FunctionColumnsRecord + */ + public FunctionColumnsRecord() { + super(FunctionColumns.FUNCTION_COLUMNS); + } + + /** + * Create a detached, initialised FunctionColumnsRecord + */ + public FunctionColumnsRecord(String aliasCatalog, String aliasSchema, String aliasName, String javaClass, String javaMethod, Integer columnCount, Integer pos, String columnName, Integer dataType, String typeName, Integer precision, Short scale, Short radix, Short nullable, Short columnType, String remarks, String columnDefault) { + super(FunctionColumns.FUNCTION_COLUMNS); + + setValue(0, aliasCatalog); + setValue(1, aliasSchema); + setValue(2, aliasName); + setValue(3, javaClass); + setValue(4, javaMethod); + setValue(5, columnCount); + setValue(6, pos); + setValue(7, columnName); + setValue(8, dataType); + setValue(9, typeName); + setValue(10, precision); + setValue(11, scale); + setValue(12, radix); + setValue(13, nullable); + setValue(14, columnType); + setValue(15, remarks); + setValue(16, columnDefault); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/HelpRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/HelpRecord.java new file mode 100644 index 0000000000..1ed95e2ff7 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/HelpRecord.java @@ -0,0 +1,283 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Help; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record5; +import org.jooq.Row5; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class HelpRecord extends TableRecordImpl implements Record5 { + + private static final long serialVersionUID = -1612064442; + + /** + * Setter for INFORMATION_SCHEMA.HELP.ID. + */ + public void setId(Integer value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.HELP.ID. + */ + public Integer getId() { + return (Integer) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.HELP.SECTION. + */ + public void setSection(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.HELP.SECTION. + */ + public String getSection() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.HELP.TOPIC. + */ + public void setTopic(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.HELP.TOPIC. + */ + public String getTopic() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.HELP.SYNTAX. + */ + public void setSyntax(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.HELP.SYNTAX. + */ + public String getSyntax() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.HELP.TEXT. + */ + public void setText(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.HELP.TEXT. + */ + public String getText() { + return (String) getValue(4); + } + + // ------------------------------------------------------------------------- + // Record5 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row5 fieldsRow() { + return (Row5) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row5 valuesRow() { + return (Row5) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Help.HELP.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Help.HELP.SECTION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Help.HELP.TOPIC; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Help.HELP.SYNTAX; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Help.HELP.TEXT; + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value1() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getSection(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getTopic(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getSyntax(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getText(); + } + + /** + * {@inheritDoc} + */ + @Override + public HelpRecord value1(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public HelpRecord value2(String value) { + setSection(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public HelpRecord value3(String value) { + setTopic(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public HelpRecord value4(String value) { + setSyntax(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public HelpRecord value5(String value) { + setText(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public HelpRecord values(Integer value1, String value2, String value3, String value4, String value5) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached HelpRecord + */ + public HelpRecord() { + super(Help.HELP); + } + + /** + * Create a detached, initialised HelpRecord + */ + public HelpRecord(Integer id, String section, String topic, String syntax, String text) { + super(Help.HELP); + + setValue(0, id); + setValue(1, section); + setValue(2, topic); + setValue(3, syntax); + setValue(4, text); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/InDoubtRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/InDoubtRecord.java new file mode 100644 index 0000000000..dd33d014fb --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/InDoubtRecord.java @@ -0,0 +1,160 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.InDoubt; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record2; +import org.jooq.Row2; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class InDoubtRecord extends TableRecordImpl implements Record2 { + + private static final long serialVersionUID = 115858325; + + /** + * Setter for INFORMATION_SCHEMA.IN_DOUBT.TRANSACTION. + */ + public void setTransaction(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.IN_DOUBT.TRANSACTION. + */ + public String getTransaction() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.IN_DOUBT.STATE. + */ + public void setState(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.IN_DOUBT.STATE. + */ + public String getState() { + return (String) getValue(1); + } + + // ------------------------------------------------------------------------- + // Record2 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row2 fieldsRow() { + return (Row2) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row2 valuesRow() { + return (Row2) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return InDoubt.IN_DOUBT.TRANSACTION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return InDoubt.IN_DOUBT.STATE; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getTransaction(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getState(); + } + + /** + * {@inheritDoc} + */ + @Override + public InDoubtRecord value1(String value) { + setTransaction(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public InDoubtRecord value2(String value) { + setState(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public InDoubtRecord values(String value1, String value2) { + value1(value1); + value2(value2); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached InDoubtRecord + */ + public InDoubtRecord() { + super(InDoubt.IN_DOUBT); + } + + /** + * Create a detached, initialised InDoubtRecord + */ + public InDoubtRecord(String transaction, String state) { + super(InDoubt.IN_DOUBT); + + setValue(0, transaction); + setValue(1, state); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/IndexesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/IndexesRecord.java new file mode 100644 index 0000000000..87a34b2473 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/IndexesRecord.java @@ -0,0 +1,939 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Indexes; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record21; +import org.jooq.Row21; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class IndexesRecord extends TableRecordImpl implements Record21 { + + private static final long serialVersionUID = -1683028432; + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.TABLE_CATALOG. + */ + public void setTableCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.TABLE_CATALOG. + */ + public String getTableCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.NON_UNIQUE. + */ + public void setNonUnique(Boolean value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.NON_UNIQUE. + */ + public Boolean getNonUnique() { + return (Boolean) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.INDEX_NAME. + */ + public void setIndexName(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.INDEX_NAME. + */ + public String getIndexName() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.ORDINAL_POSITION. + */ + public void setOrdinalPosition(Short value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.ORDINAL_POSITION. + */ + public Short getOrdinalPosition() { + return (Short) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.COLUMN_NAME. + */ + public void setColumnName(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.COLUMN_NAME. + */ + public String getColumnName() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.CARDINALITY. + */ + public void setCardinality(Integer value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.CARDINALITY. + */ + public Integer getCardinality() { + return (Integer) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.PRIMARY_KEY. + */ + public void setPrimaryKey_(Boolean value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.PRIMARY_KEY. + */ + public Boolean getPrimaryKey_() { + return (Boolean) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.INDEX_TYPE_NAME. + */ + public void setIndexTypeName(String value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.INDEX_TYPE_NAME. + */ + public String getIndexTypeName() { + return (String) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.IS_GENERATED. + */ + public void setIsGenerated(Boolean value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.IS_GENERATED. + */ + public Boolean getIsGenerated() { + return (Boolean) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.INDEX_TYPE. + */ + public void setIndexType(Short value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.INDEX_TYPE. + */ + public Short getIndexType() { + return (Short) getValue(11); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.ASC_OR_DESC. + */ + public void setAscOrDesc(String value) { + setValue(12, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.ASC_OR_DESC. + */ + public String getAscOrDesc() { + return (String) getValue(12); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.PAGES. + */ + public void setPages(Integer value) { + setValue(13, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.PAGES. + */ + public Integer getPages() { + return (Integer) getValue(13); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.FILTER_CONDITION. + */ + public void setFilterCondition(String value) { + setValue(14, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.FILTER_CONDITION. + */ + public String getFilterCondition() { + return (String) getValue(14); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.REMARKS. + */ + public void setRemarks(String value) { + setValue(15, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.REMARKS. + */ + public String getRemarks() { + return (String) getValue(15); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.SQL. + */ + public void setSql(String value) { + setValue(16, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.SQL. + */ + public String getSql() { + return (String) getValue(16); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.ID. + */ + public void setId(Integer value) { + setValue(17, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.ID. + */ + public Integer getId() { + return (Integer) getValue(17); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.SORT_TYPE. + */ + public void setSortType(Integer value) { + setValue(18, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.SORT_TYPE. + */ + public Integer getSortType() { + return (Integer) getValue(18); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.CONSTRAINT_NAME. + */ + public void setConstraintName(String value) { + setValue(19, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.CONSTRAINT_NAME. + */ + public String getConstraintName() { + return (String) getValue(19); + } + + /** + * Setter for INFORMATION_SCHEMA.INDEXES.INDEX_CLASS. + */ + public void setIndexClass(String value) { + setValue(20, value); + } + + /** + * Getter for INFORMATION_SCHEMA.INDEXES.INDEX_CLASS. + */ + public String getIndexClass() { + return (String) getValue(20); + } + + // ------------------------------------------------------------------------- + // Record21 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row21 fieldsRow() { + return (Row21) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row21 valuesRow() { + return (Row21) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Indexes.INDEXES.TABLE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Indexes.INDEXES.TABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Indexes.INDEXES.TABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Indexes.INDEXES.NON_UNIQUE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Indexes.INDEXES.INDEX_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Indexes.INDEXES.ORDINAL_POSITION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Indexes.INDEXES.COLUMN_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return Indexes.INDEXES.CARDINALITY; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return Indexes.INDEXES.PRIMARY_KEY; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return Indexes.INDEXES.INDEX_TYPE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return Indexes.INDEXES.IS_GENERATED; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return Indexes.INDEXES.INDEX_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field13() { + return Indexes.INDEXES.ASC_OR_DESC; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field14() { + return Indexes.INDEXES.PAGES; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field15() { + return Indexes.INDEXES.FILTER_CONDITION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field16() { + return Indexes.INDEXES.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field17() { + return Indexes.INDEXES.SQL; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field18() { + return Indexes.INDEXES.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field19() { + return Indexes.INDEXES.SORT_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field20() { + return Indexes.INDEXES.CONSTRAINT_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field21() { + return Indexes.INDEXES.INDEX_CLASS; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getTableCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getTableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getTableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value4() { + return getNonUnique(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getIndexName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value6() { + return getOrdinalPosition(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getColumnName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value8() { + return getCardinality(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value9() { + return getPrimaryKey_(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value10() { + return getIndexTypeName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value11() { + return getIsGenerated(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value12() { + return getIndexType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value13() { + return getAscOrDesc(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value14() { + return getPages(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value15() { + return getFilterCondition(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value16() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value17() { + return getSql(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value18() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value19() { + return getSortType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value20() { + return getConstraintName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value21() { + return getIndexClass(); + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value1(String value) { + setTableCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value2(String value) { + setTableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value3(String value) { + setTableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value4(Boolean value) { + setNonUnique(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value5(String value) { + setIndexName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value6(Short value) { + setOrdinalPosition(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value7(String value) { + setColumnName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value8(Integer value) { + setCardinality(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value9(Boolean value) { + setPrimaryKey_(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value10(String value) { + setIndexTypeName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value11(Boolean value) { + setIsGenerated(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value12(Short value) { + setIndexType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value13(String value) { + setAscOrDesc(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value14(Integer value) { + setPages(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value15(String value) { + setFilterCondition(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value16(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value17(String value) { + setSql(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value18(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value19(Integer value) { + setSortType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value20(String value) { + setConstraintName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord value21(String value) { + setIndexClass(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public IndexesRecord values(String value1, String value2, String value3, Boolean value4, String value5, Short value6, String value7, Integer value8, Boolean value9, String value10, Boolean value11, Short value12, String value13, Integer value14, String value15, String value16, String value17, Integer value18, Integer value19, String value20, String value21) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + value13(value13); + value14(value14); + value15(value15); + value16(value16); + value17(value17); + value18(value18); + value19(value19); + value20(value20); + value21(value21); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached IndexesRecord + */ + public IndexesRecord() { + super(Indexes.INDEXES); + } + + /** + * Create a detached, initialised IndexesRecord + */ + public IndexesRecord(String tableCatalog, String tableSchema, String tableName, Boolean nonUnique, String indexName, Short ordinalPosition, String columnName, Integer cardinality, Boolean primaryKey, String indexTypeName, Boolean isGenerated, Short indexType, String ascOrDesc, Integer pages, String filterCondition, String remarks, String sql, Integer id, Integer sortType, String constraintName, String indexClass) { + super(Indexes.INDEXES); + + setValue(0, tableCatalog); + setValue(1, tableSchema); + setValue(2, tableName); + setValue(3, nonUnique); + setValue(4, indexName); + setValue(5, ordinalPosition); + setValue(6, columnName); + setValue(7, cardinality); + setValue(8, primaryKey); + setValue(9, indexTypeName); + setValue(10, isGenerated); + setValue(11, indexType); + setValue(12, ascOrDesc); + setValue(13, pages); + setValue(14, filterCondition); + setValue(15, remarks); + setValue(16, sql); + setValue(17, id); + setValue(18, sortType); + setValue(19, constraintName); + setValue(20, indexClass); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/LocksRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/LocksRecord.java new file mode 100644 index 0000000000..23cbf780e6 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/LocksRecord.java @@ -0,0 +1,242 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Locks; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record4; +import org.jooq.Row4; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class LocksRecord extends TableRecordImpl implements Record4 { + + private static final long serialVersionUID = 1548907854; + + /** + * Setter for INFORMATION_SCHEMA.LOCKS.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.LOCKS.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.LOCKS.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.LOCKS.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.LOCKS.SESSION_ID. + */ + public void setSessionId(Integer value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.LOCKS.SESSION_ID. + */ + public Integer getSessionId() { + return (Integer) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.LOCKS.LOCK_TYPE. + */ + public void setLockType(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.LOCKS.LOCK_TYPE. + */ + public String getLockType() { + return (String) getValue(3); + } + + // ------------------------------------------------------------------------- + // Record4 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row4 fieldsRow() { + return (Row4) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row4 valuesRow() { + return (Row4) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Locks.LOCKS.TABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Locks.LOCKS.TABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Locks.LOCKS.SESSION_ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Locks.LOCKS.LOCK_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getTableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getTableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value3() { + return getSessionId(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getLockType(); + } + + /** + * {@inheritDoc} + */ + @Override + public LocksRecord value1(String value) { + setTableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LocksRecord value2(String value) { + setTableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LocksRecord value3(Integer value) { + setSessionId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LocksRecord value4(String value) { + setLockType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public LocksRecord values(String value1, String value2, Integer value3, String value4) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached LocksRecord + */ + public LocksRecord() { + super(Locks.LOCKS); + } + + /** + * Create a detached, initialised LocksRecord + */ + public LocksRecord(String tableSchema, String tableName, Integer sessionId, String lockType) { + super(Locks.LOCKS); + + setValue(0, tableSchema); + setValue(1, tableName); + setValue(2, sessionId); + setValue(3, lockType); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/QueryStatisticsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/QueryStatisticsRecord.java new file mode 100644 index 0000000000..56cd9d15c4 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/QueryStatisticsRecord.java @@ -0,0 +1,570 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.QueryStatistics; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record12; +import org.jooq.Row12; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class QueryStatisticsRecord extends TableRecordImpl implements Record12 { + + private static final long serialVersionUID = -1608090322; + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.SQL_STATEMENT. + */ + public void setSqlStatement(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.SQL_STATEMENT. + */ + public String getSqlStatement() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.EXECUTION_COUNT. + */ + public void setExecutionCount(Integer value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.EXECUTION_COUNT. + */ + public Integer getExecutionCount() { + return (Integer) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_EXECUTION_TIME. + */ + public void setMinExecutionTime(Long value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_EXECUTION_TIME. + */ + public Long getMinExecutionTime() { + return (Long) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_EXECUTION_TIME. + */ + public void setMaxExecutionTime(Long value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_EXECUTION_TIME. + */ + public Long getMaxExecutionTime() { + return (Long) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_EXECUTION_TIME. + */ + public void setCumulativeExecutionTime(Long value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_EXECUTION_TIME. + */ + public Long getCumulativeExecutionTime() { + return (Long) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_EXECUTION_TIME. + */ + public void setAverageExecutionTime(Double value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_EXECUTION_TIME. + */ + public Double getAverageExecutionTime() { + return (Double) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_EXECUTION_TIME. + */ + public void setStdDevExecutionTime(Double value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_EXECUTION_TIME. + */ + public Double getStdDevExecutionTime() { + return (Double) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_ROW_COUNT. + */ + public void setMinRowCount(Integer value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_ROW_COUNT. + */ + public Integer getMinRowCount() { + return (Integer) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_ROW_COUNT. + */ + public void setMaxRowCount(Integer value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_ROW_COUNT. + */ + public Integer getMaxRowCount() { + return (Integer) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_ROW_COUNT. + */ + public void setCumulativeRowCount(Long value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_ROW_COUNT. + */ + public Long getCumulativeRowCount() { + return (Long) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_ROW_COUNT. + */ + public void setAverageRowCount(Double value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_ROW_COUNT. + */ + public Double getAverageRowCount() { + return (Double) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_ROW_COUNT. + */ + public void setStdDevRowCount(Double value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_ROW_COUNT. + */ + public Double getStdDevRowCount() { + return (Double) getValue(11); + } + + // ------------------------------------------------------------------------- + // Record12 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row12 fieldsRow() { + return (Row12) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row12 valuesRow() { + return (Row12) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return QueryStatistics.QUERY_STATISTICS.SQL_STATEMENT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return QueryStatistics.QUERY_STATISTICS.EXECUTION_COUNT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return QueryStatistics.QUERY_STATISTICS.MIN_EXECUTION_TIME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return QueryStatistics.QUERY_STATISTICS.MAX_EXECUTION_TIME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return QueryStatistics.QUERY_STATISTICS.CUMULATIVE_EXECUTION_TIME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return QueryStatistics.QUERY_STATISTICS.AVERAGE_EXECUTION_TIME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return QueryStatistics.QUERY_STATISTICS.STD_DEV_EXECUTION_TIME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return QueryStatistics.QUERY_STATISTICS.MIN_ROW_COUNT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return QueryStatistics.QUERY_STATISTICS.MAX_ROW_COUNT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return QueryStatistics.QUERY_STATISTICS.CUMULATIVE_ROW_COUNT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return QueryStatistics.QUERY_STATISTICS.AVERAGE_ROW_COUNT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return QueryStatistics.QUERY_STATISTICS.STD_DEV_ROW_COUNT; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getSqlStatement(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value2() { + return getExecutionCount(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value3() { + return getMinExecutionTime(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value4() { + return getMaxExecutionTime(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value5() { + return getCumulativeExecutionTime(); + } + + /** + * {@inheritDoc} + */ + @Override + public Double value6() { + return getAverageExecutionTime(); + } + + /** + * {@inheritDoc} + */ + @Override + public Double value7() { + return getStdDevExecutionTime(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value8() { + return getMinRowCount(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value9() { + return getMaxRowCount(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value10() { + return getCumulativeRowCount(); + } + + /** + * {@inheritDoc} + */ + @Override + public Double value11() { + return getAverageRowCount(); + } + + /** + * {@inheritDoc} + */ + @Override + public Double value12() { + return getStdDevRowCount(); + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value1(String value) { + setSqlStatement(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value2(Integer value) { + setExecutionCount(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value3(Long value) { + setMinExecutionTime(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value4(Long value) { + setMaxExecutionTime(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value5(Long value) { + setCumulativeExecutionTime(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value6(Double value) { + setAverageExecutionTime(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value7(Double value) { + setStdDevExecutionTime(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value8(Integer value) { + setMinRowCount(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value9(Integer value) { + setMaxRowCount(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value10(Long value) { + setCumulativeRowCount(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value11(Double value) { + setAverageRowCount(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord value12(Double value) { + setStdDevRowCount(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public QueryStatisticsRecord values(String value1, Integer value2, Long value3, Long value4, Long value5, Double value6, Double value7, Integer value8, Integer value9, Long value10, Double value11, Double value12) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached QueryStatisticsRecord + */ + public QueryStatisticsRecord() { + super(QueryStatistics.QUERY_STATISTICS); + } + + /** + * Create a detached, initialised QueryStatisticsRecord + */ + public QueryStatisticsRecord(String sqlStatement, Integer executionCount, Long minExecutionTime, Long maxExecutionTime, Long cumulativeExecutionTime, Double averageExecutionTime, Double stdDevExecutionTime, Integer minRowCount, Integer maxRowCount, Long cumulativeRowCount, Double averageRowCount, Double stdDevRowCount) { + super(QueryStatistics.QUERY_STATISTICS); + + setValue(0, sqlStatement); + setValue(1, executionCount); + setValue(2, minExecutionTime); + setValue(3, maxExecutionTime); + setValue(4, cumulativeExecutionTime); + setValue(5, averageExecutionTime); + setValue(6, stdDevExecutionTime); + setValue(7, minRowCount); + setValue(8, maxRowCount); + setValue(9, cumulativeRowCount); + setValue(10, averageRowCount); + setValue(11, stdDevRowCount); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RightsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RightsRecord.java new file mode 100644 index 0000000000..a9c50817c7 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RightsRecord.java @@ -0,0 +1,365 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Rights; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record7; +import org.jooq.Row7; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class RightsRecord extends TableRecordImpl implements Record7 { + + private static final long serialVersionUID = 269610816; + + /** + * Setter for INFORMATION_SCHEMA.RIGHTS.GRANTEE. + */ + public void setGrantee(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.RIGHTS.GRANTEE. + */ + public String getGrantee() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.RIGHTS.GRANTEETYPE. + */ + public void setGranteetype(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.RIGHTS.GRANTEETYPE. + */ + public String getGranteetype() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.RIGHTS.GRANTEDROLE. + */ + public void setGrantedrole(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.RIGHTS.GRANTEDROLE. + */ + public String getGrantedrole() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.RIGHTS.RIGHTS. + */ + public void setRights(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.RIGHTS.RIGHTS. + */ + public String getRights() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.RIGHTS.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.RIGHTS.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.RIGHTS.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.RIGHTS.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.RIGHTS.ID. + */ + public void setId(Integer value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.RIGHTS.ID. + */ + public Integer getId() { + return (Integer) getValue(6); + } + + // ------------------------------------------------------------------------- + // Record7 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row7 fieldsRow() { + return (Row7) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row7 valuesRow() { + return (Row7) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Rights.RIGHTS.GRANTEE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Rights.RIGHTS.GRANTEETYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Rights.RIGHTS.GRANTEDROLE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Rights.RIGHTS.RIGHTS_; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Rights.RIGHTS.TABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Rights.RIGHTS.TABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Rights.RIGHTS.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getGrantee(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getGranteetype(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getGrantedrole(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getRights(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getTableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getTableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value7() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public RightsRecord value1(String value) { + setGrantee(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RightsRecord value2(String value) { + setGranteetype(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RightsRecord value3(String value) { + setGrantedrole(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RightsRecord value4(String value) { + setRights(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RightsRecord value5(String value) { + setTableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RightsRecord value6(String value) { + setTableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RightsRecord value7(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RightsRecord values(String value1, String value2, String value3, String value4, String value5, String value6, Integer value7) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached RightsRecord + */ + public RightsRecord() { + super(Rights.RIGHTS); + } + + /** + * Create a detached, initialised RightsRecord + */ + public RightsRecord(String grantee, String granteetype, String grantedrole, String rights, String tableSchema, String tableName, Integer id) { + super(Rights.RIGHTS); + + setValue(0, grantee); + setValue(1, granteetype); + setValue(2, grantedrole); + setValue(3, rights); + setValue(4, tableSchema); + setValue(5, tableName); + setValue(6, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RolesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RolesRecord.java new file mode 100644 index 0000000000..a648165fc5 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RolesRecord.java @@ -0,0 +1,201 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Roles; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record3; +import org.jooq.Row3; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class RolesRecord extends TableRecordImpl implements Record3 { + + private static final long serialVersionUID = -579805711; + + /** + * Setter for INFORMATION_SCHEMA.ROLES.NAME. + */ + public void setName(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.ROLES.NAME. + */ + public String getName() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.ROLES.REMARKS. + */ + public void setRemarks(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.ROLES.REMARKS. + */ + public String getRemarks() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.ROLES.ID. + */ + public void setId(Integer value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.ROLES.ID. + */ + public Integer getId() { + return (Integer) getValue(2); + } + + // ------------------------------------------------------------------------- + // Record3 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row3 fieldsRow() { + return (Row3) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row3 valuesRow() { + return (Row3) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Roles.ROLES.NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Roles.ROLES.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Roles.ROLES.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value3() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public RolesRecord value1(String value) { + setName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RolesRecord value2(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RolesRecord value3(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public RolesRecord values(String value1, String value2, Integer value3) { + value1(value1); + value2(value2); + value3(value3); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached RolesRecord + */ + public RolesRecord() { + super(Roles.ROLES); + } + + /** + * Create a detached, initialised RolesRecord + */ + public RolesRecord(String name, String remarks, Integer id) { + super(Roles.ROLES); + + setValue(0, name); + setValue(1, remarks); + setValue(2, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SchemataRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SchemataRecord.java new file mode 100644 index 0000000000..21ae1edfb4 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SchemataRecord.java @@ -0,0 +1,406 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Schemata; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record8; +import org.jooq.Row8; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class SchemataRecord extends TableRecordImpl implements Record8 { + + private static final long serialVersionUID = -163519189; + + /** + * Setter for INFORMATION_SCHEMA.SCHEMATA.CATALOG_NAME. + */ + public void setCatalogName(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SCHEMATA.CATALOG_NAME. + */ + public String getCatalogName() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME. + */ + public void setSchemaName(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME. + */ + public String getSchemaName() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.SCHEMATA.SCHEMA_OWNER. + */ + public void setSchemaOwner(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SCHEMATA.SCHEMA_OWNER. + */ + public String getSchemaOwner() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.SCHEMATA.DEFAULT_CHARACTER_SET_NAME. + */ + public void setDefaultCharacterSetName(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SCHEMATA.DEFAULT_CHARACTER_SET_NAME. + */ + public String getDefaultCharacterSetName() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.SCHEMATA.DEFAULT_COLLATION_NAME. + */ + public void setDefaultCollationName(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SCHEMATA.DEFAULT_COLLATION_NAME. + */ + public String getDefaultCollationName() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.SCHEMATA.IS_DEFAULT. + */ + public void setIsDefault(Boolean value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SCHEMATA.IS_DEFAULT. + */ + public Boolean getIsDefault() { + return (Boolean) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.SCHEMATA.REMARKS. + */ + public void setRemarks(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SCHEMATA.REMARKS. + */ + public String getRemarks() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.SCHEMATA.ID. + */ + public void setId(Integer value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SCHEMATA.ID. + */ + public Integer getId() { + return (Integer) getValue(7); + } + + // ------------------------------------------------------------------------- + // Record8 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row8 fieldsRow() { + return (Row8) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row8 valuesRow() { + return (Row8) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Schemata.SCHEMATA.CATALOG_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Schemata.SCHEMATA.SCHEMA_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Schemata.SCHEMATA.SCHEMA_OWNER; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Schemata.SCHEMATA.DEFAULT_CHARACTER_SET_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Schemata.SCHEMATA.DEFAULT_COLLATION_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Schemata.SCHEMATA.IS_DEFAULT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Schemata.SCHEMATA.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return Schemata.SCHEMATA.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getCatalogName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getSchemaName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getSchemaOwner(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getDefaultCharacterSetName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getDefaultCollationName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value6() { + return getIsDefault(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value8() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public SchemataRecord value1(String value) { + setCatalogName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SchemataRecord value2(String value) { + setSchemaName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SchemataRecord value3(String value) { + setSchemaOwner(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SchemataRecord value4(String value) { + setDefaultCharacterSetName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SchemataRecord value5(String value) { + setDefaultCollationName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SchemataRecord value6(Boolean value) { + setIsDefault(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SchemataRecord value7(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SchemataRecord value8(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SchemataRecord values(String value1, String value2, String value3, String value4, String value5, Boolean value6, String value7, Integer value8) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached SchemataRecord + */ + public SchemataRecord() { + super(Schemata.SCHEMATA); + } + + /** + * Create a detached, initialised SchemataRecord + */ + public SchemataRecord(String catalogName, String schemaName, String schemaOwner, String defaultCharacterSetName, String defaultCollationName, Boolean isDefault, String remarks, Integer id) { + super(Schemata.SCHEMATA); + + setValue(0, catalogName); + setValue(1, schemaName); + setValue(2, schemaOwner); + setValue(3, defaultCharacterSetName); + setValue(4, defaultCollationName); + setValue(5, isDefault); + setValue(6, remarks); + setValue(7, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SequencesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SequencesRecord.java new file mode 100644 index 0000000000..cc8285599f --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SequencesRecord.java @@ -0,0 +1,570 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Sequences; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record12; +import org.jooq.Row12; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class SequencesRecord extends TableRecordImpl implements Record12 { + + private static final long serialVersionUID = -1861251627; + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_CATALOG. + */ + public void setSequenceCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_CATALOG. + */ + public String getSequenceCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA. + */ + public void setSequenceSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA. + */ + public String getSequenceSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME. + */ + public void setSequenceName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME. + */ + public String getSequenceName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.CURRENT_VALUE. + */ + public void setCurrentValue(Long value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.CURRENT_VALUE. + */ + public Long getCurrentValue() { + return (Long) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.INCREMENT. + */ + public void setIncrement(Long value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.INCREMENT. + */ + public Long getIncrement() { + return (Long) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.IS_GENERATED. + */ + public void setIsGenerated(Boolean value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.IS_GENERATED. + */ + public Boolean getIsGenerated() { + return (Boolean) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.REMARKS. + */ + public void setRemarks(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.REMARKS. + */ + public String getRemarks() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.CACHE. + */ + public void setCache(Long value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.CACHE. + */ + public Long getCache() { + return (Long) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.MIN_VALUE. + */ + public void setMinValue(Long value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.MIN_VALUE. + */ + public Long getMinValue() { + return (Long) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.MAX_VALUE. + */ + public void setMaxValue(Long value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.MAX_VALUE. + */ + public Long getMaxValue() { + return (Long) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.IS_CYCLE. + */ + public void setIsCycle(Boolean value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.IS_CYCLE. + */ + public Boolean getIsCycle() { + return (Boolean) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.SEQUENCES.ID. + */ + public void setId(Integer value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SEQUENCES.ID. + */ + public Integer getId() { + return (Integer) getValue(11); + } + + // ------------------------------------------------------------------------- + // Record12 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row12 fieldsRow() { + return (Row12) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row12 valuesRow() { + return (Row12) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Sequences.SEQUENCES.SEQUENCE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Sequences.SEQUENCES.SEQUENCE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Sequences.SEQUENCES.SEQUENCE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Sequences.SEQUENCES.CURRENT_VALUE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Sequences.SEQUENCES.INCREMENT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Sequences.SEQUENCES.IS_GENERATED; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Sequences.SEQUENCES.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return Sequences.SEQUENCES.CACHE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return Sequences.SEQUENCES.MIN_VALUE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return Sequences.SEQUENCES.MAX_VALUE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return Sequences.SEQUENCES.IS_CYCLE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return Sequences.SEQUENCES.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getSequenceCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getSequenceSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getSequenceName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value4() { + return getCurrentValue(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value5() { + return getIncrement(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value6() { + return getIsGenerated(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value8() { + return getCache(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value9() { + return getMinValue(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value10() { + return getMaxValue(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value11() { + return getIsCycle(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value12() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value1(String value) { + setSequenceCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value2(String value) { + setSequenceSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value3(String value) { + setSequenceName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value4(Long value) { + setCurrentValue(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value5(Long value) { + setIncrement(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value6(Boolean value) { + setIsGenerated(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value7(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value8(Long value) { + setCache(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value9(Long value) { + setMinValue(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value10(Long value) { + setMaxValue(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value11(Boolean value) { + setIsCycle(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord value12(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SequencesRecord values(String value1, String value2, String value3, Long value4, Long value5, Boolean value6, String value7, Long value8, Long value9, Long value10, Boolean value11, Integer value12) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached SequencesRecord + */ + public SequencesRecord() { + super(Sequences.SEQUENCES); + } + + /** + * Create a detached, initialised SequencesRecord + */ + public SequencesRecord(String sequenceCatalog, String sequenceSchema, String sequenceName, Long currentValue, Long increment, Boolean isGenerated, String remarks, Long cache, Long minValue, Long maxValue, Boolean isCycle, Integer id) { + super(Sequences.SEQUENCES); + + setValue(0, sequenceCatalog); + setValue(1, sequenceSchema); + setValue(2, sequenceName); + setValue(3, currentValue); + setValue(4, increment); + setValue(5, isGenerated); + setValue(6, remarks); + setValue(7, cache); + setValue(8, minValue); + setValue(9, maxValue); + setValue(10, isCycle); + setValue(11, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionStateRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionStateRecord.java new file mode 100644 index 0000000000..b25800ae65 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionStateRecord.java @@ -0,0 +1,160 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.SessionState; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record2; +import org.jooq.Row2; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class SessionStateRecord extends TableRecordImpl implements Record2 { + + private static final long serialVersionUID = -1306764107; + + /** + * Setter for INFORMATION_SCHEMA.SESSION_STATE.KEY. + */ + public void setKey(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SESSION_STATE.KEY. + */ + public String getKey() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.SESSION_STATE.SQL. + */ + public void setSql(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SESSION_STATE.SQL. + */ + public String getSql() { + return (String) getValue(1); + } + + // ------------------------------------------------------------------------- + // Record2 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row2 fieldsRow() { + return (Row2) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row2 valuesRow() { + return (Row2) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return SessionState.SESSION_STATE.KEY; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return SessionState.SESSION_STATE.SQL; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getKey(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getSql(); + } + + /** + * {@inheritDoc} + */ + @Override + public SessionStateRecord value1(String value) { + setKey(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SessionStateRecord value2(String value) { + setSql(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SessionStateRecord values(String value1, String value2) { + value1(value1); + value2(value2); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached SessionStateRecord + */ + public SessionStateRecord() { + super(SessionState.SESSION_STATE); + } + + /** + * Create a detached, initialised SessionStateRecord + */ + public SessionStateRecord(String key, String sql) { + super(SessionState.SESSION_STATE); + + setValue(0, key); + setValue(1, sql); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionsRecord.java new file mode 100644 index 0000000000..13853116b4 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionsRecord.java @@ -0,0 +1,324 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Sessions; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record6; +import org.jooq.Row6; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class SessionsRecord extends TableRecordImpl implements Record6 { + + private static final long serialVersionUID = -457271018; + + /** + * Setter for INFORMATION_SCHEMA.SESSIONS.ID. + */ + public void setId(Integer value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SESSIONS.ID. + */ + public Integer getId() { + return (Integer) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.SESSIONS.USER_NAME. + */ + public void setUserName(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SESSIONS.USER_NAME. + */ + public String getUserName() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.SESSIONS.SESSION_START. + */ + public void setSessionStart(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SESSIONS.SESSION_START. + */ + public String getSessionStart() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.SESSIONS.STATEMENT. + */ + public void setStatement(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SESSIONS.STATEMENT. + */ + public String getStatement() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.SESSIONS.STATEMENT_START. + */ + public void setStatementStart(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SESSIONS.STATEMENT_START. + */ + public String getStatementStart() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.SESSIONS.CONTAINS_UNCOMMITTED. + */ + public void setContainsUncommitted(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SESSIONS.CONTAINS_UNCOMMITTED. + */ + public String getContainsUncommitted() { + return (String) getValue(5); + } + + // ------------------------------------------------------------------------- + // Record6 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row6 fieldsRow() { + return (Row6) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row6 valuesRow() { + return (Row6) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Sessions.SESSIONS.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Sessions.SESSIONS.USER_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Sessions.SESSIONS.SESSION_START; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Sessions.SESSIONS.STATEMENT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Sessions.SESSIONS.STATEMENT_START; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Sessions.SESSIONS.CONTAINS_UNCOMMITTED; + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value1() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getUserName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getSessionStart(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getStatement(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getStatementStart(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getContainsUncommitted(); + } + + /** + * {@inheritDoc} + */ + @Override + public SessionsRecord value1(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SessionsRecord value2(String value) { + setUserName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SessionsRecord value3(String value) { + setSessionStart(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SessionsRecord value4(String value) { + setStatement(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SessionsRecord value5(String value) { + setStatementStart(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SessionsRecord value6(String value) { + setContainsUncommitted(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SessionsRecord values(Integer value1, String value2, String value3, String value4, String value5, String value6) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached SessionsRecord + */ + public SessionsRecord() { + super(Sessions.SESSIONS); + } + + /** + * Create a detached, initialised SessionsRecord + */ + public SessionsRecord(Integer id, String userName, String sessionStart, String statement, String statementStart, String containsUncommitted) { + super(Sessions.SESSIONS); + + setValue(0, id); + setValue(1, userName); + setValue(2, sessionStart); + setValue(3, statement); + setValue(4, statementStart); + setValue(5, containsUncommitted); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SettingsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SettingsRecord.java new file mode 100644 index 0000000000..e5f096c510 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SettingsRecord.java @@ -0,0 +1,160 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Settings; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record2; +import org.jooq.Row2; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class SettingsRecord extends TableRecordImpl implements Record2 { + + private static final long serialVersionUID = -1656452632; + + /** + * Setter for INFORMATION_SCHEMA.SETTINGS.NAME. + */ + public void setName(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SETTINGS.NAME. + */ + public String getName() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.SETTINGS.VALUE. + */ + public void setValue(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.SETTINGS.VALUE. + */ + public String getValue() { + return (String) getValue(1); + } + + // ------------------------------------------------------------------------- + // Record2 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row2 fieldsRow() { + return (Row2) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row2 valuesRow() { + return (Row2) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Settings.SETTINGS.NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Settings.SETTINGS.VALUE; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getValue(); + } + + /** + * {@inheritDoc} + */ + @Override + public SettingsRecord value1(String value) { + setName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SettingsRecord value2(String value) { + setValue(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public SettingsRecord values(String value1, String value2) { + value1(value1); + value2(value2); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached SettingsRecord + */ + public SettingsRecord() { + super(Settings.SETTINGS); + } + + /** + * Create a detached, initialised SettingsRecord + */ + public SettingsRecord(String name, String value) { + super(Settings.SETTINGS); + + setValue(0, name); + setValue(1, value); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablePrivilegesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablePrivilegesRecord.java new file mode 100644 index 0000000000..5b2beca1f0 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablePrivilegesRecord.java @@ -0,0 +1,365 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.TablePrivileges; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record7; +import org.jooq.Row7; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TablePrivilegesRecord extends TableRecordImpl implements Record7 { + + private static final long serialVersionUID = 1595034957; + + /** + * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTOR. + */ + public void setGrantor(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTOR. + */ + public String getGrantor() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTEE. + */ + public void setGrantee(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTEE. + */ + public String getGrantee() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_CATALOG. + */ + public void setTableCatalog(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_CATALOG. + */ + public String getTableCatalog() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.PRIVILEGE_TYPE. + */ + public void setPrivilegeType(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.PRIVILEGE_TYPE. + */ + public String getPrivilegeType() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.IS_GRANTABLE. + */ + public void setIsGrantable(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.IS_GRANTABLE. + */ + public String getIsGrantable() { + return (String) getValue(6); + } + + // ------------------------------------------------------------------------- + // Record7 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row7 fieldsRow() { + return (Row7) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row7 valuesRow() { + return (Row7) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return TablePrivileges.TABLE_PRIVILEGES.GRANTOR; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return TablePrivileges.TABLE_PRIVILEGES.GRANTEE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return TablePrivileges.TABLE_PRIVILEGES.TABLE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return TablePrivileges.TABLE_PRIVILEGES.TABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return TablePrivileges.TABLE_PRIVILEGES.TABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return TablePrivileges.TABLE_PRIVILEGES.PRIVILEGE_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return TablePrivileges.TABLE_PRIVILEGES.IS_GRANTABLE; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getGrantor(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getGrantee(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getTableCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getTableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getTableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getPrivilegeType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getIsGrantable(); + } + + /** + * {@inheritDoc} + */ + @Override + public TablePrivilegesRecord value1(String value) { + setGrantor(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablePrivilegesRecord value2(String value) { + setGrantee(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablePrivilegesRecord value3(String value) { + setTableCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablePrivilegesRecord value4(String value) { + setTableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablePrivilegesRecord value5(String value) { + setTableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablePrivilegesRecord value6(String value) { + setPrivilegeType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablePrivilegesRecord value7(String value) { + setIsGrantable(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablePrivilegesRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached TablePrivilegesRecord + */ + public TablePrivilegesRecord() { + super(TablePrivileges.TABLE_PRIVILEGES); + } + + /** + * Create a detached, initialised TablePrivilegesRecord + */ + public TablePrivilegesRecord(String grantor, String grantee, String tableCatalog, String tableSchema, String tableName, String privilegeType, String isGrantable) { + super(TablePrivileges.TABLE_PRIVILEGES); + + setValue(0, grantor); + setValue(1, grantee); + setValue(2, tableCatalog); + setValue(3, tableSchema); + setValue(4, tableName); + setValue(5, privilegeType); + setValue(6, isGrantable); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TableTypesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TableTypesRecord.java new file mode 100644 index 0000000000..3d7eebdfff --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TableTypesRecord.java @@ -0,0 +1,119 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.TableTypes; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Row1; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TableTypesRecord extends TableRecordImpl implements Record1 { + + private static final long serialVersionUID = -645264739; + + /** + * Setter for INFORMATION_SCHEMA.TABLE_TYPES.TYPE. + */ + public void setType(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLE_TYPES.TYPE. + */ + public String getType() { + return (String) getValue(0); + } + + // ------------------------------------------------------------------------- + // Record1 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row1 fieldsRow() { + return (Row1) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row1 valuesRow() { + return (Row1) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return TableTypes.TABLE_TYPES.TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getType(); + } + + /** + * {@inheritDoc} + */ + @Override + public TableTypesRecord value1(String value) { + setType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TableTypesRecord values(String value1) { + value1(value1); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached TableTypesRecord + */ + public TableTypesRecord() { + super(TableTypes.TABLE_TYPES); + } + + /** + * Create a detached, initialised TableTypesRecord + */ + public TableTypesRecord(String type) { + super(TableTypes.TABLE_TYPES); + + setValue(0, type); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablesRecord.java new file mode 100644 index 0000000000..9542830be7 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablesRecord.java @@ -0,0 +1,570 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Tables; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record12; +import org.jooq.Row12; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TablesRecord extends TableRecordImpl implements Record12 { + + private static final long serialVersionUID = 850052084; + + /** + * Setter for INFORMATION_SCHEMA.TABLES.TABLE_CATALOG. + */ + public void setTableCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.TABLE_CATALOG. + */ + public String getTableCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.TABLE_TYPE. + */ + public void setTableType(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.TABLE_TYPE. + */ + public String getTableType() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.STORAGE_TYPE. + */ + public void setStorageType(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.STORAGE_TYPE. + */ + public String getStorageType() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.SQL. + */ + public void setSql(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.SQL. + */ + public String getSql() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.REMARKS. + */ + public void setRemarks(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.REMARKS. + */ + public String getRemarks() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.LAST_MODIFICATION. + */ + public void setLastModification(Long value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.LAST_MODIFICATION. + */ + public Long getLastModification() { + return (Long) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.ID. + */ + public void setId(Integer value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.ID. + */ + public Integer getId() { + return (Integer) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.TYPE_NAME. + */ + public void setTypeName(String value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.TYPE_NAME. + */ + public String getTypeName() { + return (String) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.TABLE_CLASS. + */ + public void setTableClass(String value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.TABLE_CLASS. + */ + public String getTableClass() { + return (String) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.TABLES.ROW_COUNT_ESTIMATE. + */ + public void setRowCountEstimate(Long value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TABLES.ROW_COUNT_ESTIMATE. + */ + public Long getRowCountEstimate() { + return (Long) getValue(11); + } + + // ------------------------------------------------------------------------- + // Record12 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row12 fieldsRow() { + return (Row12) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row12 valuesRow() { + return (Row12) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Tables.TABLES.TABLE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Tables.TABLES.TABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Tables.TABLES.TABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Tables.TABLES.TABLE_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Tables.TABLES.STORAGE_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Tables.TABLES.SQL; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Tables.TABLES.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return Tables.TABLES.LAST_MODIFICATION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return Tables.TABLES.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return Tables.TABLES.TYPE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return Tables.TABLES.TABLE_CLASS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return Tables.TABLES.ROW_COUNT_ESTIMATE; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getTableCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getTableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getTableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getTableType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getStorageType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getSql(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value8() { + return getLastModification(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value9() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value10() { + return getTypeName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value11() { + return getTableClass(); + } + + /** + * {@inheritDoc} + */ + @Override + public Long value12() { + return getRowCountEstimate(); + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value1(String value) { + setTableCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value2(String value) { + setTableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value3(String value) { + setTableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value4(String value) { + setTableType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value5(String value) { + setStorageType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value6(String value) { + setSql(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value7(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value8(Long value) { + setLastModification(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value9(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value10(String value) { + setTypeName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value11(String value) { + setTableClass(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord value12(Long value) { + setRowCountEstimate(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TablesRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, Long value8, Integer value9, String value10, String value11, Long value12) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached TablesRecord + */ + public TablesRecord() { + super(Tables.TABLES); + } + + /** + * Create a detached, initialised TablesRecord + */ + public TablesRecord(String tableCatalog, String tableSchema, String tableName, String tableType, String storageType, String sql, String remarks, Long lastModification, Integer id, String typeName, String tableClass, Long rowCountEstimate) { + super(Tables.TABLES); + + setValue(0, tableCatalog); + setValue(1, tableSchema); + setValue(2, tableName); + setValue(3, tableType); + setValue(4, storageType); + setValue(5, sql); + setValue(6, remarks); + setValue(7, lastModification); + setValue(8, id); + setValue(9, typeName); + setValue(10, tableClass); + setValue(11, rowCountEstimate); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TriggersRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TriggersRecord.java new file mode 100644 index 0000000000..f0f019e127 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TriggersRecord.java @@ -0,0 +1,652 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Triggers; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record14; +import org.jooq.Row14; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TriggersRecord extends TableRecordImpl implements Record14 { + + private static final long serialVersionUID = 344875511; + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_CATALOG. + */ + public void setTriggerCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_CATALOG. + */ + public String getTriggerCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_SCHEMA. + */ + public void setTriggerSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_SCHEMA. + */ + public String getTriggerSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_NAME. + */ + public void setTriggerName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_NAME. + */ + public String getTriggerName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_TYPE. + */ + public void setTriggerType(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_TYPE. + */ + public String getTriggerType() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.TABLE_CATALOG. + */ + public void setTableCatalog(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.TABLE_CATALOG. + */ + public String getTableCatalog() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.BEFORE. + */ + public void setBefore(Boolean value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.BEFORE. + */ + public Boolean getBefore() { + return (Boolean) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.JAVA_CLASS. + */ + public void setJavaClass(String value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.JAVA_CLASS. + */ + public String getJavaClass() { + return (String) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.QUEUE_SIZE. + */ + public void setQueueSize(Integer value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.QUEUE_SIZE. + */ + public Integer getQueueSize() { + return (Integer) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.NO_WAIT. + */ + public void setNoWait(Boolean value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.NO_WAIT. + */ + public Boolean getNoWait() { + return (Boolean) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.REMARKS. + */ + public void setRemarks(String value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.REMARKS. + */ + public String getRemarks() { + return (String) getValue(11); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.SQL. + */ + public void setSql(String value) { + setValue(12, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.SQL. + */ + public String getSql() { + return (String) getValue(12); + } + + /** + * Setter for INFORMATION_SCHEMA.TRIGGERS.ID. + */ + public void setId(Integer value) { + setValue(13, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TRIGGERS.ID. + */ + public Integer getId() { + return (Integer) getValue(13); + } + + // ------------------------------------------------------------------------- + // Record14 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row14 fieldsRow() { + return (Row14) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row14 valuesRow() { + return (Row14) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Triggers.TRIGGERS.TRIGGER_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Triggers.TRIGGERS.TRIGGER_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Triggers.TRIGGERS.TRIGGER_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Triggers.TRIGGERS.TRIGGER_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Triggers.TRIGGERS.TABLE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Triggers.TRIGGERS.TABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Triggers.TRIGGERS.TABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return Triggers.TRIGGERS.BEFORE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return Triggers.TRIGGERS.JAVA_CLASS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return Triggers.TRIGGERS.QUEUE_SIZE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return Triggers.TRIGGERS.NO_WAIT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return Triggers.TRIGGERS.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field13() { + return Triggers.TRIGGERS.SQL; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field14() { + return Triggers.TRIGGERS.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getTriggerCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getTriggerSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getTriggerName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getTriggerType(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getTableCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getTableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getTableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value8() { + return getBefore(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value9() { + return getJavaClass(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value10() { + return getQueueSize(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value11() { + return getNoWait(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value12() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value13() { + return getSql(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value14() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value1(String value) { + setTriggerCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value2(String value) { + setTriggerSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value3(String value) { + setTriggerName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value4(String value) { + setTriggerType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value5(String value) { + setTableCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value6(String value) { + setTableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value7(String value) { + setTableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value8(Boolean value) { + setBefore(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value9(String value) { + setJavaClass(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value10(Integer value) { + setQueueSize(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value11(Boolean value) { + setNoWait(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value12(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value13(String value) { + setSql(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord value14(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TriggersRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, Boolean value8, String value9, Integer value10, Boolean value11, String value12, String value13, Integer value14) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + value13(value13); + value14(value14); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached TriggersRecord + */ + public TriggersRecord() { + super(Triggers.TRIGGERS); + } + + /** + * Create a detached, initialised TriggersRecord + */ + public TriggersRecord(String triggerCatalog, String triggerSchema, String triggerName, String triggerType, String tableCatalog, String tableSchema, String tableName, Boolean before, String javaClass, Integer queueSize, Boolean noWait, String remarks, String sql, Integer id) { + super(Triggers.TRIGGERS); + + setValue(0, triggerCatalog); + setValue(1, triggerSchema); + setValue(2, triggerName); + setValue(3, triggerType); + setValue(4, tableCatalog); + setValue(5, tableSchema); + setValue(6, tableName); + setValue(7, before); + setValue(8, javaClass); + setValue(9, queueSize); + setValue(10, noWait); + setValue(11, remarks); + setValue(12, sql); + setValue(13, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TypeInfoRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TypeInfoRecord.java new file mode 100644 index 0000000000..af3eaee83f --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TypeInfoRecord.java @@ -0,0 +1,652 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.TypeInfo; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record14; +import org.jooq.Row14; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class TypeInfoRecord extends TableRecordImpl implements Record14 { + + private static final long serialVersionUID = -1463889309; + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.TYPE_NAME. + */ + public void setTypeName(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.TYPE_NAME. + */ + public String getTypeName() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.DATA_TYPE. + */ + public void setDataType(Integer value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.DATA_TYPE. + */ + public Integer getDataType() { + return (Integer) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.PRECISION. + */ + public void setPrecision(Integer value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.PRECISION. + */ + public Integer getPrecision() { + return (Integer) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.PREFIX. + */ + public void setPrefix(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.PREFIX. + */ + public String getPrefix() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.SUFFIX. + */ + public void setSuffix(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.SUFFIX. + */ + public String getSuffix() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.PARAMS. + */ + public void setParams(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.PARAMS. + */ + public String getParams() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.AUTO_INCREMENT. + */ + public void setAutoIncrement(Boolean value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.AUTO_INCREMENT. + */ + public Boolean getAutoIncrement() { + return (Boolean) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.MINIMUM_SCALE. + */ + public void setMinimumScale(Short value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.MINIMUM_SCALE. + */ + public Short getMinimumScale() { + return (Short) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.MAXIMUM_SCALE. + */ + public void setMaximumScale(Short value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.MAXIMUM_SCALE. + */ + public Short getMaximumScale() { + return (Short) getValue(8); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.RADIX. + */ + public void setRadix(Integer value) { + setValue(9, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.RADIX. + */ + public Integer getRadix() { + return (Integer) getValue(9); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.POS. + */ + public void setPos(Integer value) { + setValue(10, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.POS. + */ + public Integer getPos() { + return (Integer) getValue(10); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.CASE_SENSITIVE. + */ + public void setCaseSensitive(Boolean value) { + setValue(11, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.CASE_SENSITIVE. + */ + public Boolean getCaseSensitive() { + return (Boolean) getValue(11); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.NULLABLE. + */ + public void setNullable(Short value) { + setValue(12, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.NULLABLE. + */ + public Short getNullable() { + return (Short) getValue(12); + } + + /** + * Setter for INFORMATION_SCHEMA.TYPE_INFO.SEARCHABLE. + */ + public void setSearchable(Short value) { + setValue(13, value); + } + + /** + * Getter for INFORMATION_SCHEMA.TYPE_INFO.SEARCHABLE. + */ + public Short getSearchable() { + return (Short) getValue(13); + } + + // ------------------------------------------------------------------------- + // Record14 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row14 fieldsRow() { + return (Row14) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row14 valuesRow() { + return (Row14) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return TypeInfo.TYPE_INFO.TYPE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return TypeInfo.TYPE_INFO.DATA_TYPE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return TypeInfo.TYPE_INFO.PRECISION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return TypeInfo.TYPE_INFO.PREFIX; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return TypeInfo.TYPE_INFO.SUFFIX; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return TypeInfo.TYPE_INFO.PARAMS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return TypeInfo.TYPE_INFO.AUTO_INCREMENT; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return TypeInfo.TYPE_INFO.MINIMUM_SCALE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return TypeInfo.TYPE_INFO.MAXIMUM_SCALE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field10() { + return TypeInfo.TYPE_INFO.RADIX; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field11() { + return TypeInfo.TYPE_INFO.POS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field12() { + return TypeInfo.TYPE_INFO.CASE_SENSITIVE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field13() { + return TypeInfo.TYPE_INFO.NULLABLE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field14() { + return TypeInfo.TYPE_INFO.SEARCHABLE; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getTypeName(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value2() { + return getDataType(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value3() { + return getPrecision(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getPrefix(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getSuffix(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getParams(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value7() { + return getAutoIncrement(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value8() { + return getMinimumScale(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value9() { + return getMaximumScale(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value10() { + return getRadix(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value11() { + return getPos(); + } + + /** + * {@inheritDoc} + */ + @Override + public Boolean value12() { + return getCaseSensitive(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value13() { + return getNullable(); + } + + /** + * {@inheritDoc} + */ + @Override + public Short value14() { + return getSearchable(); + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value1(String value) { + setTypeName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value2(Integer value) { + setDataType(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value3(Integer value) { + setPrecision(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value4(String value) { + setPrefix(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value5(String value) { + setSuffix(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value6(String value) { + setParams(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value7(Boolean value) { + setAutoIncrement(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value8(Short value) { + setMinimumScale(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value9(Short value) { + setMaximumScale(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value10(Integer value) { + setRadix(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value11(Integer value) { + setPos(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value12(Boolean value) { + setCaseSensitive(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value13(Short value) { + setNullable(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord value14(Short value) { + setSearchable(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public TypeInfoRecord values(String value1, Integer value2, Integer value3, String value4, String value5, String value6, Boolean value7, Short value8, Short value9, Integer value10, Integer value11, Boolean value12, Short value13, Short value14) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + value10(value10); + value11(value11); + value12(value12); + value13(value13); + value14(value14); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached TypeInfoRecord + */ + public TypeInfoRecord() { + super(TypeInfo.TYPE_INFO); + } + + /** + * Create a detached, initialised TypeInfoRecord + */ + public TypeInfoRecord(String typeName, Integer dataType, Integer precision, String prefix, String suffix, String params, Boolean autoIncrement, Short minimumScale, Short maximumScale, Integer radix, Integer pos, Boolean caseSensitive, Short nullable, Short searchable) { + super(TypeInfo.TYPE_INFO); + + setValue(0, typeName); + setValue(1, dataType); + setValue(2, precision); + setValue(3, prefix); + setValue(4, suffix); + setValue(5, params); + setValue(6, autoIncrement); + setValue(7, minimumScale); + setValue(8, maximumScale); + setValue(9, radix); + setValue(10, pos); + setValue(11, caseSensitive); + setValue(12, nullable); + setValue(13, searchable); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/UsersRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/UsersRecord.java new file mode 100644 index 0000000000..934b0484c8 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/UsersRecord.java @@ -0,0 +1,242 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Users; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record4; +import org.jooq.Row4; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class UsersRecord extends TableRecordImpl implements Record4 { + + private static final long serialVersionUID = -592508392; + + /** + * Setter for INFORMATION_SCHEMA.USERS.NAME. + */ + public void setName(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.USERS.NAME. + */ + public String getName() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.USERS.ADMIN. + */ + public void setAdmin(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.USERS.ADMIN. + */ + public String getAdmin() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.USERS.REMARKS. + */ + public void setRemarks(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.USERS.REMARKS. + */ + public String getRemarks() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.USERS.ID. + */ + public void setId(Integer value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.USERS.ID. + */ + public Integer getId() { + return (Integer) getValue(3); + } + + // ------------------------------------------------------------------------- + // Record4 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row4 fieldsRow() { + return (Row4) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row4 valuesRow() { + return (Row4) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Users.USERS.NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Users.USERS.ADMIN; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Users.USERS.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Users.USERS.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getAdmin(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value4() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public UsersRecord value1(String value) { + setName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public UsersRecord value2(String value) { + setAdmin(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public UsersRecord value3(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public UsersRecord value4(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public UsersRecord values(String value1, String value2, String value3, Integer value4) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached UsersRecord + */ + public UsersRecord() { + super(Users.USERS); + } + + /** + * Create a detached, initialised UsersRecord + */ + public UsersRecord(String name, String admin, String remarks, Integer id) { + super(Users.USERS); + + setValue(0, name); + setValue(1, admin); + setValue(2, remarks); + setValue(3, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ViewsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ViewsRecord.java new file mode 100644 index 0000000000..4b2d66bd73 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ViewsRecord.java @@ -0,0 +1,447 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.information_schema.tables.records; + + +import com.baeldung.jooq.introduction.db.information_schema.tables.Views; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record9; +import org.jooq.Row9; +import org.jooq.impl.TableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class ViewsRecord extends TableRecordImpl implements Record9 { + + private static final long serialVersionUID = -1380031738; + + /** + * Setter for INFORMATION_SCHEMA.VIEWS.TABLE_CATALOG. + */ + public void setTableCatalog(String value) { + setValue(0, value); + } + + /** + * Getter for INFORMATION_SCHEMA.VIEWS.TABLE_CATALOG. + */ + public String getTableCatalog() { + return (String) getValue(0); + } + + /** + * Setter for INFORMATION_SCHEMA.VIEWS.TABLE_SCHEMA. + */ + public void setTableSchema(String value) { + setValue(1, value); + } + + /** + * Getter for INFORMATION_SCHEMA.VIEWS.TABLE_SCHEMA. + */ + public String getTableSchema() { + return (String) getValue(1); + } + + /** + * Setter for INFORMATION_SCHEMA.VIEWS.TABLE_NAME. + */ + public void setTableName(String value) { + setValue(2, value); + } + + /** + * Getter for INFORMATION_SCHEMA.VIEWS.TABLE_NAME. + */ + public String getTableName() { + return (String) getValue(2); + } + + /** + * Setter for INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION. + */ + public void setViewDefinition(String value) { + setValue(3, value); + } + + /** + * Getter for INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION. + */ + public String getViewDefinition() { + return (String) getValue(3); + } + + /** + * Setter for INFORMATION_SCHEMA.VIEWS.CHECK_OPTION. + */ + public void setCheckOption(String value) { + setValue(4, value); + } + + /** + * Getter for INFORMATION_SCHEMA.VIEWS.CHECK_OPTION. + */ + public String getCheckOption() { + return (String) getValue(4); + } + + /** + * Setter for INFORMATION_SCHEMA.VIEWS.IS_UPDATABLE. + */ + public void setIsUpdatable(String value) { + setValue(5, value); + } + + /** + * Getter for INFORMATION_SCHEMA.VIEWS.IS_UPDATABLE. + */ + public String getIsUpdatable() { + return (String) getValue(5); + } + + /** + * Setter for INFORMATION_SCHEMA.VIEWS.STATUS. + */ + public void setStatus(String value) { + setValue(6, value); + } + + /** + * Getter for INFORMATION_SCHEMA.VIEWS.STATUS. + */ + public String getStatus() { + return (String) getValue(6); + } + + /** + * Setter for INFORMATION_SCHEMA.VIEWS.REMARKS. + */ + public void setRemarks(String value) { + setValue(7, value); + } + + /** + * Getter for INFORMATION_SCHEMA.VIEWS.REMARKS. + */ + public String getRemarks() { + return (String) getValue(7); + } + + /** + * Setter for INFORMATION_SCHEMA.VIEWS.ID. + */ + public void setId(Integer value) { + setValue(8, value); + } + + /** + * Getter for INFORMATION_SCHEMA.VIEWS.ID. + */ + public Integer getId() { + return (Integer) getValue(8); + } + + // ------------------------------------------------------------------------- + // Record9 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row9 fieldsRow() { + return (Row9) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row9 valuesRow() { + return (Row9) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Views.VIEWS.TABLE_CATALOG; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Views.VIEWS.TABLE_SCHEMA; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Views.VIEWS.TABLE_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field4() { + return Views.VIEWS.VIEW_DEFINITION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field5() { + return Views.VIEWS.CHECK_OPTION; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field6() { + return Views.VIEWS.IS_UPDATABLE; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field7() { + return Views.VIEWS.STATUS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field8() { + return Views.VIEWS.REMARKS; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field9() { + return Views.VIEWS.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public String value1() { + return getTableCatalog(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getTableSchema(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getTableName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value4() { + return getViewDefinition(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value5() { + return getCheckOption(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value6() { + return getIsUpdatable(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value7() { + return getStatus(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value8() { + return getRemarks(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value9() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord value1(String value) { + setTableCatalog(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord value2(String value) { + setTableSchema(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord value3(String value) { + setTableName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord value4(String value) { + setViewDefinition(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord value5(String value) { + setCheckOption(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord value6(String value) { + setIsUpdatable(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord value7(String value) { + setStatus(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord value8(String value) { + setRemarks(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord value9(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public ViewsRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, String value8, Integer value9) { + value1(value1); + value2(value2); + value3(value3); + value4(value4); + value5(value5); + value6(value6); + value7(value7); + value8(value8); + value9(value9); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached ViewsRecord + */ + public ViewsRecord() { + super(Views.VIEWS); + } + + /** + * Create a detached, initialised ViewsRecord + */ + public ViewsRecord(String tableCatalog, String tableSchema, String tableName, String viewDefinition, String checkOption, String isUpdatable, String status, String remarks, Integer id) { + super(Views.VIEWS); + + setValue(0, tableCatalog); + setValue(1, tableSchema); + setValue(2, tableName); + setValue(3, viewDefinition); + setValue(4, checkOption); + setValue(5, isUpdatable); + setValue(6, status); + setValue(7, remarks); + setValue(8, id); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Keys.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Keys.java new file mode 100644 index 0000000000..66656c9bbc --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Keys.java @@ -0,0 +1,69 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.public_; + + +import com.baeldung.jooq.introduction.db.public_.tables.Author; +import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; +import com.baeldung.jooq.introduction.db.public_.tables.Book; +import com.baeldung.jooq.introduction.db.public_.tables.records.AuthorBookRecord; +import com.baeldung.jooq.introduction.db.public_.tables.records.AuthorRecord; +import com.baeldung.jooq.introduction.db.public_.tables.records.BookRecord; + +import javax.annotation.Generated; + +import org.jooq.ForeignKey; +import org.jooq.UniqueKey; +import org.jooq.impl.AbstractKeys; + + +/** + * A class modelling foreign key relationships between tables of the PUBLIC + * schema + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Keys { + + // ------------------------------------------------------------------------- + // IDENTITY definitions + // ------------------------------------------------------------------------- + + + // ------------------------------------------------------------------------- + // UNIQUE and PRIMARY KEY definitions + // ------------------------------------------------------------------------- + + public static final UniqueKey CONSTRAINT_7 = UniqueKeys0.CONSTRAINT_7; + public static final UniqueKey CONSTRAINT_1 = UniqueKeys0.CONSTRAINT_1; + public static final UniqueKey CONSTRAINT_A = UniqueKeys0.CONSTRAINT_A; + + // ------------------------------------------------------------------------- + // FOREIGN KEY definitions + // ------------------------------------------------------------------------- + + public static final ForeignKey FK_AB_AUTHOR = ForeignKeys0.FK_AB_AUTHOR; + public static final ForeignKey FK_AB_BOOK = ForeignKeys0.FK_AB_BOOK; + + // ------------------------------------------------------------------------- + // [#1459] distribute members to avoid static initialisers > 64kb + // ------------------------------------------------------------------------- + + private static class UniqueKeys0 extends AbstractKeys { + public static final UniqueKey CONSTRAINT_7 = createUniqueKey(Author.AUTHOR, Author.AUTHOR.ID); + public static final UniqueKey CONSTRAINT_1 = createUniqueKey(Book.BOOK, Book.BOOK.ID); + public static final UniqueKey CONSTRAINT_A = createUniqueKey(AuthorBook.AUTHOR_BOOK, AuthorBook.AUTHOR_BOOK.AUTHOR_ID, AuthorBook.AUTHOR_BOOK.BOOK_ID); + } + + private static class ForeignKeys0 extends AbstractKeys { + public static final ForeignKey FK_AB_AUTHOR = createForeignKey(com.baeldung.jooq.introduction.db.public_.Keys.CONSTRAINT_7, AuthorBook.AUTHOR_BOOK, AuthorBook.AUTHOR_BOOK.AUTHOR_ID); + public static final ForeignKey FK_AB_BOOK = createForeignKey(com.baeldung.jooq.introduction.db.public_.Keys.CONSTRAINT_1, AuthorBook.AUTHOR_BOOK, AuthorBook.AUTHOR_BOOK.BOOK_ID); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Public.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Public.java new file mode 100644 index 0000000000..a681123c94 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Public.java @@ -0,0 +1,61 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.public_; + + +import com.baeldung.jooq.introduction.db.public_.tables.Author; +import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; +import com.baeldung.jooq.introduction.db.public_.tables.Book; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Generated; + +import org.jooq.Table; +import org.jooq.impl.SchemaImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Public extends SchemaImpl { + + private static final long serialVersionUID = 1806497150; + + /** + * The reference instance of PUBLIC + */ + public static final Public PUBLIC = new Public(); + + /** + * No further instances allowed + */ + private Public() { + super("PUBLIC"); + } + + @Override + public final List> getTables() { + List result = new ArrayList(); + result.addAll(getTables0()); + return result; + } + + private final List> getTables0() { + return Arrays.>asList( + Author.AUTHOR, + Book.BOOK, + AuthorBook.AUTHOR_BOOK); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Tables.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Tables.java new file mode 100644 index 0000000000..cbdc08b78f --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Tables.java @@ -0,0 +1,41 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.public_; + + +import com.baeldung.jooq.introduction.db.public_.tables.Author; +import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; +import com.baeldung.jooq.introduction.db.public_.tables.Book; + +import javax.annotation.Generated; + + +/** + * Convenience access to all tables in PUBLIC + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Tables { + + /** + * The table PUBLIC.AUTHOR + */ + public static final Author AUTHOR = com.baeldung.jooq.introduction.db.public_.tables.Author.AUTHOR; + + /** + * The table PUBLIC.BOOK + */ + public static final Book BOOK = com.baeldung.jooq.introduction.db.public_.tables.Book.BOOK; + + /** + * The table PUBLIC.AUTHOR_BOOK + */ + public static final AuthorBook AUTHOR_BOOK = com.baeldung.jooq.introduction.db.public_.tables.AuthorBook.AUTHOR_BOOK; +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Author.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Author.java new file mode 100644 index 0000000000..43d0b4f778 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Author.java @@ -0,0 +1,118 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.public_.tables; + + +import com.baeldung.jooq.introduction.db.public_.Keys; +import com.baeldung.jooq.introduction.db.public_.Public; +import com.baeldung.jooq.introduction.db.public_.tables.records.AuthorRecord; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.UniqueKey; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Author extends TableImpl { + + private static final long serialVersionUID = 1121046490; + + /** + * The reference instance of PUBLIC.AUTHOR + */ + public static final Author AUTHOR = new Author(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return AuthorRecord.class; + } + + /** + * The column PUBLIC.AUTHOR.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.AUTHOR.FIRST_NAME. + */ + public final TableField FIRST_NAME = createField("FIRST_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(50), this, ""); + + /** + * The column PUBLIC.AUTHOR.LAST_NAME. + */ + public final TableField LAST_NAME = createField("LAST_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(50).nullable(false), this, ""); + + /** + * Create a PUBLIC.AUTHOR table reference + */ + public Author() { + this("AUTHOR", null); + } + + /** + * Create an aliased PUBLIC.AUTHOR table reference + */ + public Author(String alias) { + this(alias, AUTHOR); + } + + private Author(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Author(String alias, Table aliased, Field[] parameters) { + super(alias, Public.PUBLIC, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public UniqueKey getPrimaryKey() { + return Keys.CONSTRAINT_7; + } + + /** + * {@inheritDoc} + */ + @Override + public List> getKeys() { + return Arrays.>asList(Keys.CONSTRAINT_7); + } + + /** + * {@inheritDoc} + */ + @Override + public Author as(String alias) { + return new Author(alias, this); + } + + /** + * Rename this table + */ + public Author rename(String name) { + return new Author(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/AuthorBook.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/AuthorBook.java new file mode 100644 index 0000000000..38a0fe2593 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/AuthorBook.java @@ -0,0 +1,122 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.public_.tables; + + +import com.baeldung.jooq.introduction.db.public_.Keys; +import com.baeldung.jooq.introduction.db.public_.Public; +import com.baeldung.jooq.introduction.db.public_.tables.records.AuthorBookRecord; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.ForeignKey; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.UniqueKey; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class AuthorBook extends TableImpl { + + private static final long serialVersionUID = -1609247069; + + /** + * The reference instance of PUBLIC.AUTHOR_BOOK + */ + public static final AuthorBook AUTHOR_BOOK = new AuthorBook(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return AuthorBookRecord.class; + } + + /** + * The column PUBLIC.AUTHOR_BOOK.AUTHOR_ID. + */ + public final TableField AUTHOR_ID = createField("AUTHOR_ID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.AUTHOR_BOOK.BOOK_ID. + */ + public final TableField BOOK_ID = createField("BOOK_ID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * Create a PUBLIC.AUTHOR_BOOK table reference + */ + public AuthorBook() { + this("AUTHOR_BOOK", null); + } + + /** + * Create an aliased PUBLIC.AUTHOR_BOOK table reference + */ + public AuthorBook(String alias) { + this(alias, AUTHOR_BOOK); + } + + private AuthorBook(String alias, Table aliased) { + this(alias, aliased, null); + } + + private AuthorBook(String alias, Table aliased, Field[] parameters) { + super(alias, Public.PUBLIC, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public UniqueKey getPrimaryKey() { + return Keys.CONSTRAINT_A; + } + + /** + * {@inheritDoc} + */ + @Override + public List> getKeys() { + return Arrays.>asList(Keys.CONSTRAINT_A); + } + + /** + * {@inheritDoc} + */ + @Override + public List> getReferences() { + return Arrays.>asList(Keys.FK_AB_AUTHOR, Keys.FK_AB_BOOK); + } + + /** + * {@inheritDoc} + */ + @Override + public AuthorBook as(String alias) { + return new AuthorBook(alias, this); + } + + /** + * Rename this table + */ + public AuthorBook rename(String name) { + return new AuthorBook(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Book.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Book.java new file mode 100644 index 0000000000..33b38e1eb5 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Book.java @@ -0,0 +1,113 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.public_.tables; + + +import com.baeldung.jooq.introduction.db.public_.Keys; +import com.baeldung.jooq.introduction.db.public_.Public; +import com.baeldung.jooq.introduction.db.public_.tables.records.BookRecord; + +import java.util.Arrays; +import java.util.List; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Table; +import org.jooq.TableField; +import org.jooq.UniqueKey; +import org.jooq.impl.TableImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class Book extends TableImpl { + + private static final long serialVersionUID = -1685336167; + + /** + * The reference instance of PUBLIC.BOOK + */ + public static final Book BOOK = new Book(); + + /** + * The class holding records for this type + */ + @Override + public Class getRecordType() { + return BookRecord.class; + } + + /** + * The column PUBLIC.BOOK.ID. + */ + public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); + + /** + * The column PUBLIC.BOOK.TITLE. + */ + public final TableField TITLE = createField("TITLE", org.jooq.impl.SQLDataType.VARCHAR.length(100).nullable(false), this, ""); + + /** + * Create a PUBLIC.BOOK table reference + */ + public Book() { + this("BOOK", null); + } + + /** + * Create an aliased PUBLIC.BOOK table reference + */ + public Book(String alias) { + this(alias, BOOK); + } + + private Book(String alias, Table aliased) { + this(alias, aliased, null); + } + + private Book(String alias, Table aliased, Field[] parameters) { + super(alias, Public.PUBLIC, aliased, parameters, ""); + } + + /** + * {@inheritDoc} + */ + @Override + public UniqueKey getPrimaryKey() { + return Keys.CONSTRAINT_1; + } + + /** + * {@inheritDoc} + */ + @Override + public List> getKeys() { + return Arrays.>asList(Keys.CONSTRAINT_1); + } + + /** + * {@inheritDoc} + */ + @Override + public Book as(String alias) { + return new Book(alias, this); + } + + /** + * Rename this table + */ + public Book rename(String name) { + return new Book(name, null); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorBookRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorBookRecord.java new file mode 100644 index 0000000000..2e9a07ba4f --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorBookRecord.java @@ -0,0 +1,172 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.public_.tables.records; + + +import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record2; +import org.jooq.Row2; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class AuthorBookRecord extends UpdatableRecordImpl implements Record2 { + + private static final long serialVersionUID = -1057354033; + + /** + * Setter for PUBLIC.AUTHOR_BOOK.AUTHOR_ID. + */ + public void setAuthorId(Integer value) { + setValue(0, value); + } + + /** + * Getter for PUBLIC.AUTHOR_BOOK.AUTHOR_ID. + */ + public Integer getAuthorId() { + return (Integer) getValue(0); + } + + /** + * Setter for PUBLIC.AUTHOR_BOOK.BOOK_ID. + */ + public void setBookId(Integer value) { + setValue(1, value); + } + + /** + * Getter for PUBLIC.AUTHOR_BOOK.BOOK_ID. + */ + public Integer getBookId() { + return (Integer) getValue(1); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Record2 key() { + return (Record2) super.key(); + } + + // ------------------------------------------------------------------------- + // Record2 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row2 fieldsRow() { + return (Row2) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row2 valuesRow() { + return (Row2) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return AuthorBook.AUTHOR_BOOK.AUTHOR_ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return AuthorBook.AUTHOR_BOOK.BOOK_ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value1() { + return getAuthorId(); + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value2() { + return getBookId(); + } + + /** + * {@inheritDoc} + */ + @Override + public AuthorBookRecord value1(Integer value) { + setAuthorId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public AuthorBookRecord value2(Integer value) { + setBookId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public AuthorBookRecord values(Integer value1, Integer value2) { + value1(value1); + value2(value2); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached AuthorBookRecord + */ + public AuthorBookRecord() { + super(AuthorBook.AUTHOR_BOOK); + } + + /** + * Create a detached, initialised AuthorBookRecord + */ + public AuthorBookRecord(Integer authorId, Integer bookId) { + super(AuthorBook.AUTHOR_BOOK); + + setValue(0, authorId); + setValue(1, bookId); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorRecord.java new file mode 100644 index 0000000000..5d6d88b0c3 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorRecord.java @@ -0,0 +1,214 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.public_.tables.records; + + +import com.baeldung.jooq.introduction.db.public_.tables.Author; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Record3; +import org.jooq.Row3; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class AuthorRecord extends UpdatableRecordImpl implements Record3 { + + private static final long serialVersionUID = 253757039; + + /** + * Setter for PUBLIC.AUTHOR.ID. + */ + public void setId(Integer value) { + setValue(0, value); + } + + /** + * Getter for PUBLIC.AUTHOR.ID. + */ + public Integer getId() { + return (Integer) getValue(0); + } + + /** + * Setter for PUBLIC.AUTHOR.FIRST_NAME. + */ + public void setFirstName(String value) { + setValue(1, value); + } + + /** + * Getter for PUBLIC.AUTHOR.FIRST_NAME. + */ + public String getFirstName() { + return (String) getValue(1); + } + + /** + * Setter for PUBLIC.AUTHOR.LAST_NAME. + */ + public void setLastName(String value) { + setValue(2, value); + } + + /** + * Getter for PUBLIC.AUTHOR.LAST_NAME. + */ + public String getLastName() { + return (String) getValue(2); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Record1 key() { + return (Record1) super.key(); + } + + // ------------------------------------------------------------------------- + // Record3 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row3 fieldsRow() { + return (Row3) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row3 valuesRow() { + return (Row3) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Author.AUTHOR.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Author.AUTHOR.FIRST_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field3() { + return Author.AUTHOR.LAST_NAME; + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value1() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getFirstName(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value3() { + return getLastName(); + } + + /** + * {@inheritDoc} + */ + @Override + public AuthorRecord value1(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public AuthorRecord value2(String value) { + setFirstName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public AuthorRecord value3(String value) { + setLastName(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public AuthorRecord values(Integer value1, String value2, String value3) { + value1(value1); + value2(value2); + value3(value3); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached AuthorRecord + */ + public AuthorRecord() { + super(Author.AUTHOR); + } + + /** + * Create a detached, initialised AuthorRecord + */ + public AuthorRecord(Integer id, String firstName, String lastName) { + super(Author.AUTHOR); + + setValue(0, id); + setValue(1, firstName); + setValue(2, lastName); + } +} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/BookRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/BookRecord.java new file mode 100644 index 0000000000..1725dccff0 --- /dev/null +++ b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/BookRecord.java @@ -0,0 +1,173 @@ +/** + * This class is generated by jOOQ + */ +package com.baeldung.jooq.introduction.db.public_.tables.records; + + +import com.baeldung.jooq.introduction.db.public_.tables.Book; + +import javax.annotation.Generated; + +import org.jooq.Field; +import org.jooq.Record1; +import org.jooq.Record2; +import org.jooq.Row2; +import org.jooq.impl.UpdatableRecordImpl; + + +/** + * This class is generated by jOOQ. + */ +@Generated( + value = { + "http://www.jooq.org", + "jOOQ version:3.7.3" + }, + comments = "This class is generated by jOOQ" +) +@SuppressWarnings({ "all", "unchecked", "rawtypes" }) +public class BookRecord extends UpdatableRecordImpl implements Record2 { + + private static final long serialVersionUID = -434165872; + + /** + * Setter for PUBLIC.BOOK.ID. + */ + public void setId(Integer value) { + setValue(0, value); + } + + /** + * Getter for PUBLIC.BOOK.ID. + */ + public Integer getId() { + return (Integer) getValue(0); + } + + /** + * Setter for PUBLIC.BOOK.TITLE. + */ + public void setTitle(String value) { + setValue(1, value); + } + + /** + * Getter for PUBLIC.BOOK.TITLE. + */ + public String getTitle() { + return (String) getValue(1); + } + + // ------------------------------------------------------------------------- + // Primary key information + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Record1 key() { + return (Record1) super.key(); + } + + // ------------------------------------------------------------------------- + // Record2 type implementation + // ------------------------------------------------------------------------- + + /** + * {@inheritDoc} + */ + @Override + public Row2 fieldsRow() { + return (Row2) super.fieldsRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Row2 valuesRow() { + return (Row2) super.valuesRow(); + } + + /** + * {@inheritDoc} + */ + @Override + public Field field1() { + return Book.BOOK.ID; + } + + /** + * {@inheritDoc} + */ + @Override + public Field field2() { + return Book.BOOK.TITLE; + } + + /** + * {@inheritDoc} + */ + @Override + public Integer value1() { + return getId(); + } + + /** + * {@inheritDoc} + */ + @Override + public String value2() { + return getTitle(); + } + + /** + * {@inheritDoc} + */ + @Override + public BookRecord value1(Integer value) { + setId(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public BookRecord value2(String value) { + setTitle(value); + return this; + } + + /** + * {@inheritDoc} + */ + @Override + public BookRecord values(Integer value1, String value2) { + value1(value1); + value2(value2); + return this; + } + + // ------------------------------------------------------------------------- + // Constructors + // ------------------------------------------------------------------------- + + /** + * Create a detached BookRecord + */ + public BookRecord() { + super(Book.BOOK); + } + + /** + * Create a detached, initialised BookRecord + */ + public BookRecord(Integer id, String title) { + super(Book.BOOK); + + setValue(0, id); + setValue(1, title); + } +} diff --git a/jooq-spring/src/main/resources/application.properties b/jooq-spring/src/main/resources/application.properties new file mode 100644 index 0000000000..2b32da2356 --- /dev/null +++ b/jooq-spring/src/main/resources/application.properties @@ -0,0 +1,3 @@ +spring.datasource.url=jdbc:h2:~/jooq +spring.datasource.username=sa +spring.datasource.password= \ No newline at end of file diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java new file mode 100644 index 0000000000..a52f0a0ef3 --- /dev/null +++ b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java @@ -0,0 +1,68 @@ +package com.baeldung.jooq.springboot; + +import javax.sql.DataSource; + +import org.jooq.impl.DataSourceConnectionProvider; +import org.jooq.impl.DefaultConfiguration; +import org.jooq.impl.DefaultDSLContext; +import org.jooq.impl.DefaultExecuteListenerProvider; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.core.env.Environment; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.jdbc.datasource.DriverManagerDataSource; +import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import com.baeldung.jooq.introduction.ExceptionTranslator; + +@SpringBootApplication +@EnableTransactionManagement +public class Application { + @Autowired + private Environment environment; + private DataSource dataSource; + + public DataSource dataSource() { + DriverManagerDataSource dataSource = new DriverManagerDataSource(); + + dataSource.setUrl(environment.getRequiredProperty("spring.datasource.url")); + dataSource.setUsername(environment.getRequiredProperty("spring.datasource.username")); + dataSource.setPassword(environment.getRequiredProperty("spring.datasource.password")); + + return dataSource; + } + + @Bean + public TransactionAwareDataSourceProxy transactionAwareDataSource() { + return new TransactionAwareDataSourceProxy(dataSource()); + } + + public DataSourceTransactionManager transactionManager() { + return new DataSourceTransactionManager(dataSource); + } + + @Bean + public DataSourceConnectionProvider connectionProvider() { + return new DataSourceConnectionProvider(transactionAwareDataSource()); + } + + public ExceptionTranslator exceptionTransformer() { + return new ExceptionTranslator(); + } + + @Bean + public DefaultDSLContext dsl() { + return new DefaultDSLContext(configuration()); + } + + public DefaultConfiguration configuration() { + DefaultConfiguration jooqConfiguration = new DefaultConfiguration(); + jooqConfiguration.set(connectionProvider()); + jooqConfiguration.set(new DefaultExecuteListenerProvider(exceptionTransformer())); + + return jooqConfiguration; + } +} \ No newline at end of file diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java new file mode 100644 index 0000000000..bf5cc250a8 --- /dev/null +++ b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java @@ -0,0 +1,85 @@ +package com.baeldung.jooq.springboot; + +import static org.junit.Assert.*; + +import org.jooq.DSLContext; +import org.jooq.Record3; +import org.jooq.Result; +import org.jooq.impl.DSL; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.dao.DataAccessException; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; + +import com.baeldung.jooq.introduction.db.public_.tables.Author; +import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; +import com.baeldung.jooq.introduction.db.public_.tables.Book; + +@SpringApplicationConfiguration(Application.class) +@Transactional("transactionManager") +@RunWith(SpringJUnit4ClassRunner.class) +public class SpringBootTest { + @Autowired + private DSLContext dsl; + + Author author = Author.AUTHOR; + Book book = Book.BOOK; + AuthorBook authorBook = AuthorBook.AUTHOR_BOOK; + + @Test + public void givenValidData_whenInserting_thenSucceed() { + dsl.insertInto(author).set(author.ID, 4).set(author.FIRST_NAME, "Herbert").set(author.LAST_NAME, "Schildt").execute(); + dsl.insertInto(book).set(book.ID, 4).set(book.TITLE, "A Beginner's Guide").execute(); + dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 4).execute(); + Result> result = dsl.select(author.ID, author.LAST_NAME, DSL.count()).from(author).join(authorBook).on(author.ID.equal(authorBook.AUTHOR_ID)).join(book).on(authorBook.BOOK_ID.equal(book.ID)).groupBy(author.LAST_NAME) + .fetch(); + + assertEquals(3, result.size()); + assertEquals("Sierra", result.getValue(0, author.LAST_NAME)); + assertEquals(Integer.valueOf(2), result.getValue(0, DSL.count())); + assertEquals("Schildt", result.getValue(2, author.LAST_NAME)); + assertEquals(Integer.valueOf(1), result.getValue(2, DSL.count())); + } + + @Test(expected = DataAccessException.class) + public void givenInvalidData_whenInserting_thenFail() { + dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 5).execute(); + } + + @Test + public void givenValidData_whenUpdating_thenSucceed() { + dsl.update(author).set(author.LAST_NAME, "Baeldung").where(author.ID.equal(3)).execute(); + dsl.update(book).set(book.TITLE, "Building your REST API with Spring").where(book.ID.equal(3)).execute(); + dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 3).set(authorBook.BOOK_ID, 3).execute(); + Result> result = dsl.select(author.ID, author.LAST_NAME, book.TITLE).from(author).join(authorBook).on(author.ID.equal(authorBook.AUTHOR_ID)).join(book).on(authorBook.BOOK_ID.equal(book.ID)).where(author.ID.equal(3)) + .fetch(); + + assertEquals(1, result.size()); + assertEquals(Integer.valueOf(3), result.getValue(0, author.ID)); + assertEquals("Baeldung", result.getValue(0, author.LAST_NAME)); + assertEquals("Building your REST API with Spring", result.getValue(0, book.TITLE)); + } + + @Test(expected = DataAccessException.class) + public void givenInvalidData_whenUpdating_thenFail() { + dsl.update(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 5).execute(); + } + + @Test + public void givenValidData_whenDeleting_thenSucceed() { + dsl.delete(author).where(author.ID.lt(3)).execute(); + Result> result = dsl.select(author.ID, author.FIRST_NAME, author.LAST_NAME).from(author).fetch(); + + assertEquals(1, result.size()); + assertEquals("Bryan", result.getValue(0, author.FIRST_NAME)); + assertEquals("Basham", result.getValue(0, author.LAST_NAME)); + } + + @Test(expected = DataAccessException.class) + public void givenInvalidData_whenDeleting_thenFail() { + dsl.delete(book).where(book.ID.equal(1)).execute(); + } +} \ No newline at end of file From eadbde5c2de168847516f5a3cff2e0ad07842d5c Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 7 Jun 2016 17:49:15 +0200 Subject: [PATCH 056/283] Remove autogenerated jOOQ files --- .gitignore | 5 + .../information_schema/InformationSchema.java | 113 --- .../db/information_schema/Keys.java | 42 - .../db/information_schema/Tables.java | 196 ---- .../information_schema/tables/Catalogs.java | 87 -- .../information_schema/tables/Collations.java | 92 -- .../tables/ColumnPrivileges.java | 122 --- .../db/information_schema/tables/Columns.java | 197 ---- .../information_schema/tables/Constants.java | 117 --- .../tables/Constraints.java | 147 --- .../tables/CrossReferences.java | 152 --- .../db/information_schema/tables/Domains.java | 152 --- .../tables/FunctionAliases.java | 142 --- .../tables/FunctionColumns.java | 167 ---- .../db/information_schema/tables/Help.java | 107 -- .../db/information_schema/tables/InDoubt.java | 92 -- .../db/information_schema/tables/Indexes.java | 187 ---- .../db/information_schema/tables/Locks.java | 102 -- .../tables/QueryStatistics.java | 142 --- .../db/information_schema/tables/Rights.java | 117 --- .../db/information_schema/tables/Roles.java | 97 -- .../information_schema/tables/Schemata.java | 122 --- .../information_schema/tables/Sequences.java | 142 --- .../tables/SessionState.java | 92 -- .../information_schema/tables/Sessions.java | 112 --- .../information_schema/tables/Settings.java | 92 -- .../tables/TablePrivileges.java | 117 --- .../information_schema/tables/TableTypes.java | 87 -- .../db/information_schema/tables/Tables.java | 142 --- .../information_schema/tables/Triggers.java | 152 --- .../information_schema/tables/TypeInfo.java | 152 --- .../db/information_schema/tables/Users.java | 102 -- .../db/information_schema/tables/Views.java | 127 --- .../tables/records/CatalogsRecord.java | 119 --- .../tables/records/CollationsRecord.java | 160 --- .../records/ColumnPrivilegesRecord.java | 406 -------- .../tables/records/ColumnsRecord.java | 392 -------- .../tables/records/ConstantsRecord.java | 365 ------- .../tables/records/ConstraintsRecord.java | 611 ------------ .../tables/records/CrossReferencesRecord.java | 652 ------------ .../tables/records/DomainsRecord.java | 652 ------------ .../tables/records/FunctionAliasesRecord.java | 570 ----------- .../tables/records/FunctionColumnsRecord.java | 775 --------------- .../tables/records/HelpRecord.java | 283 ------ .../tables/records/InDoubtRecord.java | 160 --- .../tables/records/IndexesRecord.java | 939 ------------------ .../tables/records/LocksRecord.java | 242 ----- .../tables/records/QueryStatisticsRecord.java | 570 ----------- .../tables/records/RightsRecord.java | 365 ------- .../tables/records/RolesRecord.java | 201 ---- .../tables/records/SchemataRecord.java | 406 -------- .../tables/records/SequencesRecord.java | 570 ----------- .../tables/records/SessionStateRecord.java | 160 --- .../tables/records/SessionsRecord.java | 324 ------ .../tables/records/SettingsRecord.java | 160 --- .../tables/records/TablePrivilegesRecord.java | 365 ------- .../tables/records/TableTypesRecord.java | 119 --- .../tables/records/TablesRecord.java | 570 ----------- .../tables/records/TriggersRecord.java | 652 ------------ .../tables/records/TypeInfoRecord.java | 652 ------------ .../tables/records/UsersRecord.java | 242 ----- .../tables/records/ViewsRecord.java | 447 --------- .../jooq/introduction/db/public_/Keys.java | 69 -- .../jooq/introduction/db/public_/Public.java | 61 -- .../jooq/introduction/db/public_/Tables.java | 41 - .../db/public_/tables/Author.java | 118 --- .../db/public_/tables/AuthorBook.java | 122 --- .../introduction/db/public_/tables/Book.java | 113 --- .../tables/records/AuthorBookRecord.java | 172 ---- .../public_/tables/records/AuthorRecord.java | 214 ---- .../db/public_/tables/records/BookRecord.java | 173 ---- 71 files changed, 5 insertions(+), 17221 deletions(-) delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/InformationSchema.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Keys.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Tables.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Catalogs.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Collations.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/ColumnPrivileges.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Columns.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constants.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constraints.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/CrossReferences.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Domains.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionAliases.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionColumns.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Help.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/InDoubt.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Indexes.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Locks.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/QueryStatistics.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Rights.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Roles.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Schemata.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sequences.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/SessionState.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sessions.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Settings.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TablePrivileges.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TableTypes.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Tables.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Triggers.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TypeInfo.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Users.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Views.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CatalogsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CollationsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnPrivilegesRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstantsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstraintsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CrossReferencesRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/DomainsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionAliasesRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionColumnsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/HelpRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/InDoubtRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/IndexesRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/LocksRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/QueryStatisticsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RightsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RolesRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SchemataRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SequencesRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionStateRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SettingsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablePrivilegesRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TableTypesRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablesRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TriggersRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TypeInfoRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/UsersRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ViewsRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Keys.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Public.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Tables.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Author.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/AuthorBook.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Book.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorBookRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorRecord.java delete mode 100644 jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/BookRecord.java diff --git a/.gitignore b/.gitignore index 210807d09e..1a67437a83 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,8 @@ # Eclipse .settings/ +*.project +*.classpath .prefs *.prefs @@ -23,3 +25,6 @@ log/ target/ spring-openid/src/main/resources/application.properties + +# Autogenerated jOOQ files +jooq-spring/src/main/java/com/baeldung/jooq/introduction/db diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/InformationSchema.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/InformationSchema.java deleted file mode 100644 index 94138a9ebe..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/InformationSchema.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Catalogs; -import com.baeldung.jooq.introduction.db.information_schema.tables.Collations; -import com.baeldung.jooq.introduction.db.information_schema.tables.ColumnPrivileges; -import com.baeldung.jooq.introduction.db.information_schema.tables.Columns; -import com.baeldung.jooq.introduction.db.information_schema.tables.Constants; -import com.baeldung.jooq.introduction.db.information_schema.tables.Constraints; -import com.baeldung.jooq.introduction.db.information_schema.tables.CrossReferences; -import com.baeldung.jooq.introduction.db.information_schema.tables.Domains; -import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionAliases; -import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionColumns; -import com.baeldung.jooq.introduction.db.information_schema.tables.Help; -import com.baeldung.jooq.introduction.db.information_schema.tables.InDoubt; -import com.baeldung.jooq.introduction.db.information_schema.tables.Indexes; -import com.baeldung.jooq.introduction.db.information_schema.tables.Locks; -import com.baeldung.jooq.introduction.db.information_schema.tables.QueryStatistics; -import com.baeldung.jooq.introduction.db.information_schema.tables.Rights; -import com.baeldung.jooq.introduction.db.information_schema.tables.Roles; -import com.baeldung.jooq.introduction.db.information_schema.tables.Schemata; -import com.baeldung.jooq.introduction.db.information_schema.tables.Sequences; -import com.baeldung.jooq.introduction.db.information_schema.tables.SessionState; -import com.baeldung.jooq.introduction.db.information_schema.tables.Sessions; -import com.baeldung.jooq.introduction.db.information_schema.tables.Settings; -import com.baeldung.jooq.introduction.db.information_schema.tables.TablePrivileges; -import com.baeldung.jooq.introduction.db.information_schema.tables.TableTypes; -import com.baeldung.jooq.introduction.db.information_schema.tables.Tables; -import com.baeldung.jooq.introduction.db.information_schema.tables.Triggers; -import com.baeldung.jooq.introduction.db.information_schema.tables.TypeInfo; -import com.baeldung.jooq.introduction.db.information_schema.tables.Users; -import com.baeldung.jooq.introduction.db.information_schema.tables.Views; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Generated; - -import org.jooq.Table; -import org.jooq.impl.SchemaImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class InformationSchema extends SchemaImpl { - - private static final long serialVersionUID = 436617961; - - /** - * The reference instance of INFORMATION_SCHEMA - */ - public static final InformationSchema INFORMATION_SCHEMA = new InformationSchema(); - - /** - * No further instances allowed - */ - private InformationSchema() { - super("INFORMATION_SCHEMA"); - } - - @Override - public final List> getTables() { - List result = new ArrayList(); - result.addAll(getTables0()); - return result; - } - - private final List> getTables0() { - return Arrays.>asList( - QueryStatistics.QUERY_STATISTICS, - SessionState.SESSION_STATE, - Locks.LOCKS, - Sessions.SESSIONS, - Triggers.TRIGGERS, - Domains.DOMAINS, - Constants.CONSTANTS, - FunctionColumns.FUNCTION_COLUMNS, - Constraints.CONSTRAINTS, - CrossReferences.CROSS_REFERENCES, - InDoubt.IN_DOUBT, - Views.VIEWS, - Collations.COLLATIONS, - ColumnPrivileges.COLUMN_PRIVILEGES, - TablePrivileges.TABLE_PRIVILEGES, - Schemata.SCHEMATA, - FunctionAliases.FUNCTION_ALIASES, - Rights.RIGHTS, - Roles.ROLES, - Users.USERS, - Sequences.SEQUENCES, - Help.HELP, - Settings.SETTINGS, - Catalogs.CATALOGS, - TypeInfo.TYPE_INFO, - TableTypes.TABLE_TYPES, - Indexes.INDEXES, - Columns.COLUMNS, - Tables.TABLES); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Keys.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Keys.java deleted file mode 100644 index 87a1a03e55..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Keys.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema; - - -import javax.annotation.Generated; - - -/** - * A class modelling foreign key relationships between tables of the INFORMATION_SCHEMA - * schema - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Keys { - - // ------------------------------------------------------------------------- - // IDENTITY definitions - // ------------------------------------------------------------------------- - - - // ------------------------------------------------------------------------- - // UNIQUE and PRIMARY KEY definitions - // ------------------------------------------------------------------------- - - - // ------------------------------------------------------------------------- - // FOREIGN KEY definitions - // ------------------------------------------------------------------------- - - - // ------------------------------------------------------------------------- - // [#1459] distribute members to avoid static initialisers > 64kb - // ------------------------------------------------------------------------- -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Tables.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Tables.java deleted file mode 100644 index 9d66776232..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/Tables.java +++ /dev/null @@ -1,196 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Catalogs; -import com.baeldung.jooq.introduction.db.information_schema.tables.Collations; -import com.baeldung.jooq.introduction.db.information_schema.tables.ColumnPrivileges; -import com.baeldung.jooq.introduction.db.information_schema.tables.Columns; -import com.baeldung.jooq.introduction.db.information_schema.tables.Constants; -import com.baeldung.jooq.introduction.db.information_schema.tables.Constraints; -import com.baeldung.jooq.introduction.db.information_schema.tables.CrossReferences; -import com.baeldung.jooq.introduction.db.information_schema.tables.Domains; -import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionAliases; -import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionColumns; -import com.baeldung.jooq.introduction.db.information_schema.tables.Help; -import com.baeldung.jooq.introduction.db.information_schema.tables.InDoubt; -import com.baeldung.jooq.introduction.db.information_schema.tables.Indexes; -import com.baeldung.jooq.introduction.db.information_schema.tables.Locks; -import com.baeldung.jooq.introduction.db.information_schema.tables.QueryStatistics; -import com.baeldung.jooq.introduction.db.information_schema.tables.Rights; -import com.baeldung.jooq.introduction.db.information_schema.tables.Roles; -import com.baeldung.jooq.introduction.db.information_schema.tables.Schemata; -import com.baeldung.jooq.introduction.db.information_schema.tables.Sequences; -import com.baeldung.jooq.introduction.db.information_schema.tables.SessionState; -import com.baeldung.jooq.introduction.db.information_schema.tables.Sessions; -import com.baeldung.jooq.introduction.db.information_schema.tables.Settings; -import com.baeldung.jooq.introduction.db.information_schema.tables.TablePrivileges; -import com.baeldung.jooq.introduction.db.information_schema.tables.TableTypes; -import com.baeldung.jooq.introduction.db.information_schema.tables.Triggers; -import com.baeldung.jooq.introduction.db.information_schema.tables.TypeInfo; -import com.baeldung.jooq.introduction.db.information_schema.tables.Users; -import com.baeldung.jooq.introduction.db.information_schema.tables.Views; - -import javax.annotation.Generated; - - -/** - * Convenience access to all tables in INFORMATION_SCHEMA - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Tables { - - /** - * The table INFORMATION_SCHEMA.QUERY_STATISTICS - */ - public static final QueryStatistics QUERY_STATISTICS = com.baeldung.jooq.introduction.db.information_schema.tables.QueryStatistics.QUERY_STATISTICS; - - /** - * The table INFORMATION_SCHEMA.SESSION_STATE - */ - public static final SessionState SESSION_STATE = com.baeldung.jooq.introduction.db.information_schema.tables.SessionState.SESSION_STATE; - - /** - * The table INFORMATION_SCHEMA.LOCKS - */ - public static final Locks LOCKS = com.baeldung.jooq.introduction.db.information_schema.tables.Locks.LOCKS; - - /** - * The table INFORMATION_SCHEMA.SESSIONS - */ - public static final Sessions SESSIONS = com.baeldung.jooq.introduction.db.information_schema.tables.Sessions.SESSIONS; - - /** - * The table INFORMATION_SCHEMA.TRIGGERS - */ - public static final Triggers TRIGGERS = com.baeldung.jooq.introduction.db.information_schema.tables.Triggers.TRIGGERS; - - /** - * The table INFORMATION_SCHEMA.DOMAINS - */ - public static final Domains DOMAINS = com.baeldung.jooq.introduction.db.information_schema.tables.Domains.DOMAINS; - - /** - * The table INFORMATION_SCHEMA.CONSTANTS - */ - public static final Constants CONSTANTS = com.baeldung.jooq.introduction.db.information_schema.tables.Constants.CONSTANTS; - - /** - * The table INFORMATION_SCHEMA.FUNCTION_COLUMNS - */ - public static final FunctionColumns FUNCTION_COLUMNS = com.baeldung.jooq.introduction.db.information_schema.tables.FunctionColumns.FUNCTION_COLUMNS; - - /** - * The table INFORMATION_SCHEMA.CONSTRAINTS - */ - public static final Constraints CONSTRAINTS = com.baeldung.jooq.introduction.db.information_schema.tables.Constraints.CONSTRAINTS; - - /** - * The table INFORMATION_SCHEMA.CROSS_REFERENCES - */ - public static final CrossReferences CROSS_REFERENCES = com.baeldung.jooq.introduction.db.information_schema.tables.CrossReferences.CROSS_REFERENCES; - - /** - * The table INFORMATION_SCHEMA.IN_DOUBT - */ - public static final InDoubt IN_DOUBT = com.baeldung.jooq.introduction.db.information_schema.tables.InDoubt.IN_DOUBT; - - /** - * The table INFORMATION_SCHEMA.VIEWS - */ - public static final Views VIEWS = com.baeldung.jooq.introduction.db.information_schema.tables.Views.VIEWS; - - /** - * The table INFORMATION_SCHEMA.COLLATIONS - */ - public static final Collations COLLATIONS = com.baeldung.jooq.introduction.db.information_schema.tables.Collations.COLLATIONS; - - /** - * The table INFORMATION_SCHEMA.COLUMN_PRIVILEGES - */ - public static final ColumnPrivileges COLUMN_PRIVILEGES = com.baeldung.jooq.introduction.db.information_schema.tables.ColumnPrivileges.COLUMN_PRIVILEGES; - - /** - * The table INFORMATION_SCHEMA.TABLE_PRIVILEGES - */ - public static final TablePrivileges TABLE_PRIVILEGES = com.baeldung.jooq.introduction.db.information_schema.tables.TablePrivileges.TABLE_PRIVILEGES; - - /** - * The table INFORMATION_SCHEMA.SCHEMATA - */ - public static final Schemata SCHEMATA = com.baeldung.jooq.introduction.db.information_schema.tables.Schemata.SCHEMATA; - - /** - * The table INFORMATION_SCHEMA.FUNCTION_ALIASES - */ - public static final FunctionAliases FUNCTION_ALIASES = com.baeldung.jooq.introduction.db.information_schema.tables.FunctionAliases.FUNCTION_ALIASES; - - /** - * The table INFORMATION_SCHEMA.RIGHTS - */ - public static final Rights RIGHTS = com.baeldung.jooq.introduction.db.information_schema.tables.Rights.RIGHTS; - - /** - * The table INFORMATION_SCHEMA.ROLES - */ - public static final Roles ROLES = com.baeldung.jooq.introduction.db.information_schema.tables.Roles.ROLES; - - /** - * The table INFORMATION_SCHEMA.USERS - */ - public static final Users USERS = com.baeldung.jooq.introduction.db.information_schema.tables.Users.USERS; - - /** - * The table INFORMATION_SCHEMA.SEQUENCES - */ - public static final Sequences SEQUENCES = com.baeldung.jooq.introduction.db.information_schema.tables.Sequences.SEQUENCES; - - /** - * The table INFORMATION_SCHEMA.HELP - */ - public static final Help HELP = com.baeldung.jooq.introduction.db.information_schema.tables.Help.HELP; - - /** - * The table INFORMATION_SCHEMA.SETTINGS - */ - public static final Settings SETTINGS = com.baeldung.jooq.introduction.db.information_schema.tables.Settings.SETTINGS; - - /** - * The table INFORMATION_SCHEMA.CATALOGS - */ - public static final Catalogs CATALOGS = com.baeldung.jooq.introduction.db.information_schema.tables.Catalogs.CATALOGS; - - /** - * The table INFORMATION_SCHEMA.TYPE_INFO - */ - public static final TypeInfo TYPE_INFO = com.baeldung.jooq.introduction.db.information_schema.tables.TypeInfo.TYPE_INFO; - - /** - * The table INFORMATION_SCHEMA.TABLE_TYPES - */ - public static final TableTypes TABLE_TYPES = com.baeldung.jooq.introduction.db.information_schema.tables.TableTypes.TABLE_TYPES; - - /** - * The table INFORMATION_SCHEMA.INDEXES - */ - public static final Indexes INDEXES = com.baeldung.jooq.introduction.db.information_schema.tables.Indexes.INDEXES; - - /** - * The table INFORMATION_SCHEMA.COLUMNS - */ - public static final Columns COLUMNS = com.baeldung.jooq.introduction.db.information_schema.tables.Columns.COLUMNS; - - /** - * The table INFORMATION_SCHEMA.TABLES - */ - public static final com.baeldung.jooq.introduction.db.information_schema.tables.Tables TABLES = com.baeldung.jooq.introduction.db.information_schema.tables.Tables.TABLES; -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Catalogs.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Catalogs.java deleted file mode 100644 index f7091cfbe4..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Catalogs.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.CatalogsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Catalogs extends TableImpl { - - private static final long serialVersionUID = 1558896306; - - /** - * The reference instance of INFORMATION_SCHEMA.CATALOGS - */ - public static final Catalogs CATALOGS = new Catalogs(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return CatalogsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.CATALOGS.CATALOG_NAME. - */ - public final TableField CATALOG_NAME = createField("CATALOG_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.CATALOGS table reference - */ - public Catalogs() { - this("CATALOGS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.CATALOGS table reference - */ - public Catalogs(String alias) { - this(alias, CATALOGS); - } - - private Catalogs(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Catalogs(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Catalogs as(String alias) { - return new Catalogs(alias, this); - } - - /** - * Rename this table - */ - public Catalogs rename(String name) { - return new Catalogs(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Collations.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Collations.java deleted file mode 100644 index e16ed17605..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Collations.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.CollationsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Collations extends TableImpl { - - private static final long serialVersionUID = 1978393146; - - /** - * The reference instance of INFORMATION_SCHEMA.COLLATIONS - */ - public static final Collations COLLATIONS = new Collations(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return CollationsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.COLLATIONS.NAME. - */ - public final TableField NAME = createField("NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLLATIONS.KEY. - */ - public final TableField KEY = createField("KEY", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.COLLATIONS table reference - */ - public Collations() { - this("COLLATIONS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.COLLATIONS table reference - */ - public Collations(String alias) { - this(alias, COLLATIONS); - } - - private Collations(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Collations(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Collations as(String alias) { - return new Collations(alias, this); - } - - /** - * Rename this table - */ - public Collations rename(String name) { - return new Collations(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/ColumnPrivileges.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/ColumnPrivileges.java deleted file mode 100644 index 307682f434..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/ColumnPrivileges.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.ColumnPrivilegesRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class ColumnPrivileges extends TableImpl { - - private static final long serialVersionUID = -282101680; - - /** - * The reference instance of INFORMATION_SCHEMA.COLUMN_PRIVILEGES - */ - public static final ColumnPrivileges COLUMN_PRIVILEGES = new ColumnPrivileges(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return ColumnPrivilegesRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTOR. - */ - public final TableField GRANTOR = createField("GRANTOR", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTEE. - */ - public final TableField GRANTEE = createField("GRANTEE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_CATALOG. - */ - public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.COLUMN_NAME. - */ - public final TableField COLUMN_NAME = createField("COLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.PRIVILEGE_TYPE. - */ - public final TableField PRIVILEGE_TYPE = createField("PRIVILEGE_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMN_PRIVILEGES.IS_GRANTABLE. - */ - public final TableField IS_GRANTABLE = createField("IS_GRANTABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.COLUMN_PRIVILEGES table reference - */ - public ColumnPrivileges() { - this("COLUMN_PRIVILEGES", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.COLUMN_PRIVILEGES table reference - */ - public ColumnPrivileges(String alias) { - this(alias, COLUMN_PRIVILEGES); - } - - private ColumnPrivileges(String alias, Table aliased) { - this(alias, aliased, null); - } - - private ColumnPrivileges(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivileges as(String alias) { - return new ColumnPrivileges(alias, this); - } - - /** - * Rename this table - */ - public ColumnPrivileges rename(String name) { - return new ColumnPrivileges(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Columns.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Columns.java deleted file mode 100644 index d95a518c1f..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Columns.java +++ /dev/null @@ -1,197 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.ColumnsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Columns extends TableImpl { - - private static final long serialVersionUID = 1721995161; - - /** - * The reference instance of INFORMATION_SCHEMA.COLUMNS - */ - public static final Columns COLUMNS = new Columns(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return ColumnsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG. - */ - public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME. - */ - public final TableField COLUMN_NAME = createField("COLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION. - */ - public final TableField ORDINAL_POSITION = createField("ORDINAL_POSITION", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT. - */ - public final TableField COLUMN_DEFAULT = createField("COLUMN_DEFAULT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.IS_NULLABLE. - */ - public final TableField IS_NULLABLE = createField("IS_NULLABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.DATA_TYPE. - */ - public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.CHARACTER_MAXIMUM_LENGTH. - */ - public final TableField CHARACTER_MAXIMUM_LENGTH = createField("CHARACTER_MAXIMUM_LENGTH", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.CHARACTER_OCTET_LENGTH. - */ - public final TableField CHARACTER_OCTET_LENGTH = createField("CHARACTER_OCTET_LENGTH", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION. - */ - public final TableField NUMERIC_PRECISION = createField("NUMERIC_PRECISION", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION_RADIX. - */ - public final TableField NUMERIC_PRECISION_RADIX = createField("NUMERIC_PRECISION_RADIX", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.NUMERIC_SCALE. - */ - public final TableField NUMERIC_SCALE = createField("NUMERIC_SCALE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.CHARACTER_SET_NAME. - */ - public final TableField CHARACTER_SET_NAME = createField("CHARACTER_SET_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.COLLATION_NAME. - */ - public final TableField COLLATION_NAME = createField("COLLATION_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.TYPE_NAME. - */ - public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.NULLABLE. - */ - public final TableField NULLABLE = createField("NULLABLE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.IS_COMPUTED. - */ - public final TableField IS_COMPUTED = createField("IS_COMPUTED", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.SELECTIVITY. - */ - public final TableField SELECTIVITY = createField("SELECTIVITY", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.CHECK_CONSTRAINT. - */ - public final TableField CHECK_CONSTRAINT = createField("CHECK_CONSTRAINT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.SEQUENCE_NAME. - */ - public final TableField SEQUENCE_NAME = createField("SEQUENCE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.COLUMNS.SOURCE_DATA_TYPE. - */ - public final TableField SOURCE_DATA_TYPE = createField("SOURCE_DATA_TYPE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * Create a INFORMATION_SCHEMA.COLUMNS table reference - */ - public Columns() { - this("COLUMNS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.COLUMNS table reference - */ - public Columns(String alias) { - this(alias, COLUMNS); - } - - private Columns(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Columns(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Columns as(String alias) { - return new Columns(alias, this); - } - - /** - * Rename this table - */ - public Columns rename(String name) { - return new Columns(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constants.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constants.java deleted file mode 100644 index 7d2d97f5f8..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constants.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.ConstantsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Constants extends TableImpl { - - private static final long serialVersionUID = 107996087; - - /** - * The reference instance of INFORMATION_SCHEMA.CONSTANTS - */ - public static final Constants CONSTANTS = new Constants(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return ConstantsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.CONSTANTS.CONSTANT_CATALOG. - */ - public final TableField CONSTANT_CATALOG = createField("CONSTANT_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTANTS.CONSTANT_SCHEMA. - */ - public final TableField CONSTANT_SCHEMA = createField("CONSTANT_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTANTS.CONSTANT_NAME. - */ - public final TableField CONSTANT_NAME = createField("CONSTANT_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTANTS.DATA_TYPE. - */ - public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTANTS.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTANTS.SQL. - */ - public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTANTS.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.CONSTANTS table reference - */ - public Constants() { - this("CONSTANTS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.CONSTANTS table reference - */ - public Constants(String alias) { - this(alias, CONSTANTS); - } - - private Constants(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Constants(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Constants as(String alias) { - return new Constants(alias, this); - } - - /** - * Rename this table - */ - public Constants rename(String name) { - return new Constants(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constraints.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constraints.java deleted file mode 100644 index 1c95f369ec..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Constraints.java +++ /dev/null @@ -1,147 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.ConstraintsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Constraints extends TableImpl { - - private static final long serialVersionUID = 529190017; - - /** - * The reference instance of INFORMATION_SCHEMA.CONSTRAINTS - */ - public static final Constraints CONSTRAINTS = new Constraints(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return ConstraintsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_CATALOG. - */ - public final TableField CONSTRAINT_CATALOG = createField("CONSTRAINT_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_SCHEMA. - */ - public final TableField CONSTRAINT_SCHEMA = createField("CONSTRAINT_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_NAME. - */ - public final TableField CONSTRAINT_NAME = createField("CONSTRAINT_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_TYPE. - */ - public final TableField CONSTRAINT_TYPE = createField("CONSTRAINT_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.TABLE_CATALOG. - */ - public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.UNIQUE_INDEX_NAME. - */ - public final TableField UNIQUE_INDEX_NAME = createField("UNIQUE_INDEX_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.CHECK_EXPRESSION. - */ - public final TableField CHECK_EXPRESSION = createField("CHECK_EXPRESSION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.COLUMN_LIST. - */ - public final TableField COLUMN_LIST = createField("COLUMN_LIST", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.SQL. - */ - public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CONSTRAINTS.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.CONSTRAINTS table reference - */ - public Constraints() { - this("CONSTRAINTS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.CONSTRAINTS table reference - */ - public Constraints(String alias) { - this(alias, CONSTRAINTS); - } - - private Constraints(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Constraints(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Constraints as(String alias) { - return new Constraints(alias, this); - } - - /** - * Rename this table - */ - public Constraints rename(String name) { - return new Constraints(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/CrossReferences.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/CrossReferences.java deleted file mode 100644 index d3d9cebded..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/CrossReferences.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.CrossReferencesRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class CrossReferences extends TableImpl { - - private static final long serialVersionUID = 846378739; - - /** - * The reference instance of INFORMATION_SCHEMA.CROSS_REFERENCES - */ - public static final CrossReferences CROSS_REFERENCES = new CrossReferences(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return CrossReferencesRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_CATALOG. - */ - public final TableField PKTABLE_CATALOG = createField("PKTABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_SCHEMA. - */ - public final TableField PKTABLE_SCHEMA = createField("PKTABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_NAME. - */ - public final TableField PKTABLE_NAME = createField("PKTABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PKCOLUMN_NAME. - */ - public final TableField PKCOLUMN_NAME = createField("PKCOLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_CATALOG. - */ - public final TableField FKTABLE_CATALOG = createField("FKTABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_SCHEMA. - */ - public final TableField FKTABLE_SCHEMA = createField("FKTABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_NAME. - */ - public final TableField FKTABLE_NAME = createField("FKTABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FKCOLUMN_NAME. - */ - public final TableField FKCOLUMN_NAME = createField("FKCOLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.ORDINAL_POSITION. - */ - public final TableField ORDINAL_POSITION = createField("ORDINAL_POSITION", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.UPDATE_RULE. - */ - public final TableField UPDATE_RULE = createField("UPDATE_RULE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.DELETE_RULE. - */ - public final TableField DELETE_RULE = createField("DELETE_RULE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.FK_NAME. - */ - public final TableField FK_NAME = createField("FK_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.PK_NAME. - */ - public final TableField PK_NAME = createField("PK_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.CROSS_REFERENCES.DEFERRABILITY. - */ - public final TableField DEFERRABILITY = createField("DEFERRABILITY", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * Create a INFORMATION_SCHEMA.CROSS_REFERENCES table reference - */ - public CrossReferences() { - this("CROSS_REFERENCES", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.CROSS_REFERENCES table reference - */ - public CrossReferences(String alias) { - this(alias, CROSS_REFERENCES); - } - - private CrossReferences(String alias, Table aliased) { - this(alias, aliased, null); - } - - private CrossReferences(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferences as(String alias) { - return new CrossReferences(alias, this); - } - - /** - * Rename this table - */ - public CrossReferences rename(String name) { - return new CrossReferences(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Domains.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Domains.java deleted file mode 100644 index 597f3d2e2b..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Domains.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.DomainsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Domains extends TableImpl { - - private static final long serialVersionUID = -742107682; - - /** - * The reference instance of INFORMATION_SCHEMA.DOMAINS - */ - public static final Domains DOMAINS = new Domains(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return DomainsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.DOMAINS.DOMAIN_CATALOG. - */ - public final TableField DOMAIN_CATALOG = createField("DOMAIN_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.DOMAIN_SCHEMA. - */ - public final TableField DOMAIN_SCHEMA = createField("DOMAIN_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.DOMAIN_NAME. - */ - public final TableField DOMAIN_NAME = createField("DOMAIN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.COLUMN_DEFAULT. - */ - public final TableField COLUMN_DEFAULT = createField("COLUMN_DEFAULT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.IS_NULLABLE. - */ - public final TableField IS_NULLABLE = createField("IS_NULLABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.DATA_TYPE. - */ - public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.PRECISION. - */ - public final TableField PRECISION = createField("PRECISION", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.SCALE. - */ - public final TableField SCALE = createField("SCALE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.TYPE_NAME. - */ - public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.SELECTIVITY. - */ - public final TableField SELECTIVITY = createField("SELECTIVITY", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.CHECK_CONSTRAINT. - */ - public final TableField CHECK_CONSTRAINT = createField("CHECK_CONSTRAINT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.SQL. - */ - public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.DOMAINS.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.DOMAINS table reference - */ - public Domains() { - this("DOMAINS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.DOMAINS table reference - */ - public Domains(String alias) { - this(alias, DOMAINS); - } - - private Domains(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Domains(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Domains as(String alias) { - return new Domains(alias, this); - } - - /** - * Rename this table - */ - public Domains rename(String name) { - return new Domains(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionAliases.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionAliases.java deleted file mode 100644 index 8b85980d38..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionAliases.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.FunctionAliasesRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class FunctionAliases extends TableImpl { - - private static final long serialVersionUID = -232882186; - - /** - * The reference instance of INFORMATION_SCHEMA.FUNCTION_ALIASES - */ - public static final FunctionAliases FUNCTION_ALIASES = new FunctionAliases(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return FunctionAliasesRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_CATALOG. - */ - public final TableField ALIAS_CATALOG = createField("ALIAS_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_SCHEMA. - */ - public final TableField ALIAS_SCHEMA = createField("ALIAS_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_NAME. - */ - public final TableField ALIAS_NAME = createField("ALIAS_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_CLASS. - */ - public final TableField JAVA_CLASS = createField("JAVA_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_METHOD. - */ - public final TableField JAVA_METHOD = createField("JAVA_METHOD", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.DATA_TYPE. - */ - public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.TYPE_NAME. - */ - public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.COLUMN_COUNT. - */ - public final TableField COLUMN_COUNT = createField("COLUMN_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.RETURNS_RESULT. - */ - public final TableField RETURNS_RESULT = createField("RETURNS_RESULT", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_ALIASES.SOURCE. - */ - public final TableField SOURCE = createField("SOURCE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.FUNCTION_ALIASES table reference - */ - public FunctionAliases() { - this("FUNCTION_ALIASES", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.FUNCTION_ALIASES table reference - */ - public FunctionAliases(String alias) { - this(alias, FUNCTION_ALIASES); - } - - private FunctionAliases(String alias, Table aliased) { - this(alias, aliased, null); - } - - private FunctionAliases(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliases as(String alias) { - return new FunctionAliases(alias, this); - } - - /** - * Rename this table - */ - public FunctionAliases rename(String name) { - return new FunctionAliases(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionColumns.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionColumns.java deleted file mode 100644 index b5df94b4f0..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/FunctionColumns.java +++ /dev/null @@ -1,167 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.FunctionColumnsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class FunctionColumns extends TableImpl { - - private static final long serialVersionUID = -406719584; - - /** - * The reference instance of INFORMATION_SCHEMA.FUNCTION_COLUMNS - */ - public static final FunctionColumns FUNCTION_COLUMNS = new FunctionColumns(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return FunctionColumnsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_CATALOG. - */ - public final TableField ALIAS_CATALOG = createField("ALIAS_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_SCHEMA. - */ - public final TableField ALIAS_SCHEMA = createField("ALIAS_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_NAME. - */ - public final TableField ALIAS_NAME = createField("ALIAS_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_CLASS. - */ - public final TableField JAVA_CLASS = createField("JAVA_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_METHOD. - */ - public final TableField JAVA_METHOD = createField("JAVA_METHOD", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_COUNT. - */ - public final TableField COLUMN_COUNT = createField("COLUMN_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.POS. - */ - public final TableField POS = createField("POS", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_NAME. - */ - public final TableField COLUMN_NAME = createField("COLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.DATA_TYPE. - */ - public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.TYPE_NAME. - */ - public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.PRECISION. - */ - public final TableField PRECISION = createField("PRECISION", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.SCALE. - */ - public final TableField SCALE = createField("SCALE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.RADIX. - */ - public final TableField RADIX = createField("RADIX", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.NULLABLE. - */ - public final TableField NULLABLE = createField("NULLABLE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_TYPE. - */ - public final TableField COLUMN_TYPE = createField("COLUMN_TYPE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_DEFAULT. - */ - public final TableField COLUMN_DEFAULT = createField("COLUMN_DEFAULT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.FUNCTION_COLUMNS table reference - */ - public FunctionColumns() { - this("FUNCTION_COLUMNS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.FUNCTION_COLUMNS table reference - */ - public FunctionColumns(String alias) { - this(alias, FUNCTION_COLUMNS); - } - - private FunctionColumns(String alias, Table aliased) { - this(alias, aliased, null); - } - - private FunctionColumns(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumns as(String alias) { - return new FunctionColumns(alias, this); - } - - /** - * Rename this table - */ - public FunctionColumns rename(String name) { - return new FunctionColumns(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Help.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Help.java deleted file mode 100644 index 449eed4f72..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Help.java +++ /dev/null @@ -1,107 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.HelpRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Help extends TableImpl { - - private static final long serialVersionUID = 1402170374; - - /** - * The reference instance of INFORMATION_SCHEMA.HELP - */ - public static final Help HELP = new Help(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return HelpRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.HELP.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.HELP.SECTION. - */ - public final TableField SECTION = createField("SECTION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.HELP.TOPIC. - */ - public final TableField TOPIC = createField("TOPIC", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.HELP.SYNTAX. - */ - public final TableField SYNTAX = createField("SYNTAX", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.HELP.TEXT. - */ - public final TableField TEXT = createField("TEXT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.HELP table reference - */ - public Help() { - this("HELP", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.HELP table reference - */ - public Help(String alias) { - this(alias, HELP); - } - - private Help(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Help(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Help as(String alias) { - return new Help(alias, this); - } - - /** - * Rename this table - */ - public Help rename(String name) { - return new Help(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/InDoubt.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/InDoubt.java deleted file mode 100644 index c37e06e47e..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/InDoubt.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.InDoubtRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class InDoubt extends TableImpl { - - private static final long serialVersionUID = 284524946; - - /** - * The reference instance of INFORMATION_SCHEMA.IN_DOUBT - */ - public static final InDoubt IN_DOUBT = new InDoubt(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return InDoubtRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.IN_DOUBT.TRANSACTION. - */ - public final TableField TRANSACTION = createField("TRANSACTION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.IN_DOUBT.STATE. - */ - public final TableField STATE = createField("STATE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.IN_DOUBT table reference - */ - public InDoubt() { - this("IN_DOUBT", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.IN_DOUBT table reference - */ - public InDoubt(String alias) { - this(alias, IN_DOUBT); - } - - private InDoubt(String alias, Table aliased) { - this(alias, aliased, null); - } - - private InDoubt(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public InDoubt as(String alias) { - return new InDoubt(alias, this); - } - - /** - * Rename this table - */ - public InDoubt rename(String name) { - return new InDoubt(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Indexes.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Indexes.java deleted file mode 100644 index 1cc3b176a2..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Indexes.java +++ /dev/null @@ -1,187 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.IndexesRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Indexes extends TableImpl { - - private static final long serialVersionUID = 2077967696; - - /** - * The reference instance of INFORMATION_SCHEMA.INDEXES - */ - public static final Indexes INDEXES = new Indexes(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return IndexesRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.INDEXES.TABLE_CATALOG. - */ - public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.NON_UNIQUE. - */ - public final TableField NON_UNIQUE = createField("NON_UNIQUE", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.INDEX_NAME. - */ - public final TableField INDEX_NAME = createField("INDEX_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.ORDINAL_POSITION. - */ - public final TableField ORDINAL_POSITION = createField("ORDINAL_POSITION", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.COLUMN_NAME. - */ - public final TableField COLUMN_NAME = createField("COLUMN_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.CARDINALITY. - */ - public final TableField CARDINALITY = createField("CARDINALITY", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.PRIMARY_KEY. - */ - public final TableField PRIMARY_KEY = createField("PRIMARY_KEY", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.INDEX_TYPE_NAME. - */ - public final TableField INDEX_TYPE_NAME = createField("INDEX_TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.IS_GENERATED. - */ - public final TableField IS_GENERATED = createField("IS_GENERATED", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.INDEX_TYPE. - */ - public final TableField INDEX_TYPE = createField("INDEX_TYPE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.ASC_OR_DESC. - */ - public final TableField ASC_OR_DESC = createField("ASC_OR_DESC", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.PAGES. - */ - public final TableField PAGES = createField("PAGES", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.FILTER_CONDITION. - */ - public final TableField FILTER_CONDITION = createField("FILTER_CONDITION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.SQL. - */ - public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.SORT_TYPE. - */ - public final TableField SORT_TYPE = createField("SORT_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.CONSTRAINT_NAME. - */ - public final TableField CONSTRAINT_NAME = createField("CONSTRAINT_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.INDEXES.INDEX_CLASS. - */ - public final TableField INDEX_CLASS = createField("INDEX_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.INDEXES table reference - */ - public Indexes() { - this("INDEXES", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.INDEXES table reference - */ - public Indexes(String alias) { - this(alias, INDEXES); - } - - private Indexes(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Indexes(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Indexes as(String alias) { - return new Indexes(alias, this); - } - - /** - * Rename this table - */ - public Indexes rename(String name) { - return new Indexes(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Locks.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Locks.java deleted file mode 100644 index df9f900f5c..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Locks.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.LocksRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Locks extends TableImpl { - - private static final long serialVersionUID = 169116031; - - /** - * The reference instance of INFORMATION_SCHEMA.LOCKS - */ - public static final Locks LOCKS = new Locks(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return LocksRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.LOCKS.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.LOCKS.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.LOCKS.SESSION_ID. - */ - public final TableField SESSION_ID = createField("SESSION_ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.LOCKS.LOCK_TYPE. - */ - public final TableField LOCK_TYPE = createField("LOCK_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.LOCKS table reference - */ - public Locks() { - this("LOCKS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.LOCKS table reference - */ - public Locks(String alias) { - this(alias, LOCKS); - } - - private Locks(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Locks(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Locks as(String alias) { - return new Locks(alias, this); - } - - /** - * Rename this table - */ - public Locks rename(String name) { - return new Locks(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/QueryStatistics.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/QueryStatistics.java deleted file mode 100644 index 6c65dd7de8..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/QueryStatistics.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.QueryStatisticsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class QueryStatistics extends TableImpl { - - private static final long serialVersionUID = -1610174414; - - /** - * The reference instance of INFORMATION_SCHEMA.QUERY_STATISTICS - */ - public static final QueryStatistics QUERY_STATISTICS = new QueryStatistics(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return QueryStatisticsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.SQL_STATEMENT. - */ - public final TableField SQL_STATEMENT = createField("SQL_STATEMENT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.EXECUTION_COUNT. - */ - public final TableField EXECUTION_COUNT = createField("EXECUTION_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_EXECUTION_TIME. - */ - public final TableField MIN_EXECUTION_TIME = createField("MIN_EXECUTION_TIME", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_EXECUTION_TIME. - */ - public final TableField MAX_EXECUTION_TIME = createField("MAX_EXECUTION_TIME", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_EXECUTION_TIME. - */ - public final TableField CUMULATIVE_EXECUTION_TIME = createField("CUMULATIVE_EXECUTION_TIME", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_EXECUTION_TIME. - */ - public final TableField AVERAGE_EXECUTION_TIME = createField("AVERAGE_EXECUTION_TIME", org.jooq.impl.SQLDataType.DOUBLE, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_EXECUTION_TIME. - */ - public final TableField STD_DEV_EXECUTION_TIME = createField("STD_DEV_EXECUTION_TIME", org.jooq.impl.SQLDataType.DOUBLE, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_ROW_COUNT. - */ - public final TableField MIN_ROW_COUNT = createField("MIN_ROW_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_ROW_COUNT. - */ - public final TableField MAX_ROW_COUNT = createField("MAX_ROW_COUNT", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_ROW_COUNT. - */ - public final TableField CUMULATIVE_ROW_COUNT = createField("CUMULATIVE_ROW_COUNT", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_ROW_COUNT. - */ - public final TableField AVERAGE_ROW_COUNT = createField("AVERAGE_ROW_COUNT", org.jooq.impl.SQLDataType.DOUBLE, this, ""); - - /** - * The column INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_ROW_COUNT. - */ - public final TableField STD_DEV_ROW_COUNT = createField("STD_DEV_ROW_COUNT", org.jooq.impl.SQLDataType.DOUBLE, this, ""); - - /** - * Create a INFORMATION_SCHEMA.QUERY_STATISTICS table reference - */ - public QueryStatistics() { - this("QUERY_STATISTICS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.QUERY_STATISTICS table reference - */ - public QueryStatistics(String alias) { - this(alias, QUERY_STATISTICS); - } - - private QueryStatistics(String alias, Table aliased) { - this(alias, aliased, null); - } - - private QueryStatistics(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatistics as(String alias) { - return new QueryStatistics(alias, this); - } - - /** - * Rename this table - */ - public QueryStatistics rename(String name) { - return new QueryStatistics(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Rights.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Rights.java deleted file mode 100644 index e00c2d336e..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Rights.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.RightsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Rights extends TableImpl { - - private static final long serialVersionUID = -2076280081; - - /** - * The reference instance of INFORMATION_SCHEMA.RIGHTS - */ - public static final Rights RIGHTS = new Rights(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return RightsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.RIGHTS.GRANTEE. - */ - public final TableField GRANTEE = createField("GRANTEE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.RIGHTS.GRANTEETYPE. - */ - public final TableField GRANTEETYPE = createField("GRANTEETYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.RIGHTS.GRANTEDROLE. - */ - public final TableField GRANTEDROLE = createField("GRANTEDROLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.RIGHTS.RIGHTS. - */ - public final TableField RIGHTS_ = createField("RIGHTS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.RIGHTS.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.RIGHTS.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.RIGHTS.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.RIGHTS table reference - */ - public Rights() { - this("RIGHTS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.RIGHTS table reference - */ - public Rights(String alias) { - this(alias, RIGHTS); - } - - private Rights(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Rights(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Rights as(String alias) { - return new Rights(alias, this); - } - - /** - * Rename this table - */ - public Rights rename(String name) { - return new Rights(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Roles.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Roles.java deleted file mode 100644 index 74a394945a..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Roles.java +++ /dev/null @@ -1,97 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.RolesRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Roles extends TableImpl { - - private static final long serialVersionUID = 1847269376; - - /** - * The reference instance of INFORMATION_SCHEMA.ROLES - */ - public static final Roles ROLES = new Roles(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return RolesRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.ROLES.NAME. - */ - public final TableField NAME = createField("NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.ROLES.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.ROLES.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.ROLES table reference - */ - public Roles() { - this("ROLES", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.ROLES table reference - */ - public Roles(String alias) { - this(alias, ROLES); - } - - private Roles(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Roles(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Roles as(String alias) { - return new Roles(alias, this); - } - - /** - * Rename this table - */ - public Roles rename(String name) { - return new Roles(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Schemata.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Schemata.java deleted file mode 100644 index b084c3501c..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Schemata.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.SchemataRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Schemata extends TableImpl { - - private static final long serialVersionUID = -1029782582; - - /** - * The reference instance of INFORMATION_SCHEMA.SCHEMATA - */ - public static final Schemata SCHEMATA = new Schemata(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return SchemataRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.SCHEMATA.CATALOG_NAME. - */ - public final TableField CATALOG_NAME = createField("CATALOG_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME. - */ - public final TableField SCHEMA_NAME = createField("SCHEMA_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SCHEMATA.SCHEMA_OWNER. - */ - public final TableField SCHEMA_OWNER = createField("SCHEMA_OWNER", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SCHEMATA.DEFAULT_CHARACTER_SET_NAME. - */ - public final TableField DEFAULT_CHARACTER_SET_NAME = createField("DEFAULT_CHARACTER_SET_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SCHEMATA.DEFAULT_COLLATION_NAME. - */ - public final TableField DEFAULT_COLLATION_NAME = createField("DEFAULT_COLLATION_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SCHEMATA.IS_DEFAULT. - */ - public final TableField IS_DEFAULT = createField("IS_DEFAULT", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.SCHEMATA.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SCHEMATA.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.SCHEMATA table reference - */ - public Schemata() { - this("SCHEMATA", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.SCHEMATA table reference - */ - public Schemata(String alias) { - this(alias, SCHEMATA); - } - - private Schemata(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Schemata(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Schemata as(String alias) { - return new Schemata(alias, this); - } - - /** - * Rename this table - */ - public Schemata rename(String name) { - return new Schemata(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sequences.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sequences.java deleted file mode 100644 index 26c2da9080..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sequences.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.SequencesRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Sequences extends TableImpl { - - private static final long serialVersionUID = -1302373749; - - /** - * The reference instance of INFORMATION_SCHEMA.SEQUENCES - */ - public static final Sequences SEQUENCES = new Sequences(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return SequencesRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_CATALOG. - */ - public final TableField SEQUENCE_CATALOG = createField("SEQUENCE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA. - */ - public final TableField SEQUENCE_SCHEMA = createField("SEQUENCE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME. - */ - public final TableField SEQUENCE_NAME = createField("SEQUENCE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.CURRENT_VALUE. - */ - public final TableField CURRENT_VALUE = createField("CURRENT_VALUE", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.INCREMENT. - */ - public final TableField INCREMENT = createField("INCREMENT", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.IS_GENERATED. - */ - public final TableField IS_GENERATED = createField("IS_GENERATED", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.CACHE. - */ - public final TableField CACHE = createField("CACHE", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.MIN_VALUE. - */ - public final TableField MIN_VALUE = createField("MIN_VALUE", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.MAX_VALUE. - */ - public final TableField MAX_VALUE = createField("MAX_VALUE", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.IS_CYCLE. - */ - public final TableField IS_CYCLE = createField("IS_CYCLE", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.SEQUENCES.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.SEQUENCES table reference - */ - public Sequences() { - this("SEQUENCES", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.SEQUENCES table reference - */ - public Sequences(String alias) { - this(alias, SEQUENCES); - } - - private Sequences(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Sequences(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Sequences as(String alias) { - return new Sequences(alias, this); - } - - /** - * Rename this table - */ - public Sequences rename(String name) { - return new Sequences(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/SessionState.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/SessionState.java deleted file mode 100644 index 78e0ff743a..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/SessionState.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.SessionStateRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class SessionState extends TableImpl { - - private static final long serialVersionUID = 919891380; - - /** - * The reference instance of INFORMATION_SCHEMA.SESSION_STATE - */ - public static final SessionState SESSION_STATE = new SessionState(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return SessionStateRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.SESSION_STATE.KEY. - */ - public final TableField KEY = createField("KEY", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SESSION_STATE.SQL. - */ - public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.SESSION_STATE table reference - */ - public SessionState() { - this("SESSION_STATE", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.SESSION_STATE table reference - */ - public SessionState(String alias) { - this(alias, SESSION_STATE); - } - - private SessionState(String alias, Table aliased) { - this(alias, aliased, null); - } - - private SessionState(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public SessionState as(String alias) { - return new SessionState(alias, this); - } - - /** - * Rename this table - */ - public SessionState rename(String name) { - return new SessionState(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sessions.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sessions.java deleted file mode 100644 index 22166987d9..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Sessions.java +++ /dev/null @@ -1,112 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.SessionsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Sessions extends TableImpl { - - private static final long serialVersionUID = -975884629; - - /** - * The reference instance of INFORMATION_SCHEMA.SESSIONS - */ - public static final Sessions SESSIONS = new Sessions(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return SessionsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.SESSIONS.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.SESSIONS.USER_NAME. - */ - public final TableField USER_NAME = createField("USER_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SESSIONS.SESSION_START. - */ - public final TableField SESSION_START = createField("SESSION_START", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SESSIONS.STATEMENT. - */ - public final TableField STATEMENT = createField("STATEMENT", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SESSIONS.STATEMENT_START. - */ - public final TableField STATEMENT_START = createField("STATEMENT_START", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SESSIONS.CONTAINS_UNCOMMITTED. - */ - public final TableField CONTAINS_UNCOMMITTED = createField("CONTAINS_UNCOMMITTED", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.SESSIONS table reference - */ - public Sessions() { - this("SESSIONS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.SESSIONS table reference - */ - public Sessions(String alias) { - this(alias, SESSIONS); - } - - private Sessions(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Sessions(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Sessions as(String alias) { - return new Sessions(alias, this); - } - - /** - * Rename this table - */ - public Sessions rename(String name) { - return new Sessions(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Settings.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Settings.java deleted file mode 100644 index caca515c67..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Settings.java +++ /dev/null @@ -1,92 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.SettingsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Settings extends TableImpl { - - private static final long serialVersionUID = -1983664507; - - /** - * The reference instance of INFORMATION_SCHEMA.SETTINGS - */ - public static final Settings SETTINGS = new Settings(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return SettingsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.SETTINGS.NAME. - */ - public final TableField NAME = createField("NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.SETTINGS.VALUE. - */ - public final TableField VALUE = createField("VALUE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.SETTINGS table reference - */ - public Settings() { - this("SETTINGS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.SETTINGS table reference - */ - public Settings(String alias) { - this(alias, SETTINGS); - } - - private Settings(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Settings(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Settings as(String alias) { - return new Settings(alias, this); - } - - /** - * Rename this table - */ - public Settings rename(String name) { - return new Settings(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TablePrivileges.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TablePrivileges.java deleted file mode 100644 index 16104aa4bb..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TablePrivileges.java +++ /dev/null @@ -1,117 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.TablePrivilegesRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class TablePrivileges extends TableImpl { - - private static final long serialVersionUID = -270543696; - - /** - * The reference instance of INFORMATION_SCHEMA.TABLE_PRIVILEGES - */ - public static final TablePrivileges TABLE_PRIVILEGES = new TablePrivileges(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return TablePrivilegesRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTOR. - */ - public final TableField GRANTOR = createField("GRANTOR", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTEE. - */ - public final TableField GRANTEE = createField("GRANTEE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_CATALOG. - */ - public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.PRIVILEGE_TYPE. - */ - public final TableField PRIVILEGE_TYPE = createField("PRIVILEGE_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLE_PRIVILEGES.IS_GRANTABLE. - */ - public final TableField IS_GRANTABLE = createField("IS_GRANTABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.TABLE_PRIVILEGES table reference - */ - public TablePrivileges() { - this("TABLE_PRIVILEGES", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.TABLE_PRIVILEGES table reference - */ - public TablePrivileges(String alias) { - this(alias, TABLE_PRIVILEGES); - } - - private TablePrivileges(String alias, Table aliased) { - this(alias, aliased, null); - } - - private TablePrivileges(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public TablePrivileges as(String alias) { - return new TablePrivileges(alias, this); - } - - /** - * Rename this table - */ - public TablePrivileges rename(String name) { - return new TablePrivileges(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TableTypes.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TableTypes.java deleted file mode 100644 index 6901b10786..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TableTypes.java +++ /dev/null @@ -1,87 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.TableTypesRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class TableTypes extends TableImpl { - - private static final long serialVersionUID = 676525061; - - /** - * The reference instance of INFORMATION_SCHEMA.TABLE_TYPES - */ - public static final TableTypes TABLE_TYPES = new TableTypes(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return TableTypesRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.TABLE_TYPES.TYPE. - */ - public final TableField TYPE = createField("TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * Create a INFORMATION_SCHEMA.TABLE_TYPES table reference - */ - public TableTypes() { - this("TABLE_TYPES", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.TABLE_TYPES table reference - */ - public TableTypes(String alias) { - this(alias, TABLE_TYPES); - } - - private TableTypes(String alias, Table aliased) { - this(alias, aliased, null); - } - - private TableTypes(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public TableTypes as(String alias) { - return new TableTypes(alias, this); - } - - /** - * Rename this table - */ - public TableTypes rename(String name) { - return new TableTypes(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Tables.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Tables.java deleted file mode 100644 index f0927166a5..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Tables.java +++ /dev/null @@ -1,142 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.TablesRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Tables extends TableImpl { - - private static final long serialVersionUID = 123051350; - - /** - * The reference instance of INFORMATION_SCHEMA.TABLES - */ - public static final Tables TABLES = new Tables(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return TablesRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.TABLES.TABLE_CATALOG. - */ - public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.TABLE_TYPE. - */ - public final TableField TABLE_TYPE = createField("TABLE_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.STORAGE_TYPE. - */ - public final TableField STORAGE_TYPE = createField("STORAGE_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.SQL. - */ - public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.LAST_MODIFICATION. - */ - public final TableField LAST_MODIFICATION = createField("LAST_MODIFICATION", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.TYPE_NAME. - */ - public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.TABLE_CLASS. - */ - public final TableField TABLE_CLASS = createField("TABLE_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TABLES.ROW_COUNT_ESTIMATE. - */ - public final TableField ROW_COUNT_ESTIMATE = createField("ROW_COUNT_ESTIMATE", org.jooq.impl.SQLDataType.BIGINT, this, ""); - - /** - * Create a INFORMATION_SCHEMA.TABLES table reference - */ - public Tables() { - this("TABLES", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.TABLES table reference - */ - public Tables(String alias) { - this(alias, TABLES); - } - - private Tables(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Tables(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Tables as(String alias) { - return new Tables(alias, this); - } - - /** - * Rename this table - */ - public Tables rename(String name) { - return new Tables(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Triggers.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Triggers.java deleted file mode 100644 index 375478af7a..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Triggers.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.TriggersRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Triggers extends TableImpl { - - private static final long serialVersionUID = 376103066; - - /** - * The reference instance of INFORMATION_SCHEMA.TRIGGERS - */ - public static final Triggers TRIGGERS = new Triggers(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return TriggersRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.TRIGGER_CATALOG. - */ - public final TableField TRIGGER_CATALOG = createField("TRIGGER_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.TRIGGER_SCHEMA. - */ - public final TableField TRIGGER_SCHEMA = createField("TRIGGER_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.TRIGGER_NAME. - */ - public final TableField TRIGGER_NAME = createField("TRIGGER_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.TRIGGER_TYPE. - */ - public final TableField TRIGGER_TYPE = createField("TRIGGER_TYPE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.TABLE_CATALOG. - */ - public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.BEFORE. - */ - public final TableField BEFORE = createField("BEFORE", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.JAVA_CLASS. - */ - public final TableField JAVA_CLASS = createField("JAVA_CLASS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.QUEUE_SIZE. - */ - public final TableField QUEUE_SIZE = createField("QUEUE_SIZE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.NO_WAIT. - */ - public final TableField NO_WAIT = createField("NO_WAIT", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.SQL. - */ - public final TableField SQL = createField("SQL", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TRIGGERS.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.TRIGGERS table reference - */ - public Triggers() { - this("TRIGGERS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.TRIGGERS table reference - */ - public Triggers(String alias) { - this(alias, TRIGGERS); - } - - private Triggers(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Triggers(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Triggers as(String alias) { - return new Triggers(alias, this); - } - - /** - * Rename this table - */ - public Triggers rename(String name) { - return new Triggers(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TypeInfo.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TypeInfo.java deleted file mode 100644 index 3db18ebee4..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/TypeInfo.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.TypeInfoRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class TypeInfo extends TableImpl { - - private static final long serialVersionUID = -242556633; - - /** - * The reference instance of INFORMATION_SCHEMA.TYPE_INFO - */ - public static final TypeInfo TYPE_INFO = new TypeInfo(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return TypeInfoRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.TYPE_NAME. - */ - public final TableField TYPE_NAME = createField("TYPE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.DATA_TYPE. - */ - public final TableField DATA_TYPE = createField("DATA_TYPE", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.PRECISION. - */ - public final TableField PRECISION = createField("PRECISION", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.PREFIX. - */ - public final TableField PREFIX = createField("PREFIX", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.SUFFIX. - */ - public final TableField SUFFIX = createField("SUFFIX", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.PARAMS. - */ - public final TableField PARAMS = createField("PARAMS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.AUTO_INCREMENT. - */ - public final TableField AUTO_INCREMENT = createField("AUTO_INCREMENT", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.MINIMUM_SCALE. - */ - public final TableField MINIMUM_SCALE = createField("MINIMUM_SCALE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.MAXIMUM_SCALE. - */ - public final TableField MAXIMUM_SCALE = createField("MAXIMUM_SCALE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.RADIX. - */ - public final TableField RADIX = createField("RADIX", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.POS. - */ - public final TableField POS = createField("POS", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.CASE_SENSITIVE. - */ - public final TableField CASE_SENSITIVE = createField("CASE_SENSITIVE", org.jooq.impl.SQLDataType.BOOLEAN, this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.NULLABLE. - */ - public final TableField NULLABLE = createField("NULLABLE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * The column INFORMATION_SCHEMA.TYPE_INFO.SEARCHABLE. - */ - public final TableField SEARCHABLE = createField("SEARCHABLE", org.jooq.impl.SQLDataType.SMALLINT, this, ""); - - /** - * Create a INFORMATION_SCHEMA.TYPE_INFO table reference - */ - public TypeInfo() { - this("TYPE_INFO", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.TYPE_INFO table reference - */ - public TypeInfo(String alias) { - this(alias, TYPE_INFO); - } - - private TypeInfo(String alias, Table aliased) { - this(alias, aliased, null); - } - - private TypeInfo(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfo as(String alias) { - return new TypeInfo(alias, this); - } - - /** - * Rename this table - */ - public TypeInfo rename(String name) { - return new TypeInfo(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Users.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Users.java deleted file mode 100644 index 417382aed0..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Users.java +++ /dev/null @@ -1,102 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.UsersRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Users extends TableImpl { - - private static final long serialVersionUID = 1971797833; - - /** - * The reference instance of INFORMATION_SCHEMA.USERS - */ - public static final Users USERS = new Users(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return UsersRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.USERS.NAME. - */ - public final TableField NAME = createField("NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.USERS.ADMIN. - */ - public final TableField ADMIN = createField("ADMIN", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.USERS.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.USERS.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.USERS table reference - */ - public Users() { - this("USERS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.USERS table reference - */ - public Users(String alias) { - this(alias, USERS); - } - - private Users(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Users(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Users as(String alias) { - return new Users(alias, this); - } - - /** - * Rename this table - */ - public Users rename(String name) { - return new Users(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Views.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Views.java deleted file mode 100644 index 54ffe377d7..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/Views.java +++ /dev/null @@ -1,127 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables; - - -import com.baeldung.jooq.introduction.db.information_schema.InformationSchema; -import com.baeldung.jooq.introduction.db.information_schema.tables.records.ViewsRecord; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Views extends TableImpl { - - private static final long serialVersionUID = 1565009994; - - /** - * The reference instance of INFORMATION_SCHEMA.VIEWS - */ - public static final Views VIEWS = new Views(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return ViewsRecord.class; - } - - /** - * The column INFORMATION_SCHEMA.VIEWS.TABLE_CATALOG. - */ - public final TableField TABLE_CATALOG = createField("TABLE_CATALOG", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.VIEWS.TABLE_SCHEMA. - */ - public final TableField TABLE_SCHEMA = createField("TABLE_SCHEMA", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.VIEWS.TABLE_NAME. - */ - public final TableField TABLE_NAME = createField("TABLE_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION. - */ - public final TableField VIEW_DEFINITION = createField("VIEW_DEFINITION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.VIEWS.CHECK_OPTION. - */ - public final TableField CHECK_OPTION = createField("CHECK_OPTION", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.VIEWS.IS_UPDATABLE. - */ - public final TableField IS_UPDATABLE = createField("IS_UPDATABLE", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.VIEWS.STATUS. - */ - public final TableField STATUS = createField("STATUS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.VIEWS.REMARKS. - */ - public final TableField REMARKS = createField("REMARKS", org.jooq.impl.SQLDataType.VARCHAR.length(2147483647), this, ""); - - /** - * The column INFORMATION_SCHEMA.VIEWS.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER, this, ""); - - /** - * Create a INFORMATION_SCHEMA.VIEWS table reference - */ - public Views() { - this("VIEWS", null); - } - - /** - * Create an aliased INFORMATION_SCHEMA.VIEWS table reference - */ - public Views(String alias) { - this(alias, VIEWS); - } - - private Views(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Views(String alias, Table aliased, Field[] parameters) { - super(alias, InformationSchema.INFORMATION_SCHEMA, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public Views as(String alias) { - return new Views(alias, this); - } - - /** - * Rename this table - */ - public Views rename(String name) { - return new Views(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CatalogsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CatalogsRecord.java deleted file mode 100644 index d59728bf01..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CatalogsRecord.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Catalogs; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record1; -import org.jooq.Row1; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class CatalogsRecord extends TableRecordImpl implements Record1 { - - private static final long serialVersionUID = -2119003002; - - /** - * Setter for INFORMATION_SCHEMA.CATALOGS.CATALOG_NAME. - */ - public void setCatalogName(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CATALOGS.CATALOG_NAME. - */ - public String getCatalogName() { - return (String) getValue(0); - } - - // ------------------------------------------------------------------------- - // Record1 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row1 fieldsRow() { - return (Row1) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row1 valuesRow() { - return (Row1) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Catalogs.CATALOGS.CATALOG_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getCatalogName(); - } - - /** - * {@inheritDoc} - */ - @Override - public CatalogsRecord value1(String value) { - setCatalogName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CatalogsRecord values(String value1) { - value1(value1); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached CatalogsRecord - */ - public CatalogsRecord() { - super(Catalogs.CATALOGS); - } - - /** - * Create a detached, initialised CatalogsRecord - */ - public CatalogsRecord(String catalogName) { - super(Catalogs.CATALOGS); - - setValue(0, catalogName); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CollationsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CollationsRecord.java deleted file mode 100644 index e0abb49012..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CollationsRecord.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Collations; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record2; -import org.jooq.Row2; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class CollationsRecord extends TableRecordImpl implements Record2 { - - private static final long serialVersionUID = -890210086; - - /** - * Setter for INFORMATION_SCHEMA.COLLATIONS.NAME. - */ - public void setName(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLLATIONS.NAME. - */ - public String getName() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.COLLATIONS.KEY. - */ - public void setKey(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLLATIONS.KEY. - */ - public String getKey() { - return (String) getValue(1); - } - - // ------------------------------------------------------------------------- - // Record2 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row2 fieldsRow() { - return (Row2) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row2 valuesRow() { - return (Row2) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Collations.COLLATIONS.NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Collations.COLLATIONS.KEY; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getKey(); - } - - /** - * {@inheritDoc} - */ - @Override - public CollationsRecord value1(String value) { - setName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CollationsRecord value2(String value) { - setKey(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CollationsRecord values(String value1, String value2) { - value1(value1); - value2(value2); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached CollationsRecord - */ - public CollationsRecord() { - super(Collations.COLLATIONS); - } - - /** - * Create a detached, initialised CollationsRecord - */ - public CollationsRecord(String name, String key) { - super(Collations.COLLATIONS); - - setValue(0, name); - setValue(1, key); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnPrivilegesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnPrivilegesRecord.java deleted file mode 100644 index 105348a339..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnPrivilegesRecord.java +++ /dev/null @@ -1,406 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.ColumnPrivileges; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record8; -import org.jooq.Row8; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class ColumnPrivilegesRecord extends TableRecordImpl implements Record8 { - - private static final long serialVersionUID = 1884367853; - - /** - * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTOR. - */ - public void setGrantor(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTOR. - */ - public String getGrantor() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTEE. - */ - public void setGrantee(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.GRANTEE. - */ - public String getGrantee() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_CATALOG. - */ - public void setTableCatalog(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_CATALOG. - */ - public String getTableCatalog() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.COLUMN_NAME. - */ - public void setColumnName(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.COLUMN_NAME. - */ - public String getColumnName() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.PRIVILEGE_TYPE. - */ - public void setPrivilegeType(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.PRIVILEGE_TYPE. - */ - public String getPrivilegeType() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.IS_GRANTABLE. - */ - public void setIsGrantable(String value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMN_PRIVILEGES.IS_GRANTABLE. - */ - public String getIsGrantable() { - return (String) getValue(7); - } - - // ------------------------------------------------------------------------- - // Record8 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row8 fieldsRow() { - return (Row8) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row8 valuesRow() { - return (Row8) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return ColumnPrivileges.COLUMN_PRIVILEGES.GRANTOR; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return ColumnPrivileges.COLUMN_PRIVILEGES.GRANTEE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return ColumnPrivileges.COLUMN_PRIVILEGES.TABLE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return ColumnPrivileges.COLUMN_PRIVILEGES.TABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return ColumnPrivileges.COLUMN_PRIVILEGES.TABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return ColumnPrivileges.COLUMN_PRIVILEGES.COLUMN_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return ColumnPrivileges.COLUMN_PRIVILEGES.PRIVILEGE_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return ColumnPrivileges.COLUMN_PRIVILEGES.IS_GRANTABLE; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getGrantor(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getGrantee(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getTableCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getTableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getTableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getColumnName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getPrivilegeType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value8() { - return getIsGrantable(); - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivilegesRecord value1(String value) { - setGrantor(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivilegesRecord value2(String value) { - setGrantee(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivilegesRecord value3(String value) { - setTableCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivilegesRecord value4(String value) { - setTableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivilegesRecord value5(String value) { - setTableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivilegesRecord value6(String value) { - setColumnName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivilegesRecord value7(String value) { - setPrivilegeType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivilegesRecord value8(String value) { - setIsGrantable(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ColumnPrivilegesRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, String value8) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached ColumnPrivilegesRecord - */ - public ColumnPrivilegesRecord() { - super(ColumnPrivileges.COLUMN_PRIVILEGES); - } - - /** - * Create a detached, initialised ColumnPrivilegesRecord - */ - public ColumnPrivilegesRecord(String grantor, String grantee, String tableCatalog, String tableSchema, String tableName, String columnName, String privilegeType, String isGrantable) { - super(ColumnPrivileges.COLUMN_PRIVILEGES); - - setValue(0, grantor); - setValue(1, grantee); - setValue(2, tableCatalog); - setValue(3, tableSchema); - setValue(4, tableName); - setValue(5, columnName); - setValue(6, privilegeType); - setValue(7, isGrantable); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnsRecord.java deleted file mode 100644 index 63a83b0056..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ColumnsRecord.java +++ /dev/null @@ -1,392 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Columns; - -import javax.annotation.Generated; - -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class ColumnsRecord extends TableRecordImpl { - - private static final long serialVersionUID = 1850723283; - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG. - */ - public void setTableCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.TABLE_CATALOG. - */ - public String getTableCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME. - */ - public void setColumnName(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.COLUMN_NAME. - */ - public String getColumnName() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION. - */ - public void setOrdinalPosition(Integer value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION. - */ - public Integer getOrdinalPosition() { - return (Integer) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT. - */ - public void setColumnDefault(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.COLUMN_DEFAULT. - */ - public String getColumnDefault() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.IS_NULLABLE. - */ - public void setIsNullable(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.IS_NULLABLE. - */ - public String getIsNullable() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.DATA_TYPE. - */ - public void setDataType(Integer value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.DATA_TYPE. - */ - public Integer getDataType() { - return (Integer) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_MAXIMUM_LENGTH. - */ - public void setCharacterMaximumLength(Integer value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_MAXIMUM_LENGTH. - */ - public Integer getCharacterMaximumLength() { - return (Integer) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_OCTET_LENGTH. - */ - public void setCharacterOctetLength(Integer value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_OCTET_LENGTH. - */ - public Integer getCharacterOctetLength() { - return (Integer) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION. - */ - public void setNumericPrecision(Integer value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION. - */ - public Integer getNumericPrecision() { - return (Integer) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION_RADIX. - */ - public void setNumericPrecisionRadix(Integer value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_PRECISION_RADIX. - */ - public Integer getNumericPrecisionRadix() { - return (Integer) getValue(11); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_SCALE. - */ - public void setNumericScale(Integer value) { - setValue(12, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.NUMERIC_SCALE. - */ - public Integer getNumericScale() { - return (Integer) getValue(12); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_SET_NAME. - */ - public void setCharacterSetName(String value) { - setValue(13, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.CHARACTER_SET_NAME. - */ - public String getCharacterSetName() { - return (String) getValue(13); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.COLLATION_NAME. - */ - public void setCollationName(String value) { - setValue(14, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.COLLATION_NAME. - */ - public String getCollationName() { - return (String) getValue(14); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.TYPE_NAME. - */ - public void setTypeName(String value) { - setValue(15, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.TYPE_NAME. - */ - public String getTypeName() { - return (String) getValue(15); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.NULLABLE. - */ - public void setNullable(Integer value) { - setValue(16, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.NULLABLE. - */ - public Integer getNullable() { - return (Integer) getValue(16); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.IS_COMPUTED. - */ - public void setIsComputed(Boolean value) { - setValue(17, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.IS_COMPUTED. - */ - public Boolean getIsComputed() { - return (Boolean) getValue(17); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.SELECTIVITY. - */ - public void setSelectivity(Integer value) { - setValue(18, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.SELECTIVITY. - */ - public Integer getSelectivity() { - return (Integer) getValue(18); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.CHECK_CONSTRAINT. - */ - public void setCheckConstraint(String value) { - setValue(19, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.CHECK_CONSTRAINT. - */ - public String getCheckConstraint() { - return (String) getValue(19); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.SEQUENCE_NAME. - */ - public void setSequenceName(String value) { - setValue(20, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.SEQUENCE_NAME. - */ - public String getSequenceName() { - return (String) getValue(20); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.REMARKS. - */ - public void setRemarks(String value) { - setValue(21, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.REMARKS. - */ - public String getRemarks() { - return (String) getValue(21); - } - - /** - * Setter for INFORMATION_SCHEMA.COLUMNS.SOURCE_DATA_TYPE. - */ - public void setSourceDataType(Short value) { - setValue(22, value); - } - - /** - * Getter for INFORMATION_SCHEMA.COLUMNS.SOURCE_DATA_TYPE. - */ - public Short getSourceDataType() { - return (Short) getValue(22); - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached ColumnsRecord - */ - public ColumnsRecord() { - super(Columns.COLUMNS); - } - - /** - * Create a detached, initialised ColumnsRecord - */ - public ColumnsRecord(String tableCatalog, String tableSchema, String tableName, String columnName, Integer ordinalPosition, String columnDefault, String isNullable, Integer dataType, Integer characterMaximumLength, Integer characterOctetLength, Integer numericPrecision, Integer numericPrecisionRadix, Integer numericScale, String characterSetName, String collationName, String typeName, Integer nullable, Boolean isComputed, Integer selectivity, String checkConstraint, String sequenceName, String remarks, Short sourceDataType) { - super(Columns.COLUMNS); - - setValue(0, tableCatalog); - setValue(1, tableSchema); - setValue(2, tableName); - setValue(3, columnName); - setValue(4, ordinalPosition); - setValue(5, columnDefault); - setValue(6, isNullable); - setValue(7, dataType); - setValue(8, characterMaximumLength); - setValue(9, characterOctetLength); - setValue(10, numericPrecision); - setValue(11, numericPrecisionRadix); - setValue(12, numericScale); - setValue(13, characterSetName); - setValue(14, collationName); - setValue(15, typeName); - setValue(16, nullable); - setValue(17, isComputed); - setValue(18, selectivity); - setValue(19, checkConstraint); - setValue(20, sequenceName); - setValue(21, remarks); - setValue(22, sourceDataType); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstantsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstantsRecord.java deleted file mode 100644 index b1225bd747..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstantsRecord.java +++ /dev/null @@ -1,365 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Constants; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record7; -import org.jooq.Row7; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class ConstantsRecord extends TableRecordImpl implements Record7 { - - private static final long serialVersionUID = -775500532; - - /** - * Setter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_CATALOG. - */ - public void setConstantCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_CATALOG. - */ - public String getConstantCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_SCHEMA. - */ - public void setConstantSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_SCHEMA. - */ - public String getConstantSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_NAME. - */ - public void setConstantName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTANTS.CONSTANT_NAME. - */ - public String getConstantName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTANTS.DATA_TYPE. - */ - public void setDataType(Integer value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTANTS.DATA_TYPE. - */ - public Integer getDataType() { - return (Integer) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTANTS.REMARKS. - */ - public void setRemarks(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTANTS.REMARKS. - */ - public String getRemarks() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTANTS.SQL. - */ - public void setSql(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTANTS.SQL. - */ - public String getSql() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTANTS.ID. - */ - public void setId(Integer value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTANTS.ID. - */ - public Integer getId() { - return (Integer) getValue(6); - } - - // ------------------------------------------------------------------------- - // Record7 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row7 fieldsRow() { - return (Row7) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row7 valuesRow() { - return (Row7) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Constants.CONSTANTS.CONSTANT_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Constants.CONSTANTS.CONSTANT_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Constants.CONSTANTS.CONSTANT_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Constants.CONSTANTS.DATA_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Constants.CONSTANTS.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Constants.CONSTANTS.SQL; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Constants.CONSTANTS.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getConstantCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getConstantSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getConstantName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value4() { - return getDataType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getSql(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value7() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public ConstantsRecord value1(String value) { - setConstantCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstantsRecord value2(String value) { - setConstantSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstantsRecord value3(String value) { - setConstantName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstantsRecord value4(Integer value) { - setDataType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstantsRecord value5(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstantsRecord value6(String value) { - setSql(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstantsRecord value7(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstantsRecord values(String value1, String value2, String value3, Integer value4, String value5, String value6, Integer value7) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached ConstantsRecord - */ - public ConstantsRecord() { - super(Constants.CONSTANTS); - } - - /** - * Create a detached, initialised ConstantsRecord - */ - public ConstantsRecord(String constantCatalog, String constantSchema, String constantName, Integer dataType, String remarks, String sql, Integer id) { - super(Constants.CONSTANTS); - - setValue(0, constantCatalog); - setValue(1, constantSchema); - setValue(2, constantName); - setValue(3, dataType); - setValue(4, remarks); - setValue(5, sql); - setValue(6, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstraintsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstraintsRecord.java deleted file mode 100644 index f1727739a2..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ConstraintsRecord.java +++ /dev/null @@ -1,611 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Constraints; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record13; -import org.jooq.Row13; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class ConstraintsRecord extends TableRecordImpl implements Record13 { - - private static final long serialVersionUID = 759662490; - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_CATALOG. - */ - public void setConstraintCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_CATALOG. - */ - public String getConstraintCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_SCHEMA. - */ - public void setConstraintSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_SCHEMA. - */ - public String getConstraintSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_NAME. - */ - public void setConstraintName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_NAME. - */ - public String getConstraintName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_TYPE. - */ - public void setConstraintType(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CONSTRAINT_TYPE. - */ - public String getConstraintType() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_CATALOG. - */ - public void setTableCatalog(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_CATALOG. - */ - public String getTableCatalog() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.UNIQUE_INDEX_NAME. - */ - public void setUniqueIndexName(String value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.UNIQUE_INDEX_NAME. - */ - public String getUniqueIndexName() { - return (String) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.CHECK_EXPRESSION. - */ - public void setCheckExpression(String value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.CHECK_EXPRESSION. - */ - public String getCheckExpression() { - return (String) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.COLUMN_LIST. - */ - public void setColumnList(String value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.COLUMN_LIST. - */ - public String getColumnList() { - return (String) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.REMARKS. - */ - public void setRemarks(String value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.REMARKS. - */ - public String getRemarks() { - return (String) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.SQL. - */ - public void setSql(String value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.SQL. - */ - public String getSql() { - return (String) getValue(11); - } - - /** - * Setter for INFORMATION_SCHEMA.CONSTRAINTS.ID. - */ - public void setId(Integer value) { - setValue(12, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CONSTRAINTS.ID. - */ - public Integer getId() { - return (Integer) getValue(12); - } - - // ------------------------------------------------------------------------- - // Record13 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row13 fieldsRow() { - return (Row13) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row13 valuesRow() { - return (Row13) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Constraints.CONSTRAINTS.CONSTRAINT_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Constraints.CONSTRAINTS.CONSTRAINT_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Constraints.CONSTRAINTS.CONSTRAINT_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Constraints.CONSTRAINTS.CONSTRAINT_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Constraints.CONSTRAINTS.TABLE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Constraints.CONSTRAINTS.TABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Constraints.CONSTRAINTS.TABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return Constraints.CONSTRAINTS.UNIQUE_INDEX_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return Constraints.CONSTRAINTS.CHECK_EXPRESSION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return Constraints.CONSTRAINTS.COLUMN_LIST; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return Constraints.CONSTRAINTS.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return Constraints.CONSTRAINTS.SQL; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field13() { - return Constraints.CONSTRAINTS.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getConstraintCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getConstraintSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getConstraintName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getConstraintType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getTableCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getTableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getTableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value8() { - return getUniqueIndexName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value9() { - return getCheckExpression(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value10() { - return getColumnList(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value11() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value12() { - return getSql(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value13() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value1(String value) { - setConstraintCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value2(String value) { - setConstraintSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value3(String value) { - setConstraintName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value4(String value) { - setConstraintType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value5(String value) { - setTableCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value6(String value) { - setTableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value7(String value) { - setTableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value8(String value) { - setUniqueIndexName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value9(String value) { - setCheckExpression(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value10(String value) { - setColumnList(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value11(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value12(String value) { - setSql(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord value13(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ConstraintsRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, String value8, String value9, String value10, String value11, String value12, Integer value13) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - value13(value13); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached ConstraintsRecord - */ - public ConstraintsRecord() { - super(Constraints.CONSTRAINTS); - } - - /** - * Create a detached, initialised ConstraintsRecord - */ - public ConstraintsRecord(String constraintCatalog, String constraintSchema, String constraintName, String constraintType, String tableCatalog, String tableSchema, String tableName, String uniqueIndexName, String checkExpression, String columnList, String remarks, String sql, Integer id) { - super(Constraints.CONSTRAINTS); - - setValue(0, constraintCatalog); - setValue(1, constraintSchema); - setValue(2, constraintName); - setValue(3, constraintType); - setValue(4, tableCatalog); - setValue(5, tableSchema); - setValue(6, tableName); - setValue(7, uniqueIndexName); - setValue(8, checkExpression); - setValue(9, columnList); - setValue(10, remarks); - setValue(11, sql); - setValue(12, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CrossReferencesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CrossReferencesRecord.java deleted file mode 100644 index ab5ae9c2a3..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/CrossReferencesRecord.java +++ /dev/null @@ -1,652 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.CrossReferences; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record14; -import org.jooq.Row14; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class CrossReferencesRecord extends TableRecordImpl implements Record14 { - - private static final long serialVersionUID = -328289893; - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_CATALOG. - */ - public void setPktableCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_CATALOG. - */ - public String getPktableCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_SCHEMA. - */ - public void setPktableSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_SCHEMA. - */ - public String getPktableSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_NAME. - */ - public void setPktableName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKTABLE_NAME. - */ - public String getPktableName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKCOLUMN_NAME. - */ - public void setPkcolumnName(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PKCOLUMN_NAME. - */ - public String getPkcolumnName() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_CATALOG. - */ - public void setFktableCatalog(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_CATALOG. - */ - public String getFktableCatalog() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_SCHEMA. - */ - public void setFktableSchema(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_SCHEMA. - */ - public String getFktableSchema() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_NAME. - */ - public void setFktableName(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKTABLE_NAME. - */ - public String getFktableName() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKCOLUMN_NAME. - */ - public void setFkcolumnName(String value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FKCOLUMN_NAME. - */ - public String getFkcolumnName() { - return (String) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.ORDINAL_POSITION. - */ - public void setOrdinalPosition(Short value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.ORDINAL_POSITION. - */ - public Short getOrdinalPosition() { - return (Short) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.UPDATE_RULE. - */ - public void setUpdateRule(Short value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.UPDATE_RULE. - */ - public Short getUpdateRule() { - return (Short) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.DELETE_RULE. - */ - public void setDeleteRule(Short value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.DELETE_RULE. - */ - public Short getDeleteRule() { - return (Short) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.FK_NAME. - */ - public void setFkName(String value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.FK_NAME. - */ - public String getFkName() { - return (String) getValue(11); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.PK_NAME. - */ - public void setPkName(String value) { - setValue(12, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.PK_NAME. - */ - public String getPkName() { - return (String) getValue(12); - } - - /** - * Setter for INFORMATION_SCHEMA.CROSS_REFERENCES.DEFERRABILITY. - */ - public void setDeferrability(Short value) { - setValue(13, value); - } - - /** - * Getter for INFORMATION_SCHEMA.CROSS_REFERENCES.DEFERRABILITY. - */ - public Short getDeferrability() { - return (Short) getValue(13); - } - - // ------------------------------------------------------------------------- - // Record14 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row14 fieldsRow() { - return (Row14) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row14 valuesRow() { - return (Row14) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return CrossReferences.CROSS_REFERENCES.PKTABLE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return CrossReferences.CROSS_REFERENCES.PKTABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return CrossReferences.CROSS_REFERENCES.PKTABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return CrossReferences.CROSS_REFERENCES.PKCOLUMN_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return CrossReferences.CROSS_REFERENCES.FKTABLE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return CrossReferences.CROSS_REFERENCES.FKTABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return CrossReferences.CROSS_REFERENCES.FKTABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return CrossReferences.CROSS_REFERENCES.FKCOLUMN_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return CrossReferences.CROSS_REFERENCES.ORDINAL_POSITION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return CrossReferences.CROSS_REFERENCES.UPDATE_RULE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return CrossReferences.CROSS_REFERENCES.DELETE_RULE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return CrossReferences.CROSS_REFERENCES.FK_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field13() { - return CrossReferences.CROSS_REFERENCES.PK_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field14() { - return CrossReferences.CROSS_REFERENCES.DEFERRABILITY; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getPktableCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getPktableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getPktableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getPkcolumnName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getFktableCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getFktableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getFktableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value8() { - return getFkcolumnName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value9() { - return getOrdinalPosition(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value10() { - return getUpdateRule(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value11() { - return getDeleteRule(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value12() { - return getFkName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value13() { - return getPkName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value14() { - return getDeferrability(); - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value1(String value) { - setPktableCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value2(String value) { - setPktableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value3(String value) { - setPktableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value4(String value) { - setPkcolumnName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value5(String value) { - setFktableCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value6(String value) { - setFktableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value7(String value) { - setFktableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value8(String value) { - setFkcolumnName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value9(Short value) { - setOrdinalPosition(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value10(Short value) { - setUpdateRule(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value11(Short value) { - setDeleteRule(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value12(String value) { - setFkName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value13(String value) { - setPkName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord value14(Short value) { - setDeferrability(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public CrossReferencesRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, String value8, Short value9, Short value10, Short value11, String value12, String value13, Short value14) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - value13(value13); - value14(value14); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached CrossReferencesRecord - */ - public CrossReferencesRecord() { - super(CrossReferences.CROSS_REFERENCES); - } - - /** - * Create a detached, initialised CrossReferencesRecord - */ - public CrossReferencesRecord(String pktableCatalog, String pktableSchema, String pktableName, String pkcolumnName, String fktableCatalog, String fktableSchema, String fktableName, String fkcolumnName, Short ordinalPosition, Short updateRule, Short deleteRule, String fkName, String pkName, Short deferrability) { - super(CrossReferences.CROSS_REFERENCES); - - setValue(0, pktableCatalog); - setValue(1, pktableSchema); - setValue(2, pktableName); - setValue(3, pkcolumnName); - setValue(4, fktableCatalog); - setValue(5, fktableSchema); - setValue(6, fktableName); - setValue(7, fkcolumnName); - setValue(8, ordinalPosition); - setValue(9, updateRule); - setValue(10, deleteRule); - setValue(11, fkName); - setValue(12, pkName); - setValue(13, deferrability); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/DomainsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/DomainsRecord.java deleted file mode 100644 index 7f3b812750..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/DomainsRecord.java +++ /dev/null @@ -1,652 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Domains; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record14; -import org.jooq.Row14; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class DomainsRecord extends TableRecordImpl implements Record14 { - - private static final long serialVersionUID = 1750298997; - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_CATALOG. - */ - public void setDomainCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_CATALOG. - */ - public String getDomainCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_SCHEMA. - */ - public void setDomainSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_SCHEMA. - */ - public String getDomainSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_NAME. - */ - public void setDomainName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.DOMAIN_NAME. - */ - public String getDomainName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.COLUMN_DEFAULT. - */ - public void setColumnDefault(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.COLUMN_DEFAULT. - */ - public String getColumnDefault() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.IS_NULLABLE. - */ - public void setIsNullable(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.IS_NULLABLE. - */ - public String getIsNullable() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.DATA_TYPE. - */ - public void setDataType(Integer value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.DATA_TYPE. - */ - public Integer getDataType() { - return (Integer) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.PRECISION. - */ - public void setPrecision(Integer value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.PRECISION. - */ - public Integer getPrecision() { - return (Integer) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.SCALE. - */ - public void setScale(Integer value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.SCALE. - */ - public Integer getScale() { - return (Integer) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.TYPE_NAME. - */ - public void setTypeName(String value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.TYPE_NAME. - */ - public String getTypeName() { - return (String) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.SELECTIVITY. - */ - public void setSelectivity(Integer value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.SELECTIVITY. - */ - public Integer getSelectivity() { - return (Integer) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.CHECK_CONSTRAINT. - */ - public void setCheckConstraint(String value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.CHECK_CONSTRAINT. - */ - public String getCheckConstraint() { - return (String) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.REMARKS. - */ - public void setRemarks(String value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.REMARKS. - */ - public String getRemarks() { - return (String) getValue(11); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.SQL. - */ - public void setSql(String value) { - setValue(12, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.SQL. - */ - public String getSql() { - return (String) getValue(12); - } - - /** - * Setter for INFORMATION_SCHEMA.DOMAINS.ID. - */ - public void setId(Integer value) { - setValue(13, value); - } - - /** - * Getter for INFORMATION_SCHEMA.DOMAINS.ID. - */ - public Integer getId() { - return (Integer) getValue(13); - } - - // ------------------------------------------------------------------------- - // Record14 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row14 fieldsRow() { - return (Row14) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row14 valuesRow() { - return (Row14) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Domains.DOMAINS.DOMAIN_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Domains.DOMAINS.DOMAIN_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Domains.DOMAINS.DOMAIN_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Domains.DOMAINS.COLUMN_DEFAULT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Domains.DOMAINS.IS_NULLABLE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Domains.DOMAINS.DATA_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Domains.DOMAINS.PRECISION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return Domains.DOMAINS.SCALE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return Domains.DOMAINS.TYPE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return Domains.DOMAINS.SELECTIVITY; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return Domains.DOMAINS.CHECK_CONSTRAINT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return Domains.DOMAINS.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field13() { - return Domains.DOMAINS.SQL; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field14() { - return Domains.DOMAINS.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getDomainCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getDomainSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getDomainName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getColumnDefault(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getIsNullable(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value6() { - return getDataType(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value7() { - return getPrecision(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value8() { - return getScale(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value9() { - return getTypeName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value10() { - return getSelectivity(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value11() { - return getCheckConstraint(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value12() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value13() { - return getSql(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value14() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value1(String value) { - setDomainCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value2(String value) { - setDomainSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value3(String value) { - setDomainName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value4(String value) { - setColumnDefault(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value5(String value) { - setIsNullable(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value6(Integer value) { - setDataType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value7(Integer value) { - setPrecision(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value8(Integer value) { - setScale(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value9(String value) { - setTypeName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value10(Integer value) { - setSelectivity(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value11(String value) { - setCheckConstraint(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value12(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value13(String value) { - setSql(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord value14(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public DomainsRecord values(String value1, String value2, String value3, String value4, String value5, Integer value6, Integer value7, Integer value8, String value9, Integer value10, String value11, String value12, String value13, Integer value14) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - value13(value13); - value14(value14); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached DomainsRecord - */ - public DomainsRecord() { - super(Domains.DOMAINS); - } - - /** - * Create a detached, initialised DomainsRecord - */ - public DomainsRecord(String domainCatalog, String domainSchema, String domainName, String columnDefault, String isNullable, Integer dataType, Integer precision, Integer scale, String typeName, Integer selectivity, String checkConstraint, String remarks, String sql, Integer id) { - super(Domains.DOMAINS); - - setValue(0, domainCatalog); - setValue(1, domainSchema); - setValue(2, domainName); - setValue(3, columnDefault); - setValue(4, isNullable); - setValue(5, dataType); - setValue(6, precision); - setValue(7, scale); - setValue(8, typeName); - setValue(9, selectivity); - setValue(10, checkConstraint); - setValue(11, remarks); - setValue(12, sql); - setValue(13, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionAliasesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionAliasesRecord.java deleted file mode 100644 index 7c095555bc..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionAliasesRecord.java +++ /dev/null @@ -1,570 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionAliases; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record12; -import org.jooq.Row12; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class FunctionAliasesRecord extends TableRecordImpl implements Record12 { - - private static final long serialVersionUID = -788602015; - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_CATALOG. - */ - public void setAliasCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_CATALOG. - */ - public String getAliasCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_SCHEMA. - */ - public void setAliasSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_SCHEMA. - */ - public String getAliasSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_NAME. - */ - public void setAliasName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ALIAS_NAME. - */ - public String getAliasName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_CLASS. - */ - public void setJavaClass(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_CLASS. - */ - public String getJavaClass() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_METHOD. - */ - public void setJavaMethod(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.JAVA_METHOD. - */ - public String getJavaMethod() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.DATA_TYPE. - */ - public void setDataType(Integer value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.DATA_TYPE. - */ - public Integer getDataType() { - return (Integer) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.TYPE_NAME. - */ - public void setTypeName(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.TYPE_NAME. - */ - public String getTypeName() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.COLUMN_COUNT. - */ - public void setColumnCount(Integer value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.COLUMN_COUNT. - */ - public Integer getColumnCount() { - return (Integer) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.RETURNS_RESULT. - */ - public void setReturnsResult(Short value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.RETURNS_RESULT. - */ - public Short getReturnsResult() { - return (Short) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.REMARKS. - */ - public void setRemarks(String value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.REMARKS. - */ - public String getRemarks() { - return (String) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ID. - */ - public void setId(Integer value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.ID. - */ - public Integer getId() { - return (Integer) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_ALIASES.SOURCE. - */ - public void setSource(String value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_ALIASES.SOURCE. - */ - public String getSource() { - return (String) getValue(11); - } - - // ------------------------------------------------------------------------- - // Record12 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row12 fieldsRow() { - return (Row12) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row12 valuesRow() { - return (Row12) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return FunctionAliases.FUNCTION_ALIASES.ALIAS_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return FunctionAliases.FUNCTION_ALIASES.ALIAS_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return FunctionAliases.FUNCTION_ALIASES.ALIAS_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return FunctionAliases.FUNCTION_ALIASES.JAVA_CLASS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return FunctionAliases.FUNCTION_ALIASES.JAVA_METHOD; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return FunctionAliases.FUNCTION_ALIASES.DATA_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return FunctionAliases.FUNCTION_ALIASES.TYPE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return FunctionAliases.FUNCTION_ALIASES.COLUMN_COUNT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return FunctionAliases.FUNCTION_ALIASES.RETURNS_RESULT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return FunctionAliases.FUNCTION_ALIASES.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return FunctionAliases.FUNCTION_ALIASES.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return FunctionAliases.FUNCTION_ALIASES.SOURCE; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getAliasCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getAliasSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getAliasName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getJavaClass(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getJavaMethod(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value6() { - return getDataType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getTypeName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value8() { - return getColumnCount(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value9() { - return getReturnsResult(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value10() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value11() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value12() { - return getSource(); - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value1(String value) { - setAliasCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value2(String value) { - setAliasSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value3(String value) { - setAliasName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value4(String value) { - setJavaClass(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value5(String value) { - setJavaMethod(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value6(Integer value) { - setDataType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value7(String value) { - setTypeName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value8(Integer value) { - setColumnCount(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value9(Short value) { - setReturnsResult(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value10(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value11(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord value12(String value) { - setSource(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionAliasesRecord values(String value1, String value2, String value3, String value4, String value5, Integer value6, String value7, Integer value8, Short value9, String value10, Integer value11, String value12) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached FunctionAliasesRecord - */ - public FunctionAliasesRecord() { - super(FunctionAliases.FUNCTION_ALIASES); - } - - /** - * Create a detached, initialised FunctionAliasesRecord - */ - public FunctionAliasesRecord(String aliasCatalog, String aliasSchema, String aliasName, String javaClass, String javaMethod, Integer dataType, String typeName, Integer columnCount, Short returnsResult, String remarks, Integer id, String source) { - super(FunctionAliases.FUNCTION_ALIASES); - - setValue(0, aliasCatalog); - setValue(1, aliasSchema); - setValue(2, aliasName); - setValue(3, javaClass); - setValue(4, javaMethod); - setValue(5, dataType); - setValue(6, typeName); - setValue(7, columnCount); - setValue(8, returnsResult); - setValue(9, remarks); - setValue(10, id); - setValue(11, source); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionColumnsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionColumnsRecord.java deleted file mode 100644 index 3d0c81d2cd..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/FunctionColumnsRecord.java +++ /dev/null @@ -1,775 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.FunctionColumns; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record17; -import org.jooq.Row17; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class FunctionColumnsRecord extends TableRecordImpl implements Record17 { - - private static final long serialVersionUID = 1196004173; - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_CATALOG. - */ - public void setAliasCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_CATALOG. - */ - public String getAliasCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_SCHEMA. - */ - public void setAliasSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_SCHEMA. - */ - public String getAliasSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_NAME. - */ - public void setAliasName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.ALIAS_NAME. - */ - public String getAliasName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_CLASS. - */ - public void setJavaClass(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_CLASS. - */ - public String getJavaClass() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_METHOD. - */ - public void setJavaMethod(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.JAVA_METHOD. - */ - public String getJavaMethod() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_COUNT. - */ - public void setColumnCount(Integer value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_COUNT. - */ - public Integer getColumnCount() { - return (Integer) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.POS. - */ - public void setPos(Integer value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.POS. - */ - public Integer getPos() { - return (Integer) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_NAME. - */ - public void setColumnName(String value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_NAME. - */ - public String getColumnName() { - return (String) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.DATA_TYPE. - */ - public void setDataType(Integer value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.DATA_TYPE. - */ - public Integer getDataType() { - return (Integer) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.TYPE_NAME. - */ - public void setTypeName(String value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.TYPE_NAME. - */ - public String getTypeName() { - return (String) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.PRECISION. - */ - public void setPrecision(Integer value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.PRECISION. - */ - public Integer getPrecision() { - return (Integer) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.SCALE. - */ - public void setScale(Short value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.SCALE. - */ - public Short getScale() { - return (Short) getValue(11); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.RADIX. - */ - public void setRadix(Short value) { - setValue(12, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.RADIX. - */ - public Short getRadix() { - return (Short) getValue(12); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.NULLABLE. - */ - public void setNullable(Short value) { - setValue(13, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.NULLABLE. - */ - public Short getNullable() { - return (Short) getValue(13); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_TYPE. - */ - public void setColumnType(Short value) { - setValue(14, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_TYPE. - */ - public Short getColumnType() { - return (Short) getValue(14); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.REMARKS. - */ - public void setRemarks(String value) { - setValue(15, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.REMARKS. - */ - public String getRemarks() { - return (String) getValue(15); - } - - /** - * Setter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_DEFAULT. - */ - public void setColumnDefault(String value) { - setValue(16, value); - } - - /** - * Getter for INFORMATION_SCHEMA.FUNCTION_COLUMNS.COLUMN_DEFAULT. - */ - public String getColumnDefault() { - return (String) getValue(16); - } - - // ------------------------------------------------------------------------- - // Record17 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row17 fieldsRow() { - return (Row17) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row17 valuesRow() { - return (Row17) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return FunctionColumns.FUNCTION_COLUMNS.ALIAS_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return FunctionColumns.FUNCTION_COLUMNS.ALIAS_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return FunctionColumns.FUNCTION_COLUMNS.ALIAS_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return FunctionColumns.FUNCTION_COLUMNS.JAVA_CLASS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return FunctionColumns.FUNCTION_COLUMNS.JAVA_METHOD; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return FunctionColumns.FUNCTION_COLUMNS.COLUMN_COUNT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return FunctionColumns.FUNCTION_COLUMNS.POS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return FunctionColumns.FUNCTION_COLUMNS.COLUMN_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return FunctionColumns.FUNCTION_COLUMNS.DATA_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return FunctionColumns.FUNCTION_COLUMNS.TYPE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return FunctionColumns.FUNCTION_COLUMNS.PRECISION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return FunctionColumns.FUNCTION_COLUMNS.SCALE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field13() { - return FunctionColumns.FUNCTION_COLUMNS.RADIX; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field14() { - return FunctionColumns.FUNCTION_COLUMNS.NULLABLE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field15() { - return FunctionColumns.FUNCTION_COLUMNS.COLUMN_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field16() { - return FunctionColumns.FUNCTION_COLUMNS.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field17() { - return FunctionColumns.FUNCTION_COLUMNS.COLUMN_DEFAULT; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getAliasCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getAliasSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getAliasName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getJavaClass(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getJavaMethod(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value6() { - return getColumnCount(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value7() { - return getPos(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value8() { - return getColumnName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value9() { - return getDataType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value10() { - return getTypeName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value11() { - return getPrecision(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value12() { - return getScale(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value13() { - return getRadix(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value14() { - return getNullable(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value15() { - return getColumnType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value16() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value17() { - return getColumnDefault(); - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value1(String value) { - setAliasCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value2(String value) { - setAliasSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value3(String value) { - setAliasName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value4(String value) { - setJavaClass(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value5(String value) { - setJavaMethod(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value6(Integer value) { - setColumnCount(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value7(Integer value) { - setPos(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value8(String value) { - setColumnName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value9(Integer value) { - setDataType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value10(String value) { - setTypeName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value11(Integer value) { - setPrecision(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value12(Short value) { - setScale(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value13(Short value) { - setRadix(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value14(Short value) { - setNullable(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value15(Short value) { - setColumnType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value16(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord value17(String value) { - setColumnDefault(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public FunctionColumnsRecord values(String value1, String value2, String value3, String value4, String value5, Integer value6, Integer value7, String value8, Integer value9, String value10, Integer value11, Short value12, Short value13, Short value14, Short value15, String value16, String value17) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - value13(value13); - value14(value14); - value15(value15); - value16(value16); - value17(value17); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached FunctionColumnsRecord - */ - public FunctionColumnsRecord() { - super(FunctionColumns.FUNCTION_COLUMNS); - } - - /** - * Create a detached, initialised FunctionColumnsRecord - */ - public FunctionColumnsRecord(String aliasCatalog, String aliasSchema, String aliasName, String javaClass, String javaMethod, Integer columnCount, Integer pos, String columnName, Integer dataType, String typeName, Integer precision, Short scale, Short radix, Short nullable, Short columnType, String remarks, String columnDefault) { - super(FunctionColumns.FUNCTION_COLUMNS); - - setValue(0, aliasCatalog); - setValue(1, aliasSchema); - setValue(2, aliasName); - setValue(3, javaClass); - setValue(4, javaMethod); - setValue(5, columnCount); - setValue(6, pos); - setValue(7, columnName); - setValue(8, dataType); - setValue(9, typeName); - setValue(10, precision); - setValue(11, scale); - setValue(12, radix); - setValue(13, nullable); - setValue(14, columnType); - setValue(15, remarks); - setValue(16, columnDefault); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/HelpRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/HelpRecord.java deleted file mode 100644 index 1ed95e2ff7..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/HelpRecord.java +++ /dev/null @@ -1,283 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Help; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record5; -import org.jooq.Row5; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class HelpRecord extends TableRecordImpl implements Record5 { - - private static final long serialVersionUID = -1612064442; - - /** - * Setter for INFORMATION_SCHEMA.HELP.ID. - */ - public void setId(Integer value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.HELP.ID. - */ - public Integer getId() { - return (Integer) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.HELP.SECTION. - */ - public void setSection(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.HELP.SECTION. - */ - public String getSection() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.HELP.TOPIC. - */ - public void setTopic(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.HELP.TOPIC. - */ - public String getTopic() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.HELP.SYNTAX. - */ - public void setSyntax(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.HELP.SYNTAX. - */ - public String getSyntax() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.HELP.TEXT. - */ - public void setText(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.HELP.TEXT. - */ - public String getText() { - return (String) getValue(4); - } - - // ------------------------------------------------------------------------- - // Record5 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row5 fieldsRow() { - return (Row5) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row5 valuesRow() { - return (Row5) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Help.HELP.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Help.HELP.SECTION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Help.HELP.TOPIC; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Help.HELP.SYNTAX; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Help.HELP.TEXT; - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value1() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getSection(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getTopic(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getSyntax(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getText(); - } - - /** - * {@inheritDoc} - */ - @Override - public HelpRecord value1(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public HelpRecord value2(String value) { - setSection(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public HelpRecord value3(String value) { - setTopic(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public HelpRecord value4(String value) { - setSyntax(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public HelpRecord value5(String value) { - setText(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public HelpRecord values(Integer value1, String value2, String value3, String value4, String value5) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached HelpRecord - */ - public HelpRecord() { - super(Help.HELP); - } - - /** - * Create a detached, initialised HelpRecord - */ - public HelpRecord(Integer id, String section, String topic, String syntax, String text) { - super(Help.HELP); - - setValue(0, id); - setValue(1, section); - setValue(2, topic); - setValue(3, syntax); - setValue(4, text); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/InDoubtRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/InDoubtRecord.java deleted file mode 100644 index dd33d014fb..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/InDoubtRecord.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.InDoubt; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record2; -import org.jooq.Row2; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class InDoubtRecord extends TableRecordImpl implements Record2 { - - private static final long serialVersionUID = 115858325; - - /** - * Setter for INFORMATION_SCHEMA.IN_DOUBT.TRANSACTION. - */ - public void setTransaction(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.IN_DOUBT.TRANSACTION. - */ - public String getTransaction() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.IN_DOUBT.STATE. - */ - public void setState(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.IN_DOUBT.STATE. - */ - public String getState() { - return (String) getValue(1); - } - - // ------------------------------------------------------------------------- - // Record2 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row2 fieldsRow() { - return (Row2) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row2 valuesRow() { - return (Row2) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return InDoubt.IN_DOUBT.TRANSACTION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return InDoubt.IN_DOUBT.STATE; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getTransaction(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getState(); - } - - /** - * {@inheritDoc} - */ - @Override - public InDoubtRecord value1(String value) { - setTransaction(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public InDoubtRecord value2(String value) { - setState(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public InDoubtRecord values(String value1, String value2) { - value1(value1); - value2(value2); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached InDoubtRecord - */ - public InDoubtRecord() { - super(InDoubt.IN_DOUBT); - } - - /** - * Create a detached, initialised InDoubtRecord - */ - public InDoubtRecord(String transaction, String state) { - super(InDoubt.IN_DOUBT); - - setValue(0, transaction); - setValue(1, state); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/IndexesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/IndexesRecord.java deleted file mode 100644 index 87a34b2473..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/IndexesRecord.java +++ /dev/null @@ -1,939 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Indexes; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record21; -import org.jooq.Row21; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class IndexesRecord extends TableRecordImpl implements Record21 { - - private static final long serialVersionUID = -1683028432; - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.TABLE_CATALOG. - */ - public void setTableCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.TABLE_CATALOG. - */ - public String getTableCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.NON_UNIQUE. - */ - public void setNonUnique(Boolean value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.NON_UNIQUE. - */ - public Boolean getNonUnique() { - return (Boolean) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.INDEX_NAME. - */ - public void setIndexName(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.INDEX_NAME. - */ - public String getIndexName() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.ORDINAL_POSITION. - */ - public void setOrdinalPosition(Short value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.ORDINAL_POSITION. - */ - public Short getOrdinalPosition() { - return (Short) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.COLUMN_NAME. - */ - public void setColumnName(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.COLUMN_NAME. - */ - public String getColumnName() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.CARDINALITY. - */ - public void setCardinality(Integer value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.CARDINALITY. - */ - public Integer getCardinality() { - return (Integer) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.PRIMARY_KEY. - */ - public void setPrimaryKey_(Boolean value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.PRIMARY_KEY. - */ - public Boolean getPrimaryKey_() { - return (Boolean) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.INDEX_TYPE_NAME. - */ - public void setIndexTypeName(String value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.INDEX_TYPE_NAME. - */ - public String getIndexTypeName() { - return (String) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.IS_GENERATED. - */ - public void setIsGenerated(Boolean value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.IS_GENERATED. - */ - public Boolean getIsGenerated() { - return (Boolean) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.INDEX_TYPE. - */ - public void setIndexType(Short value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.INDEX_TYPE. - */ - public Short getIndexType() { - return (Short) getValue(11); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.ASC_OR_DESC. - */ - public void setAscOrDesc(String value) { - setValue(12, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.ASC_OR_DESC. - */ - public String getAscOrDesc() { - return (String) getValue(12); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.PAGES. - */ - public void setPages(Integer value) { - setValue(13, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.PAGES. - */ - public Integer getPages() { - return (Integer) getValue(13); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.FILTER_CONDITION. - */ - public void setFilterCondition(String value) { - setValue(14, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.FILTER_CONDITION. - */ - public String getFilterCondition() { - return (String) getValue(14); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.REMARKS. - */ - public void setRemarks(String value) { - setValue(15, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.REMARKS. - */ - public String getRemarks() { - return (String) getValue(15); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.SQL. - */ - public void setSql(String value) { - setValue(16, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.SQL. - */ - public String getSql() { - return (String) getValue(16); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.ID. - */ - public void setId(Integer value) { - setValue(17, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.ID. - */ - public Integer getId() { - return (Integer) getValue(17); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.SORT_TYPE. - */ - public void setSortType(Integer value) { - setValue(18, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.SORT_TYPE. - */ - public Integer getSortType() { - return (Integer) getValue(18); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.CONSTRAINT_NAME. - */ - public void setConstraintName(String value) { - setValue(19, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.CONSTRAINT_NAME. - */ - public String getConstraintName() { - return (String) getValue(19); - } - - /** - * Setter for INFORMATION_SCHEMA.INDEXES.INDEX_CLASS. - */ - public void setIndexClass(String value) { - setValue(20, value); - } - - /** - * Getter for INFORMATION_SCHEMA.INDEXES.INDEX_CLASS. - */ - public String getIndexClass() { - return (String) getValue(20); - } - - // ------------------------------------------------------------------------- - // Record21 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row21 fieldsRow() { - return (Row21) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row21 valuesRow() { - return (Row21) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Indexes.INDEXES.TABLE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Indexes.INDEXES.TABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Indexes.INDEXES.TABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Indexes.INDEXES.NON_UNIQUE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Indexes.INDEXES.INDEX_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Indexes.INDEXES.ORDINAL_POSITION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Indexes.INDEXES.COLUMN_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return Indexes.INDEXES.CARDINALITY; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return Indexes.INDEXES.PRIMARY_KEY; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return Indexes.INDEXES.INDEX_TYPE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return Indexes.INDEXES.IS_GENERATED; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return Indexes.INDEXES.INDEX_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field13() { - return Indexes.INDEXES.ASC_OR_DESC; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field14() { - return Indexes.INDEXES.PAGES; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field15() { - return Indexes.INDEXES.FILTER_CONDITION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field16() { - return Indexes.INDEXES.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field17() { - return Indexes.INDEXES.SQL; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field18() { - return Indexes.INDEXES.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field19() { - return Indexes.INDEXES.SORT_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field20() { - return Indexes.INDEXES.CONSTRAINT_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field21() { - return Indexes.INDEXES.INDEX_CLASS; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getTableCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getTableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getTableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value4() { - return getNonUnique(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getIndexName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value6() { - return getOrdinalPosition(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getColumnName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value8() { - return getCardinality(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value9() { - return getPrimaryKey_(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value10() { - return getIndexTypeName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value11() { - return getIsGenerated(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value12() { - return getIndexType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value13() { - return getAscOrDesc(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value14() { - return getPages(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value15() { - return getFilterCondition(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value16() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value17() { - return getSql(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value18() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value19() { - return getSortType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value20() { - return getConstraintName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value21() { - return getIndexClass(); - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value1(String value) { - setTableCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value2(String value) { - setTableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value3(String value) { - setTableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value4(Boolean value) { - setNonUnique(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value5(String value) { - setIndexName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value6(Short value) { - setOrdinalPosition(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value7(String value) { - setColumnName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value8(Integer value) { - setCardinality(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value9(Boolean value) { - setPrimaryKey_(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value10(String value) { - setIndexTypeName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value11(Boolean value) { - setIsGenerated(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value12(Short value) { - setIndexType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value13(String value) { - setAscOrDesc(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value14(Integer value) { - setPages(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value15(String value) { - setFilterCondition(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value16(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value17(String value) { - setSql(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value18(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value19(Integer value) { - setSortType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value20(String value) { - setConstraintName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord value21(String value) { - setIndexClass(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public IndexesRecord values(String value1, String value2, String value3, Boolean value4, String value5, Short value6, String value7, Integer value8, Boolean value9, String value10, Boolean value11, Short value12, String value13, Integer value14, String value15, String value16, String value17, Integer value18, Integer value19, String value20, String value21) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - value13(value13); - value14(value14); - value15(value15); - value16(value16); - value17(value17); - value18(value18); - value19(value19); - value20(value20); - value21(value21); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached IndexesRecord - */ - public IndexesRecord() { - super(Indexes.INDEXES); - } - - /** - * Create a detached, initialised IndexesRecord - */ - public IndexesRecord(String tableCatalog, String tableSchema, String tableName, Boolean nonUnique, String indexName, Short ordinalPosition, String columnName, Integer cardinality, Boolean primaryKey, String indexTypeName, Boolean isGenerated, Short indexType, String ascOrDesc, Integer pages, String filterCondition, String remarks, String sql, Integer id, Integer sortType, String constraintName, String indexClass) { - super(Indexes.INDEXES); - - setValue(0, tableCatalog); - setValue(1, tableSchema); - setValue(2, tableName); - setValue(3, nonUnique); - setValue(4, indexName); - setValue(5, ordinalPosition); - setValue(6, columnName); - setValue(7, cardinality); - setValue(8, primaryKey); - setValue(9, indexTypeName); - setValue(10, isGenerated); - setValue(11, indexType); - setValue(12, ascOrDesc); - setValue(13, pages); - setValue(14, filterCondition); - setValue(15, remarks); - setValue(16, sql); - setValue(17, id); - setValue(18, sortType); - setValue(19, constraintName); - setValue(20, indexClass); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/LocksRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/LocksRecord.java deleted file mode 100644 index 23cbf780e6..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/LocksRecord.java +++ /dev/null @@ -1,242 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Locks; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record4; -import org.jooq.Row4; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class LocksRecord extends TableRecordImpl implements Record4 { - - private static final long serialVersionUID = 1548907854; - - /** - * Setter for INFORMATION_SCHEMA.LOCKS.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.LOCKS.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.LOCKS.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.LOCKS.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.LOCKS.SESSION_ID. - */ - public void setSessionId(Integer value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.LOCKS.SESSION_ID. - */ - public Integer getSessionId() { - return (Integer) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.LOCKS.LOCK_TYPE. - */ - public void setLockType(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.LOCKS.LOCK_TYPE. - */ - public String getLockType() { - return (String) getValue(3); - } - - // ------------------------------------------------------------------------- - // Record4 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row4 fieldsRow() { - return (Row4) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row4 valuesRow() { - return (Row4) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Locks.LOCKS.TABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Locks.LOCKS.TABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Locks.LOCKS.SESSION_ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Locks.LOCKS.LOCK_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getTableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getTableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value3() { - return getSessionId(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getLockType(); - } - - /** - * {@inheritDoc} - */ - @Override - public LocksRecord value1(String value) { - setTableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public LocksRecord value2(String value) { - setTableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public LocksRecord value3(Integer value) { - setSessionId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public LocksRecord value4(String value) { - setLockType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public LocksRecord values(String value1, String value2, Integer value3, String value4) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached LocksRecord - */ - public LocksRecord() { - super(Locks.LOCKS); - } - - /** - * Create a detached, initialised LocksRecord - */ - public LocksRecord(String tableSchema, String tableName, Integer sessionId, String lockType) { - super(Locks.LOCKS); - - setValue(0, tableSchema); - setValue(1, tableName); - setValue(2, sessionId); - setValue(3, lockType); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/QueryStatisticsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/QueryStatisticsRecord.java deleted file mode 100644 index 56cd9d15c4..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/QueryStatisticsRecord.java +++ /dev/null @@ -1,570 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.QueryStatistics; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record12; -import org.jooq.Row12; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class QueryStatisticsRecord extends TableRecordImpl implements Record12 { - - private static final long serialVersionUID = -1608090322; - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.SQL_STATEMENT. - */ - public void setSqlStatement(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.SQL_STATEMENT. - */ - public String getSqlStatement() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.EXECUTION_COUNT. - */ - public void setExecutionCount(Integer value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.EXECUTION_COUNT. - */ - public Integer getExecutionCount() { - return (Integer) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_EXECUTION_TIME. - */ - public void setMinExecutionTime(Long value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_EXECUTION_TIME. - */ - public Long getMinExecutionTime() { - return (Long) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_EXECUTION_TIME. - */ - public void setMaxExecutionTime(Long value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_EXECUTION_TIME. - */ - public Long getMaxExecutionTime() { - return (Long) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_EXECUTION_TIME. - */ - public void setCumulativeExecutionTime(Long value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_EXECUTION_TIME. - */ - public Long getCumulativeExecutionTime() { - return (Long) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_EXECUTION_TIME. - */ - public void setAverageExecutionTime(Double value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_EXECUTION_TIME. - */ - public Double getAverageExecutionTime() { - return (Double) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_EXECUTION_TIME. - */ - public void setStdDevExecutionTime(Double value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_EXECUTION_TIME. - */ - public Double getStdDevExecutionTime() { - return (Double) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_ROW_COUNT. - */ - public void setMinRowCount(Integer value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.MIN_ROW_COUNT. - */ - public Integer getMinRowCount() { - return (Integer) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_ROW_COUNT. - */ - public void setMaxRowCount(Integer value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.MAX_ROW_COUNT. - */ - public Integer getMaxRowCount() { - return (Integer) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_ROW_COUNT. - */ - public void setCumulativeRowCount(Long value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.CUMULATIVE_ROW_COUNT. - */ - public Long getCumulativeRowCount() { - return (Long) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_ROW_COUNT. - */ - public void setAverageRowCount(Double value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.AVERAGE_ROW_COUNT. - */ - public Double getAverageRowCount() { - return (Double) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_ROW_COUNT. - */ - public void setStdDevRowCount(Double value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.QUERY_STATISTICS.STD_DEV_ROW_COUNT. - */ - public Double getStdDevRowCount() { - return (Double) getValue(11); - } - - // ------------------------------------------------------------------------- - // Record12 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row12 fieldsRow() { - return (Row12) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row12 valuesRow() { - return (Row12) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return QueryStatistics.QUERY_STATISTICS.SQL_STATEMENT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return QueryStatistics.QUERY_STATISTICS.EXECUTION_COUNT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return QueryStatistics.QUERY_STATISTICS.MIN_EXECUTION_TIME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return QueryStatistics.QUERY_STATISTICS.MAX_EXECUTION_TIME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return QueryStatistics.QUERY_STATISTICS.CUMULATIVE_EXECUTION_TIME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return QueryStatistics.QUERY_STATISTICS.AVERAGE_EXECUTION_TIME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return QueryStatistics.QUERY_STATISTICS.STD_DEV_EXECUTION_TIME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return QueryStatistics.QUERY_STATISTICS.MIN_ROW_COUNT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return QueryStatistics.QUERY_STATISTICS.MAX_ROW_COUNT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return QueryStatistics.QUERY_STATISTICS.CUMULATIVE_ROW_COUNT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return QueryStatistics.QUERY_STATISTICS.AVERAGE_ROW_COUNT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return QueryStatistics.QUERY_STATISTICS.STD_DEV_ROW_COUNT; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getSqlStatement(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value2() { - return getExecutionCount(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value3() { - return getMinExecutionTime(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value4() { - return getMaxExecutionTime(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value5() { - return getCumulativeExecutionTime(); - } - - /** - * {@inheritDoc} - */ - @Override - public Double value6() { - return getAverageExecutionTime(); - } - - /** - * {@inheritDoc} - */ - @Override - public Double value7() { - return getStdDevExecutionTime(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value8() { - return getMinRowCount(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value9() { - return getMaxRowCount(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value10() { - return getCumulativeRowCount(); - } - - /** - * {@inheritDoc} - */ - @Override - public Double value11() { - return getAverageRowCount(); - } - - /** - * {@inheritDoc} - */ - @Override - public Double value12() { - return getStdDevRowCount(); - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value1(String value) { - setSqlStatement(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value2(Integer value) { - setExecutionCount(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value3(Long value) { - setMinExecutionTime(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value4(Long value) { - setMaxExecutionTime(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value5(Long value) { - setCumulativeExecutionTime(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value6(Double value) { - setAverageExecutionTime(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value7(Double value) { - setStdDevExecutionTime(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value8(Integer value) { - setMinRowCount(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value9(Integer value) { - setMaxRowCount(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value10(Long value) { - setCumulativeRowCount(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value11(Double value) { - setAverageRowCount(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord value12(Double value) { - setStdDevRowCount(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public QueryStatisticsRecord values(String value1, Integer value2, Long value3, Long value4, Long value5, Double value6, Double value7, Integer value8, Integer value9, Long value10, Double value11, Double value12) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached QueryStatisticsRecord - */ - public QueryStatisticsRecord() { - super(QueryStatistics.QUERY_STATISTICS); - } - - /** - * Create a detached, initialised QueryStatisticsRecord - */ - public QueryStatisticsRecord(String sqlStatement, Integer executionCount, Long minExecutionTime, Long maxExecutionTime, Long cumulativeExecutionTime, Double averageExecutionTime, Double stdDevExecutionTime, Integer minRowCount, Integer maxRowCount, Long cumulativeRowCount, Double averageRowCount, Double stdDevRowCount) { - super(QueryStatistics.QUERY_STATISTICS); - - setValue(0, sqlStatement); - setValue(1, executionCount); - setValue(2, minExecutionTime); - setValue(3, maxExecutionTime); - setValue(4, cumulativeExecutionTime); - setValue(5, averageExecutionTime); - setValue(6, stdDevExecutionTime); - setValue(7, minRowCount); - setValue(8, maxRowCount); - setValue(9, cumulativeRowCount); - setValue(10, averageRowCount); - setValue(11, stdDevRowCount); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RightsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RightsRecord.java deleted file mode 100644 index a9c50817c7..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RightsRecord.java +++ /dev/null @@ -1,365 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Rights; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record7; -import org.jooq.Row7; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class RightsRecord extends TableRecordImpl implements Record7 { - - private static final long serialVersionUID = 269610816; - - /** - * Setter for INFORMATION_SCHEMA.RIGHTS.GRANTEE. - */ - public void setGrantee(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.RIGHTS.GRANTEE. - */ - public String getGrantee() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.RIGHTS.GRANTEETYPE. - */ - public void setGranteetype(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.RIGHTS.GRANTEETYPE. - */ - public String getGranteetype() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.RIGHTS.GRANTEDROLE. - */ - public void setGrantedrole(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.RIGHTS.GRANTEDROLE. - */ - public String getGrantedrole() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.RIGHTS.RIGHTS. - */ - public void setRights(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.RIGHTS.RIGHTS. - */ - public String getRights() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.RIGHTS.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.RIGHTS.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.RIGHTS.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.RIGHTS.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.RIGHTS.ID. - */ - public void setId(Integer value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.RIGHTS.ID. - */ - public Integer getId() { - return (Integer) getValue(6); - } - - // ------------------------------------------------------------------------- - // Record7 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row7 fieldsRow() { - return (Row7) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row7 valuesRow() { - return (Row7) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Rights.RIGHTS.GRANTEE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Rights.RIGHTS.GRANTEETYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Rights.RIGHTS.GRANTEDROLE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Rights.RIGHTS.RIGHTS_; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Rights.RIGHTS.TABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Rights.RIGHTS.TABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Rights.RIGHTS.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getGrantee(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getGranteetype(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getGrantedrole(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getRights(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getTableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getTableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value7() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public RightsRecord value1(String value) { - setGrantee(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RightsRecord value2(String value) { - setGranteetype(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RightsRecord value3(String value) { - setGrantedrole(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RightsRecord value4(String value) { - setRights(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RightsRecord value5(String value) { - setTableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RightsRecord value6(String value) { - setTableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RightsRecord value7(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RightsRecord values(String value1, String value2, String value3, String value4, String value5, String value6, Integer value7) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached RightsRecord - */ - public RightsRecord() { - super(Rights.RIGHTS); - } - - /** - * Create a detached, initialised RightsRecord - */ - public RightsRecord(String grantee, String granteetype, String grantedrole, String rights, String tableSchema, String tableName, Integer id) { - super(Rights.RIGHTS); - - setValue(0, grantee); - setValue(1, granteetype); - setValue(2, grantedrole); - setValue(3, rights); - setValue(4, tableSchema); - setValue(5, tableName); - setValue(6, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RolesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RolesRecord.java deleted file mode 100644 index a648165fc5..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/RolesRecord.java +++ /dev/null @@ -1,201 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Roles; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record3; -import org.jooq.Row3; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class RolesRecord extends TableRecordImpl implements Record3 { - - private static final long serialVersionUID = -579805711; - - /** - * Setter for INFORMATION_SCHEMA.ROLES.NAME. - */ - public void setName(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.ROLES.NAME. - */ - public String getName() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.ROLES.REMARKS. - */ - public void setRemarks(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.ROLES.REMARKS. - */ - public String getRemarks() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.ROLES.ID. - */ - public void setId(Integer value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.ROLES.ID. - */ - public Integer getId() { - return (Integer) getValue(2); - } - - // ------------------------------------------------------------------------- - // Record3 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row3 fieldsRow() { - return (Row3) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row3 valuesRow() { - return (Row3) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Roles.ROLES.NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Roles.ROLES.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Roles.ROLES.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value3() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public RolesRecord value1(String value) { - setName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RolesRecord value2(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RolesRecord value3(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public RolesRecord values(String value1, String value2, Integer value3) { - value1(value1); - value2(value2); - value3(value3); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached RolesRecord - */ - public RolesRecord() { - super(Roles.ROLES); - } - - /** - * Create a detached, initialised RolesRecord - */ - public RolesRecord(String name, String remarks, Integer id) { - super(Roles.ROLES); - - setValue(0, name); - setValue(1, remarks); - setValue(2, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SchemataRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SchemataRecord.java deleted file mode 100644 index 21ae1edfb4..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SchemataRecord.java +++ /dev/null @@ -1,406 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Schemata; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record8; -import org.jooq.Row8; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class SchemataRecord extends TableRecordImpl implements Record8 { - - private static final long serialVersionUID = -163519189; - - /** - * Setter for INFORMATION_SCHEMA.SCHEMATA.CATALOG_NAME. - */ - public void setCatalogName(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SCHEMATA.CATALOG_NAME. - */ - public String getCatalogName() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME. - */ - public void setSchemaName(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SCHEMATA.SCHEMA_NAME. - */ - public String getSchemaName() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.SCHEMATA.SCHEMA_OWNER. - */ - public void setSchemaOwner(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SCHEMATA.SCHEMA_OWNER. - */ - public String getSchemaOwner() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.SCHEMATA.DEFAULT_CHARACTER_SET_NAME. - */ - public void setDefaultCharacterSetName(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SCHEMATA.DEFAULT_CHARACTER_SET_NAME. - */ - public String getDefaultCharacterSetName() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.SCHEMATA.DEFAULT_COLLATION_NAME. - */ - public void setDefaultCollationName(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SCHEMATA.DEFAULT_COLLATION_NAME. - */ - public String getDefaultCollationName() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.SCHEMATA.IS_DEFAULT. - */ - public void setIsDefault(Boolean value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SCHEMATA.IS_DEFAULT. - */ - public Boolean getIsDefault() { - return (Boolean) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.SCHEMATA.REMARKS. - */ - public void setRemarks(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SCHEMATA.REMARKS. - */ - public String getRemarks() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.SCHEMATA.ID. - */ - public void setId(Integer value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SCHEMATA.ID. - */ - public Integer getId() { - return (Integer) getValue(7); - } - - // ------------------------------------------------------------------------- - // Record8 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row8 fieldsRow() { - return (Row8) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row8 valuesRow() { - return (Row8) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Schemata.SCHEMATA.CATALOG_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Schemata.SCHEMATA.SCHEMA_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Schemata.SCHEMATA.SCHEMA_OWNER; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Schemata.SCHEMATA.DEFAULT_CHARACTER_SET_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Schemata.SCHEMATA.DEFAULT_COLLATION_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Schemata.SCHEMATA.IS_DEFAULT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Schemata.SCHEMATA.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return Schemata.SCHEMATA.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getCatalogName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getSchemaName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getSchemaOwner(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getDefaultCharacterSetName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getDefaultCollationName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value6() { - return getIsDefault(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value8() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public SchemataRecord value1(String value) { - setCatalogName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SchemataRecord value2(String value) { - setSchemaName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SchemataRecord value3(String value) { - setSchemaOwner(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SchemataRecord value4(String value) { - setDefaultCharacterSetName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SchemataRecord value5(String value) { - setDefaultCollationName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SchemataRecord value6(Boolean value) { - setIsDefault(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SchemataRecord value7(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SchemataRecord value8(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SchemataRecord values(String value1, String value2, String value3, String value4, String value5, Boolean value6, String value7, Integer value8) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached SchemataRecord - */ - public SchemataRecord() { - super(Schemata.SCHEMATA); - } - - /** - * Create a detached, initialised SchemataRecord - */ - public SchemataRecord(String catalogName, String schemaName, String schemaOwner, String defaultCharacterSetName, String defaultCollationName, Boolean isDefault, String remarks, Integer id) { - super(Schemata.SCHEMATA); - - setValue(0, catalogName); - setValue(1, schemaName); - setValue(2, schemaOwner); - setValue(3, defaultCharacterSetName); - setValue(4, defaultCollationName); - setValue(5, isDefault); - setValue(6, remarks); - setValue(7, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SequencesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SequencesRecord.java deleted file mode 100644 index cc8285599f..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SequencesRecord.java +++ /dev/null @@ -1,570 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Sequences; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record12; -import org.jooq.Row12; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class SequencesRecord extends TableRecordImpl implements Record12 { - - private static final long serialVersionUID = -1861251627; - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_CATALOG. - */ - public void setSequenceCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_CATALOG. - */ - public String getSequenceCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA. - */ - public void setSequenceSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_SCHEMA. - */ - public String getSequenceSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME. - */ - public void setSequenceName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.SEQUENCE_NAME. - */ - public String getSequenceName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.CURRENT_VALUE. - */ - public void setCurrentValue(Long value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.CURRENT_VALUE. - */ - public Long getCurrentValue() { - return (Long) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.INCREMENT. - */ - public void setIncrement(Long value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.INCREMENT. - */ - public Long getIncrement() { - return (Long) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.IS_GENERATED. - */ - public void setIsGenerated(Boolean value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.IS_GENERATED. - */ - public Boolean getIsGenerated() { - return (Boolean) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.REMARKS. - */ - public void setRemarks(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.REMARKS. - */ - public String getRemarks() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.CACHE. - */ - public void setCache(Long value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.CACHE. - */ - public Long getCache() { - return (Long) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.MIN_VALUE. - */ - public void setMinValue(Long value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.MIN_VALUE. - */ - public Long getMinValue() { - return (Long) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.MAX_VALUE. - */ - public void setMaxValue(Long value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.MAX_VALUE. - */ - public Long getMaxValue() { - return (Long) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.IS_CYCLE. - */ - public void setIsCycle(Boolean value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.IS_CYCLE. - */ - public Boolean getIsCycle() { - return (Boolean) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.SEQUENCES.ID. - */ - public void setId(Integer value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SEQUENCES.ID. - */ - public Integer getId() { - return (Integer) getValue(11); - } - - // ------------------------------------------------------------------------- - // Record12 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row12 fieldsRow() { - return (Row12) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row12 valuesRow() { - return (Row12) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Sequences.SEQUENCES.SEQUENCE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Sequences.SEQUENCES.SEQUENCE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Sequences.SEQUENCES.SEQUENCE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Sequences.SEQUENCES.CURRENT_VALUE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Sequences.SEQUENCES.INCREMENT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Sequences.SEQUENCES.IS_GENERATED; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Sequences.SEQUENCES.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return Sequences.SEQUENCES.CACHE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return Sequences.SEQUENCES.MIN_VALUE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return Sequences.SEQUENCES.MAX_VALUE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return Sequences.SEQUENCES.IS_CYCLE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return Sequences.SEQUENCES.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getSequenceCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getSequenceSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getSequenceName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value4() { - return getCurrentValue(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value5() { - return getIncrement(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value6() { - return getIsGenerated(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value8() { - return getCache(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value9() { - return getMinValue(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value10() { - return getMaxValue(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value11() { - return getIsCycle(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value12() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value1(String value) { - setSequenceCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value2(String value) { - setSequenceSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value3(String value) { - setSequenceName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value4(Long value) { - setCurrentValue(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value5(Long value) { - setIncrement(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value6(Boolean value) { - setIsGenerated(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value7(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value8(Long value) { - setCache(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value9(Long value) { - setMinValue(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value10(Long value) { - setMaxValue(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value11(Boolean value) { - setIsCycle(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord value12(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SequencesRecord values(String value1, String value2, String value3, Long value4, Long value5, Boolean value6, String value7, Long value8, Long value9, Long value10, Boolean value11, Integer value12) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached SequencesRecord - */ - public SequencesRecord() { - super(Sequences.SEQUENCES); - } - - /** - * Create a detached, initialised SequencesRecord - */ - public SequencesRecord(String sequenceCatalog, String sequenceSchema, String sequenceName, Long currentValue, Long increment, Boolean isGenerated, String remarks, Long cache, Long minValue, Long maxValue, Boolean isCycle, Integer id) { - super(Sequences.SEQUENCES); - - setValue(0, sequenceCatalog); - setValue(1, sequenceSchema); - setValue(2, sequenceName); - setValue(3, currentValue); - setValue(4, increment); - setValue(5, isGenerated); - setValue(6, remarks); - setValue(7, cache); - setValue(8, minValue); - setValue(9, maxValue); - setValue(10, isCycle); - setValue(11, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionStateRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionStateRecord.java deleted file mode 100644 index b25800ae65..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionStateRecord.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.SessionState; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record2; -import org.jooq.Row2; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class SessionStateRecord extends TableRecordImpl implements Record2 { - - private static final long serialVersionUID = -1306764107; - - /** - * Setter for INFORMATION_SCHEMA.SESSION_STATE.KEY. - */ - public void setKey(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SESSION_STATE.KEY. - */ - public String getKey() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.SESSION_STATE.SQL. - */ - public void setSql(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SESSION_STATE.SQL. - */ - public String getSql() { - return (String) getValue(1); - } - - // ------------------------------------------------------------------------- - // Record2 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row2 fieldsRow() { - return (Row2) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row2 valuesRow() { - return (Row2) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return SessionState.SESSION_STATE.KEY; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return SessionState.SESSION_STATE.SQL; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getKey(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getSql(); - } - - /** - * {@inheritDoc} - */ - @Override - public SessionStateRecord value1(String value) { - setKey(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SessionStateRecord value2(String value) { - setSql(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SessionStateRecord values(String value1, String value2) { - value1(value1); - value2(value2); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached SessionStateRecord - */ - public SessionStateRecord() { - super(SessionState.SESSION_STATE); - } - - /** - * Create a detached, initialised SessionStateRecord - */ - public SessionStateRecord(String key, String sql) { - super(SessionState.SESSION_STATE); - - setValue(0, key); - setValue(1, sql); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionsRecord.java deleted file mode 100644 index 13853116b4..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SessionsRecord.java +++ /dev/null @@ -1,324 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Sessions; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record6; -import org.jooq.Row6; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class SessionsRecord extends TableRecordImpl implements Record6 { - - private static final long serialVersionUID = -457271018; - - /** - * Setter for INFORMATION_SCHEMA.SESSIONS.ID. - */ - public void setId(Integer value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SESSIONS.ID. - */ - public Integer getId() { - return (Integer) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.SESSIONS.USER_NAME. - */ - public void setUserName(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SESSIONS.USER_NAME. - */ - public String getUserName() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.SESSIONS.SESSION_START. - */ - public void setSessionStart(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SESSIONS.SESSION_START. - */ - public String getSessionStart() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.SESSIONS.STATEMENT. - */ - public void setStatement(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SESSIONS.STATEMENT. - */ - public String getStatement() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.SESSIONS.STATEMENT_START. - */ - public void setStatementStart(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SESSIONS.STATEMENT_START. - */ - public String getStatementStart() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.SESSIONS.CONTAINS_UNCOMMITTED. - */ - public void setContainsUncommitted(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SESSIONS.CONTAINS_UNCOMMITTED. - */ - public String getContainsUncommitted() { - return (String) getValue(5); - } - - // ------------------------------------------------------------------------- - // Record6 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row6 fieldsRow() { - return (Row6) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row6 valuesRow() { - return (Row6) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Sessions.SESSIONS.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Sessions.SESSIONS.USER_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Sessions.SESSIONS.SESSION_START; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Sessions.SESSIONS.STATEMENT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Sessions.SESSIONS.STATEMENT_START; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Sessions.SESSIONS.CONTAINS_UNCOMMITTED; - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value1() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getUserName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getSessionStart(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getStatement(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getStatementStart(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getContainsUncommitted(); - } - - /** - * {@inheritDoc} - */ - @Override - public SessionsRecord value1(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SessionsRecord value2(String value) { - setUserName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SessionsRecord value3(String value) { - setSessionStart(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SessionsRecord value4(String value) { - setStatement(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SessionsRecord value5(String value) { - setStatementStart(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SessionsRecord value6(String value) { - setContainsUncommitted(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SessionsRecord values(Integer value1, String value2, String value3, String value4, String value5, String value6) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached SessionsRecord - */ - public SessionsRecord() { - super(Sessions.SESSIONS); - } - - /** - * Create a detached, initialised SessionsRecord - */ - public SessionsRecord(Integer id, String userName, String sessionStart, String statement, String statementStart, String containsUncommitted) { - super(Sessions.SESSIONS); - - setValue(0, id); - setValue(1, userName); - setValue(2, sessionStart); - setValue(3, statement); - setValue(4, statementStart); - setValue(5, containsUncommitted); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SettingsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SettingsRecord.java deleted file mode 100644 index e5f096c510..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/SettingsRecord.java +++ /dev/null @@ -1,160 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Settings; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record2; -import org.jooq.Row2; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class SettingsRecord extends TableRecordImpl implements Record2 { - - private static final long serialVersionUID = -1656452632; - - /** - * Setter for INFORMATION_SCHEMA.SETTINGS.NAME. - */ - public void setName(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SETTINGS.NAME. - */ - public String getName() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.SETTINGS.VALUE. - */ - public void setValue(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.SETTINGS.VALUE. - */ - public String getValue() { - return (String) getValue(1); - } - - // ------------------------------------------------------------------------- - // Record2 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row2 fieldsRow() { - return (Row2) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row2 valuesRow() { - return (Row2) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Settings.SETTINGS.NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Settings.SETTINGS.VALUE; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getValue(); - } - - /** - * {@inheritDoc} - */ - @Override - public SettingsRecord value1(String value) { - setName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SettingsRecord value2(String value) { - setValue(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public SettingsRecord values(String value1, String value2) { - value1(value1); - value2(value2); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached SettingsRecord - */ - public SettingsRecord() { - super(Settings.SETTINGS); - } - - /** - * Create a detached, initialised SettingsRecord - */ - public SettingsRecord(String name, String value) { - super(Settings.SETTINGS); - - setValue(0, name); - setValue(1, value); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablePrivilegesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablePrivilegesRecord.java deleted file mode 100644 index 5b2beca1f0..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablePrivilegesRecord.java +++ /dev/null @@ -1,365 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.TablePrivileges; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record7; -import org.jooq.Row7; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class TablePrivilegesRecord extends TableRecordImpl implements Record7 { - - private static final long serialVersionUID = 1595034957; - - /** - * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTOR. - */ - public void setGrantor(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTOR. - */ - public String getGrantor() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTEE. - */ - public void setGrantee(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.GRANTEE. - */ - public String getGrantee() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_CATALOG. - */ - public void setTableCatalog(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_CATALOG. - */ - public String getTableCatalog() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.PRIVILEGE_TYPE. - */ - public void setPrivilegeType(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.PRIVILEGE_TYPE. - */ - public String getPrivilegeType() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.IS_GRANTABLE. - */ - public void setIsGrantable(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLE_PRIVILEGES.IS_GRANTABLE. - */ - public String getIsGrantable() { - return (String) getValue(6); - } - - // ------------------------------------------------------------------------- - // Record7 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row7 fieldsRow() { - return (Row7) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row7 valuesRow() { - return (Row7) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return TablePrivileges.TABLE_PRIVILEGES.GRANTOR; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return TablePrivileges.TABLE_PRIVILEGES.GRANTEE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return TablePrivileges.TABLE_PRIVILEGES.TABLE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return TablePrivileges.TABLE_PRIVILEGES.TABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return TablePrivileges.TABLE_PRIVILEGES.TABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return TablePrivileges.TABLE_PRIVILEGES.PRIVILEGE_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return TablePrivileges.TABLE_PRIVILEGES.IS_GRANTABLE; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getGrantor(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getGrantee(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getTableCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getTableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getTableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getPrivilegeType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getIsGrantable(); - } - - /** - * {@inheritDoc} - */ - @Override - public TablePrivilegesRecord value1(String value) { - setGrantor(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablePrivilegesRecord value2(String value) { - setGrantee(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablePrivilegesRecord value3(String value) { - setTableCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablePrivilegesRecord value4(String value) { - setTableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablePrivilegesRecord value5(String value) { - setTableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablePrivilegesRecord value6(String value) { - setPrivilegeType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablePrivilegesRecord value7(String value) { - setIsGrantable(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablePrivilegesRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached TablePrivilegesRecord - */ - public TablePrivilegesRecord() { - super(TablePrivileges.TABLE_PRIVILEGES); - } - - /** - * Create a detached, initialised TablePrivilegesRecord - */ - public TablePrivilegesRecord(String grantor, String grantee, String tableCatalog, String tableSchema, String tableName, String privilegeType, String isGrantable) { - super(TablePrivileges.TABLE_PRIVILEGES); - - setValue(0, grantor); - setValue(1, grantee); - setValue(2, tableCatalog); - setValue(3, tableSchema); - setValue(4, tableName); - setValue(5, privilegeType); - setValue(6, isGrantable); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TableTypesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TableTypesRecord.java deleted file mode 100644 index 3d7eebdfff..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TableTypesRecord.java +++ /dev/null @@ -1,119 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.TableTypes; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record1; -import org.jooq.Row1; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class TableTypesRecord extends TableRecordImpl implements Record1 { - - private static final long serialVersionUID = -645264739; - - /** - * Setter for INFORMATION_SCHEMA.TABLE_TYPES.TYPE. - */ - public void setType(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLE_TYPES.TYPE. - */ - public String getType() { - return (String) getValue(0); - } - - // ------------------------------------------------------------------------- - // Record1 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row1 fieldsRow() { - return (Row1) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row1 valuesRow() { - return (Row1) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return TableTypes.TABLE_TYPES.TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getType(); - } - - /** - * {@inheritDoc} - */ - @Override - public TableTypesRecord value1(String value) { - setType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TableTypesRecord values(String value1) { - value1(value1); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached TableTypesRecord - */ - public TableTypesRecord() { - super(TableTypes.TABLE_TYPES); - } - - /** - * Create a detached, initialised TableTypesRecord - */ - public TableTypesRecord(String type) { - super(TableTypes.TABLE_TYPES); - - setValue(0, type); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablesRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablesRecord.java deleted file mode 100644 index 9542830be7..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TablesRecord.java +++ /dev/null @@ -1,570 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Tables; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record12; -import org.jooq.Row12; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class TablesRecord extends TableRecordImpl implements Record12 { - - private static final long serialVersionUID = 850052084; - - /** - * Setter for INFORMATION_SCHEMA.TABLES.TABLE_CATALOG. - */ - public void setTableCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.TABLE_CATALOG. - */ - public String getTableCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.TABLE_TYPE. - */ - public void setTableType(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.TABLE_TYPE. - */ - public String getTableType() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.STORAGE_TYPE. - */ - public void setStorageType(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.STORAGE_TYPE. - */ - public String getStorageType() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.SQL. - */ - public void setSql(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.SQL. - */ - public String getSql() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.REMARKS. - */ - public void setRemarks(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.REMARKS. - */ - public String getRemarks() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.LAST_MODIFICATION. - */ - public void setLastModification(Long value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.LAST_MODIFICATION. - */ - public Long getLastModification() { - return (Long) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.ID. - */ - public void setId(Integer value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.ID. - */ - public Integer getId() { - return (Integer) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.TYPE_NAME. - */ - public void setTypeName(String value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.TYPE_NAME. - */ - public String getTypeName() { - return (String) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.TABLE_CLASS. - */ - public void setTableClass(String value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.TABLE_CLASS. - */ - public String getTableClass() { - return (String) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.TABLES.ROW_COUNT_ESTIMATE. - */ - public void setRowCountEstimate(Long value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TABLES.ROW_COUNT_ESTIMATE. - */ - public Long getRowCountEstimate() { - return (Long) getValue(11); - } - - // ------------------------------------------------------------------------- - // Record12 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row12 fieldsRow() { - return (Row12) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row12 valuesRow() { - return (Row12) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Tables.TABLES.TABLE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Tables.TABLES.TABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Tables.TABLES.TABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Tables.TABLES.TABLE_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Tables.TABLES.STORAGE_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Tables.TABLES.SQL; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Tables.TABLES.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return Tables.TABLES.LAST_MODIFICATION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return Tables.TABLES.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return Tables.TABLES.TYPE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return Tables.TABLES.TABLE_CLASS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return Tables.TABLES.ROW_COUNT_ESTIMATE; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getTableCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getTableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getTableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getTableType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getStorageType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getSql(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value8() { - return getLastModification(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value9() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value10() { - return getTypeName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value11() { - return getTableClass(); - } - - /** - * {@inheritDoc} - */ - @Override - public Long value12() { - return getRowCountEstimate(); - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value1(String value) { - setTableCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value2(String value) { - setTableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value3(String value) { - setTableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value4(String value) { - setTableType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value5(String value) { - setStorageType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value6(String value) { - setSql(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value7(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value8(Long value) { - setLastModification(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value9(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value10(String value) { - setTypeName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value11(String value) { - setTableClass(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord value12(Long value) { - setRowCountEstimate(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TablesRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, Long value8, Integer value9, String value10, String value11, Long value12) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached TablesRecord - */ - public TablesRecord() { - super(Tables.TABLES); - } - - /** - * Create a detached, initialised TablesRecord - */ - public TablesRecord(String tableCatalog, String tableSchema, String tableName, String tableType, String storageType, String sql, String remarks, Long lastModification, Integer id, String typeName, String tableClass, Long rowCountEstimate) { - super(Tables.TABLES); - - setValue(0, tableCatalog); - setValue(1, tableSchema); - setValue(2, tableName); - setValue(3, tableType); - setValue(4, storageType); - setValue(5, sql); - setValue(6, remarks); - setValue(7, lastModification); - setValue(8, id); - setValue(9, typeName); - setValue(10, tableClass); - setValue(11, rowCountEstimate); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TriggersRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TriggersRecord.java deleted file mode 100644 index f0f019e127..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TriggersRecord.java +++ /dev/null @@ -1,652 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Triggers; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record14; -import org.jooq.Row14; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class TriggersRecord extends TableRecordImpl implements Record14 { - - private static final long serialVersionUID = 344875511; - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_CATALOG. - */ - public void setTriggerCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_CATALOG. - */ - public String getTriggerCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_SCHEMA. - */ - public void setTriggerSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_SCHEMA. - */ - public String getTriggerSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_NAME. - */ - public void setTriggerName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_NAME. - */ - public String getTriggerName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_TYPE. - */ - public void setTriggerType(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.TRIGGER_TYPE. - */ - public String getTriggerType() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.TABLE_CATALOG. - */ - public void setTableCatalog(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.TABLE_CATALOG. - */ - public String getTableCatalog() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.BEFORE. - */ - public void setBefore(Boolean value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.BEFORE. - */ - public Boolean getBefore() { - return (Boolean) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.JAVA_CLASS. - */ - public void setJavaClass(String value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.JAVA_CLASS. - */ - public String getJavaClass() { - return (String) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.QUEUE_SIZE. - */ - public void setQueueSize(Integer value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.QUEUE_SIZE. - */ - public Integer getQueueSize() { - return (Integer) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.NO_WAIT. - */ - public void setNoWait(Boolean value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.NO_WAIT. - */ - public Boolean getNoWait() { - return (Boolean) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.REMARKS. - */ - public void setRemarks(String value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.REMARKS. - */ - public String getRemarks() { - return (String) getValue(11); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.SQL. - */ - public void setSql(String value) { - setValue(12, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.SQL. - */ - public String getSql() { - return (String) getValue(12); - } - - /** - * Setter for INFORMATION_SCHEMA.TRIGGERS.ID. - */ - public void setId(Integer value) { - setValue(13, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TRIGGERS.ID. - */ - public Integer getId() { - return (Integer) getValue(13); - } - - // ------------------------------------------------------------------------- - // Record14 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row14 fieldsRow() { - return (Row14) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row14 valuesRow() { - return (Row14) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Triggers.TRIGGERS.TRIGGER_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Triggers.TRIGGERS.TRIGGER_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Triggers.TRIGGERS.TRIGGER_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Triggers.TRIGGERS.TRIGGER_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Triggers.TRIGGERS.TABLE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Triggers.TRIGGERS.TABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Triggers.TRIGGERS.TABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return Triggers.TRIGGERS.BEFORE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return Triggers.TRIGGERS.JAVA_CLASS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return Triggers.TRIGGERS.QUEUE_SIZE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return Triggers.TRIGGERS.NO_WAIT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return Triggers.TRIGGERS.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field13() { - return Triggers.TRIGGERS.SQL; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field14() { - return Triggers.TRIGGERS.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getTriggerCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getTriggerSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getTriggerName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getTriggerType(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getTableCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getTableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getTableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value8() { - return getBefore(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value9() { - return getJavaClass(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value10() { - return getQueueSize(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value11() { - return getNoWait(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value12() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value13() { - return getSql(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value14() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value1(String value) { - setTriggerCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value2(String value) { - setTriggerSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value3(String value) { - setTriggerName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value4(String value) { - setTriggerType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value5(String value) { - setTableCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value6(String value) { - setTableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value7(String value) { - setTableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value8(Boolean value) { - setBefore(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value9(String value) { - setJavaClass(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value10(Integer value) { - setQueueSize(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value11(Boolean value) { - setNoWait(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value12(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value13(String value) { - setSql(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord value14(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TriggersRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, Boolean value8, String value9, Integer value10, Boolean value11, String value12, String value13, Integer value14) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - value13(value13); - value14(value14); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached TriggersRecord - */ - public TriggersRecord() { - super(Triggers.TRIGGERS); - } - - /** - * Create a detached, initialised TriggersRecord - */ - public TriggersRecord(String triggerCatalog, String triggerSchema, String triggerName, String triggerType, String tableCatalog, String tableSchema, String tableName, Boolean before, String javaClass, Integer queueSize, Boolean noWait, String remarks, String sql, Integer id) { - super(Triggers.TRIGGERS); - - setValue(0, triggerCatalog); - setValue(1, triggerSchema); - setValue(2, triggerName); - setValue(3, triggerType); - setValue(4, tableCatalog); - setValue(5, tableSchema); - setValue(6, tableName); - setValue(7, before); - setValue(8, javaClass); - setValue(9, queueSize); - setValue(10, noWait); - setValue(11, remarks); - setValue(12, sql); - setValue(13, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TypeInfoRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TypeInfoRecord.java deleted file mode 100644 index af3eaee83f..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/TypeInfoRecord.java +++ /dev/null @@ -1,652 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.TypeInfo; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record14; -import org.jooq.Row14; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class TypeInfoRecord extends TableRecordImpl implements Record14 { - - private static final long serialVersionUID = -1463889309; - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.TYPE_NAME. - */ - public void setTypeName(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.TYPE_NAME. - */ - public String getTypeName() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.DATA_TYPE. - */ - public void setDataType(Integer value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.DATA_TYPE. - */ - public Integer getDataType() { - return (Integer) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.PRECISION. - */ - public void setPrecision(Integer value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.PRECISION. - */ - public Integer getPrecision() { - return (Integer) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.PREFIX. - */ - public void setPrefix(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.PREFIX. - */ - public String getPrefix() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.SUFFIX. - */ - public void setSuffix(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.SUFFIX. - */ - public String getSuffix() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.PARAMS. - */ - public void setParams(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.PARAMS. - */ - public String getParams() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.AUTO_INCREMENT. - */ - public void setAutoIncrement(Boolean value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.AUTO_INCREMENT. - */ - public Boolean getAutoIncrement() { - return (Boolean) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.MINIMUM_SCALE. - */ - public void setMinimumScale(Short value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.MINIMUM_SCALE. - */ - public Short getMinimumScale() { - return (Short) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.MAXIMUM_SCALE. - */ - public void setMaximumScale(Short value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.MAXIMUM_SCALE. - */ - public Short getMaximumScale() { - return (Short) getValue(8); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.RADIX. - */ - public void setRadix(Integer value) { - setValue(9, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.RADIX. - */ - public Integer getRadix() { - return (Integer) getValue(9); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.POS. - */ - public void setPos(Integer value) { - setValue(10, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.POS. - */ - public Integer getPos() { - return (Integer) getValue(10); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.CASE_SENSITIVE. - */ - public void setCaseSensitive(Boolean value) { - setValue(11, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.CASE_SENSITIVE. - */ - public Boolean getCaseSensitive() { - return (Boolean) getValue(11); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.NULLABLE. - */ - public void setNullable(Short value) { - setValue(12, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.NULLABLE. - */ - public Short getNullable() { - return (Short) getValue(12); - } - - /** - * Setter for INFORMATION_SCHEMA.TYPE_INFO.SEARCHABLE. - */ - public void setSearchable(Short value) { - setValue(13, value); - } - - /** - * Getter for INFORMATION_SCHEMA.TYPE_INFO.SEARCHABLE. - */ - public Short getSearchable() { - return (Short) getValue(13); - } - - // ------------------------------------------------------------------------- - // Record14 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row14 fieldsRow() { - return (Row14) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row14 valuesRow() { - return (Row14) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return TypeInfo.TYPE_INFO.TYPE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return TypeInfo.TYPE_INFO.DATA_TYPE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return TypeInfo.TYPE_INFO.PRECISION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return TypeInfo.TYPE_INFO.PREFIX; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return TypeInfo.TYPE_INFO.SUFFIX; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return TypeInfo.TYPE_INFO.PARAMS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return TypeInfo.TYPE_INFO.AUTO_INCREMENT; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return TypeInfo.TYPE_INFO.MINIMUM_SCALE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return TypeInfo.TYPE_INFO.MAXIMUM_SCALE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field10() { - return TypeInfo.TYPE_INFO.RADIX; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field11() { - return TypeInfo.TYPE_INFO.POS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field12() { - return TypeInfo.TYPE_INFO.CASE_SENSITIVE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field13() { - return TypeInfo.TYPE_INFO.NULLABLE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field14() { - return TypeInfo.TYPE_INFO.SEARCHABLE; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getTypeName(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value2() { - return getDataType(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value3() { - return getPrecision(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getPrefix(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getSuffix(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getParams(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value7() { - return getAutoIncrement(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value8() { - return getMinimumScale(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value9() { - return getMaximumScale(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value10() { - return getRadix(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value11() { - return getPos(); - } - - /** - * {@inheritDoc} - */ - @Override - public Boolean value12() { - return getCaseSensitive(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value13() { - return getNullable(); - } - - /** - * {@inheritDoc} - */ - @Override - public Short value14() { - return getSearchable(); - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value1(String value) { - setTypeName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value2(Integer value) { - setDataType(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value3(Integer value) { - setPrecision(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value4(String value) { - setPrefix(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value5(String value) { - setSuffix(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value6(String value) { - setParams(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value7(Boolean value) { - setAutoIncrement(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value8(Short value) { - setMinimumScale(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value9(Short value) { - setMaximumScale(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value10(Integer value) { - setRadix(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value11(Integer value) { - setPos(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value12(Boolean value) { - setCaseSensitive(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value13(Short value) { - setNullable(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord value14(Short value) { - setSearchable(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public TypeInfoRecord values(String value1, Integer value2, Integer value3, String value4, String value5, String value6, Boolean value7, Short value8, Short value9, Integer value10, Integer value11, Boolean value12, Short value13, Short value14) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - value10(value10); - value11(value11); - value12(value12); - value13(value13); - value14(value14); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached TypeInfoRecord - */ - public TypeInfoRecord() { - super(TypeInfo.TYPE_INFO); - } - - /** - * Create a detached, initialised TypeInfoRecord - */ - public TypeInfoRecord(String typeName, Integer dataType, Integer precision, String prefix, String suffix, String params, Boolean autoIncrement, Short minimumScale, Short maximumScale, Integer radix, Integer pos, Boolean caseSensitive, Short nullable, Short searchable) { - super(TypeInfo.TYPE_INFO); - - setValue(0, typeName); - setValue(1, dataType); - setValue(2, precision); - setValue(3, prefix); - setValue(4, suffix); - setValue(5, params); - setValue(6, autoIncrement); - setValue(7, minimumScale); - setValue(8, maximumScale); - setValue(9, radix); - setValue(10, pos); - setValue(11, caseSensitive); - setValue(12, nullable); - setValue(13, searchable); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/UsersRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/UsersRecord.java deleted file mode 100644 index 934b0484c8..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/UsersRecord.java +++ /dev/null @@ -1,242 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Users; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record4; -import org.jooq.Row4; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class UsersRecord extends TableRecordImpl implements Record4 { - - private static final long serialVersionUID = -592508392; - - /** - * Setter for INFORMATION_SCHEMA.USERS.NAME. - */ - public void setName(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.USERS.NAME. - */ - public String getName() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.USERS.ADMIN. - */ - public void setAdmin(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.USERS.ADMIN. - */ - public String getAdmin() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.USERS.REMARKS. - */ - public void setRemarks(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.USERS.REMARKS. - */ - public String getRemarks() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.USERS.ID. - */ - public void setId(Integer value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.USERS.ID. - */ - public Integer getId() { - return (Integer) getValue(3); - } - - // ------------------------------------------------------------------------- - // Record4 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row4 fieldsRow() { - return (Row4) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row4 valuesRow() { - return (Row4) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Users.USERS.NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Users.USERS.ADMIN; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Users.USERS.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Users.USERS.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getAdmin(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value4() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public UsersRecord value1(String value) { - setName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public UsersRecord value2(String value) { - setAdmin(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public UsersRecord value3(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public UsersRecord value4(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public UsersRecord values(String value1, String value2, String value3, Integer value4) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached UsersRecord - */ - public UsersRecord() { - super(Users.USERS); - } - - /** - * Create a detached, initialised UsersRecord - */ - public UsersRecord(String name, String admin, String remarks, Integer id) { - super(Users.USERS); - - setValue(0, name); - setValue(1, admin); - setValue(2, remarks); - setValue(3, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ViewsRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ViewsRecord.java deleted file mode 100644 index 4b2d66bd73..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/information_schema/tables/records/ViewsRecord.java +++ /dev/null @@ -1,447 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.information_schema.tables.records; - - -import com.baeldung.jooq.introduction.db.information_schema.tables.Views; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record9; -import org.jooq.Row9; -import org.jooq.impl.TableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class ViewsRecord extends TableRecordImpl implements Record9 { - - private static final long serialVersionUID = -1380031738; - - /** - * Setter for INFORMATION_SCHEMA.VIEWS.TABLE_CATALOG. - */ - public void setTableCatalog(String value) { - setValue(0, value); - } - - /** - * Getter for INFORMATION_SCHEMA.VIEWS.TABLE_CATALOG. - */ - public String getTableCatalog() { - return (String) getValue(0); - } - - /** - * Setter for INFORMATION_SCHEMA.VIEWS.TABLE_SCHEMA. - */ - public void setTableSchema(String value) { - setValue(1, value); - } - - /** - * Getter for INFORMATION_SCHEMA.VIEWS.TABLE_SCHEMA. - */ - public String getTableSchema() { - return (String) getValue(1); - } - - /** - * Setter for INFORMATION_SCHEMA.VIEWS.TABLE_NAME. - */ - public void setTableName(String value) { - setValue(2, value); - } - - /** - * Getter for INFORMATION_SCHEMA.VIEWS.TABLE_NAME. - */ - public String getTableName() { - return (String) getValue(2); - } - - /** - * Setter for INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION. - */ - public void setViewDefinition(String value) { - setValue(3, value); - } - - /** - * Getter for INFORMATION_SCHEMA.VIEWS.VIEW_DEFINITION. - */ - public String getViewDefinition() { - return (String) getValue(3); - } - - /** - * Setter for INFORMATION_SCHEMA.VIEWS.CHECK_OPTION. - */ - public void setCheckOption(String value) { - setValue(4, value); - } - - /** - * Getter for INFORMATION_SCHEMA.VIEWS.CHECK_OPTION. - */ - public String getCheckOption() { - return (String) getValue(4); - } - - /** - * Setter for INFORMATION_SCHEMA.VIEWS.IS_UPDATABLE. - */ - public void setIsUpdatable(String value) { - setValue(5, value); - } - - /** - * Getter for INFORMATION_SCHEMA.VIEWS.IS_UPDATABLE. - */ - public String getIsUpdatable() { - return (String) getValue(5); - } - - /** - * Setter for INFORMATION_SCHEMA.VIEWS.STATUS. - */ - public void setStatus(String value) { - setValue(6, value); - } - - /** - * Getter for INFORMATION_SCHEMA.VIEWS.STATUS. - */ - public String getStatus() { - return (String) getValue(6); - } - - /** - * Setter for INFORMATION_SCHEMA.VIEWS.REMARKS. - */ - public void setRemarks(String value) { - setValue(7, value); - } - - /** - * Getter for INFORMATION_SCHEMA.VIEWS.REMARKS. - */ - public String getRemarks() { - return (String) getValue(7); - } - - /** - * Setter for INFORMATION_SCHEMA.VIEWS.ID. - */ - public void setId(Integer value) { - setValue(8, value); - } - - /** - * Getter for INFORMATION_SCHEMA.VIEWS.ID. - */ - public Integer getId() { - return (Integer) getValue(8); - } - - // ------------------------------------------------------------------------- - // Record9 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row9 fieldsRow() { - return (Row9) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row9 valuesRow() { - return (Row9) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Views.VIEWS.TABLE_CATALOG; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Views.VIEWS.TABLE_SCHEMA; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Views.VIEWS.TABLE_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field4() { - return Views.VIEWS.VIEW_DEFINITION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field5() { - return Views.VIEWS.CHECK_OPTION; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field6() { - return Views.VIEWS.IS_UPDATABLE; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field7() { - return Views.VIEWS.STATUS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field8() { - return Views.VIEWS.REMARKS; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field9() { - return Views.VIEWS.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public String value1() { - return getTableCatalog(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getTableSchema(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getTableName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value4() { - return getViewDefinition(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value5() { - return getCheckOption(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value6() { - return getIsUpdatable(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value7() { - return getStatus(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value8() { - return getRemarks(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value9() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord value1(String value) { - setTableCatalog(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord value2(String value) { - setTableSchema(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord value3(String value) { - setTableName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord value4(String value) { - setViewDefinition(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord value5(String value) { - setCheckOption(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord value6(String value) { - setIsUpdatable(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord value7(String value) { - setStatus(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord value8(String value) { - setRemarks(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord value9(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public ViewsRecord values(String value1, String value2, String value3, String value4, String value5, String value6, String value7, String value8, Integer value9) { - value1(value1); - value2(value2); - value3(value3); - value4(value4); - value5(value5); - value6(value6); - value7(value7); - value8(value8); - value9(value9); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached ViewsRecord - */ - public ViewsRecord() { - super(Views.VIEWS); - } - - /** - * Create a detached, initialised ViewsRecord - */ - public ViewsRecord(String tableCatalog, String tableSchema, String tableName, String viewDefinition, String checkOption, String isUpdatable, String status, String remarks, Integer id) { - super(Views.VIEWS); - - setValue(0, tableCatalog); - setValue(1, tableSchema); - setValue(2, tableName); - setValue(3, viewDefinition); - setValue(4, checkOption); - setValue(5, isUpdatable); - setValue(6, status); - setValue(7, remarks); - setValue(8, id); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Keys.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Keys.java deleted file mode 100644 index 66656c9bbc..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Keys.java +++ /dev/null @@ -1,69 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.public_; - - -import com.baeldung.jooq.introduction.db.public_.tables.Author; -import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; -import com.baeldung.jooq.introduction.db.public_.tables.Book; -import com.baeldung.jooq.introduction.db.public_.tables.records.AuthorBookRecord; -import com.baeldung.jooq.introduction.db.public_.tables.records.AuthorRecord; -import com.baeldung.jooq.introduction.db.public_.tables.records.BookRecord; - -import javax.annotation.Generated; - -import org.jooq.ForeignKey; -import org.jooq.UniqueKey; -import org.jooq.impl.AbstractKeys; - - -/** - * A class modelling foreign key relationships between tables of the PUBLIC - * schema - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Keys { - - // ------------------------------------------------------------------------- - // IDENTITY definitions - // ------------------------------------------------------------------------- - - - // ------------------------------------------------------------------------- - // UNIQUE and PRIMARY KEY definitions - // ------------------------------------------------------------------------- - - public static final UniqueKey CONSTRAINT_7 = UniqueKeys0.CONSTRAINT_7; - public static final UniqueKey CONSTRAINT_1 = UniqueKeys0.CONSTRAINT_1; - public static final UniqueKey CONSTRAINT_A = UniqueKeys0.CONSTRAINT_A; - - // ------------------------------------------------------------------------- - // FOREIGN KEY definitions - // ------------------------------------------------------------------------- - - public static final ForeignKey FK_AB_AUTHOR = ForeignKeys0.FK_AB_AUTHOR; - public static final ForeignKey FK_AB_BOOK = ForeignKeys0.FK_AB_BOOK; - - // ------------------------------------------------------------------------- - // [#1459] distribute members to avoid static initialisers > 64kb - // ------------------------------------------------------------------------- - - private static class UniqueKeys0 extends AbstractKeys { - public static final UniqueKey CONSTRAINT_7 = createUniqueKey(Author.AUTHOR, Author.AUTHOR.ID); - public static final UniqueKey CONSTRAINT_1 = createUniqueKey(Book.BOOK, Book.BOOK.ID); - public static final UniqueKey CONSTRAINT_A = createUniqueKey(AuthorBook.AUTHOR_BOOK, AuthorBook.AUTHOR_BOOK.AUTHOR_ID, AuthorBook.AUTHOR_BOOK.BOOK_ID); - } - - private static class ForeignKeys0 extends AbstractKeys { - public static final ForeignKey FK_AB_AUTHOR = createForeignKey(com.baeldung.jooq.introduction.db.public_.Keys.CONSTRAINT_7, AuthorBook.AUTHOR_BOOK, AuthorBook.AUTHOR_BOOK.AUTHOR_ID); - public static final ForeignKey FK_AB_BOOK = createForeignKey(com.baeldung.jooq.introduction.db.public_.Keys.CONSTRAINT_1, AuthorBook.AUTHOR_BOOK, AuthorBook.AUTHOR_BOOK.BOOK_ID); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Public.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Public.java deleted file mode 100644 index a681123c94..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Public.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.public_; - - -import com.baeldung.jooq.introduction.db.public_.tables.Author; -import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; -import com.baeldung.jooq.introduction.db.public_.tables.Book; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Generated; - -import org.jooq.Table; -import org.jooq.impl.SchemaImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Public extends SchemaImpl { - - private static final long serialVersionUID = 1806497150; - - /** - * The reference instance of PUBLIC - */ - public static final Public PUBLIC = new Public(); - - /** - * No further instances allowed - */ - private Public() { - super("PUBLIC"); - } - - @Override - public final List> getTables() { - List result = new ArrayList(); - result.addAll(getTables0()); - return result; - } - - private final List> getTables0() { - return Arrays.>asList( - Author.AUTHOR, - Book.BOOK, - AuthorBook.AUTHOR_BOOK); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Tables.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Tables.java deleted file mode 100644 index cbdc08b78f..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/Tables.java +++ /dev/null @@ -1,41 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.public_; - - -import com.baeldung.jooq.introduction.db.public_.tables.Author; -import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; -import com.baeldung.jooq.introduction.db.public_.tables.Book; - -import javax.annotation.Generated; - - -/** - * Convenience access to all tables in PUBLIC - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Tables { - - /** - * The table PUBLIC.AUTHOR - */ - public static final Author AUTHOR = com.baeldung.jooq.introduction.db.public_.tables.Author.AUTHOR; - - /** - * The table PUBLIC.BOOK - */ - public static final Book BOOK = com.baeldung.jooq.introduction.db.public_.tables.Book.BOOK; - - /** - * The table PUBLIC.AUTHOR_BOOK - */ - public static final AuthorBook AUTHOR_BOOK = com.baeldung.jooq.introduction.db.public_.tables.AuthorBook.AUTHOR_BOOK; -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Author.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Author.java deleted file mode 100644 index 43d0b4f778..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Author.java +++ /dev/null @@ -1,118 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.public_.tables; - - -import com.baeldung.jooq.introduction.db.public_.Keys; -import com.baeldung.jooq.introduction.db.public_.Public; -import com.baeldung.jooq.introduction.db.public_.tables.records.AuthorRecord; - -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.UniqueKey; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Author extends TableImpl { - - private static final long serialVersionUID = 1121046490; - - /** - * The reference instance of PUBLIC.AUTHOR - */ - public static final Author AUTHOR = new Author(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return AuthorRecord.class; - } - - /** - * The column PUBLIC.AUTHOR.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); - - /** - * The column PUBLIC.AUTHOR.FIRST_NAME. - */ - public final TableField FIRST_NAME = createField("FIRST_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(50), this, ""); - - /** - * The column PUBLIC.AUTHOR.LAST_NAME. - */ - public final TableField LAST_NAME = createField("LAST_NAME", org.jooq.impl.SQLDataType.VARCHAR.length(50).nullable(false), this, ""); - - /** - * Create a PUBLIC.AUTHOR table reference - */ - public Author() { - this("AUTHOR", null); - } - - /** - * Create an aliased PUBLIC.AUTHOR table reference - */ - public Author(String alias) { - this(alias, AUTHOR); - } - - private Author(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Author(String alias, Table aliased, Field[] parameters) { - super(alias, Public.PUBLIC, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public UniqueKey getPrimaryKey() { - return Keys.CONSTRAINT_7; - } - - /** - * {@inheritDoc} - */ - @Override - public List> getKeys() { - return Arrays.>asList(Keys.CONSTRAINT_7); - } - - /** - * {@inheritDoc} - */ - @Override - public Author as(String alias) { - return new Author(alias, this); - } - - /** - * Rename this table - */ - public Author rename(String name) { - return new Author(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/AuthorBook.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/AuthorBook.java deleted file mode 100644 index 38a0fe2593..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/AuthorBook.java +++ /dev/null @@ -1,122 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.public_.tables; - - -import com.baeldung.jooq.introduction.db.public_.Keys; -import com.baeldung.jooq.introduction.db.public_.Public; -import com.baeldung.jooq.introduction.db.public_.tables.records.AuthorBookRecord; - -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.ForeignKey; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.UniqueKey; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class AuthorBook extends TableImpl { - - private static final long serialVersionUID = -1609247069; - - /** - * The reference instance of PUBLIC.AUTHOR_BOOK - */ - public static final AuthorBook AUTHOR_BOOK = new AuthorBook(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return AuthorBookRecord.class; - } - - /** - * The column PUBLIC.AUTHOR_BOOK.AUTHOR_ID. - */ - public final TableField AUTHOR_ID = createField("AUTHOR_ID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); - - /** - * The column PUBLIC.AUTHOR_BOOK.BOOK_ID. - */ - public final TableField BOOK_ID = createField("BOOK_ID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); - - /** - * Create a PUBLIC.AUTHOR_BOOK table reference - */ - public AuthorBook() { - this("AUTHOR_BOOK", null); - } - - /** - * Create an aliased PUBLIC.AUTHOR_BOOK table reference - */ - public AuthorBook(String alias) { - this(alias, AUTHOR_BOOK); - } - - private AuthorBook(String alias, Table aliased) { - this(alias, aliased, null); - } - - private AuthorBook(String alias, Table aliased, Field[] parameters) { - super(alias, Public.PUBLIC, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public UniqueKey getPrimaryKey() { - return Keys.CONSTRAINT_A; - } - - /** - * {@inheritDoc} - */ - @Override - public List> getKeys() { - return Arrays.>asList(Keys.CONSTRAINT_A); - } - - /** - * {@inheritDoc} - */ - @Override - public List> getReferences() { - return Arrays.>asList(Keys.FK_AB_AUTHOR, Keys.FK_AB_BOOK); - } - - /** - * {@inheritDoc} - */ - @Override - public AuthorBook as(String alias) { - return new AuthorBook(alias, this); - } - - /** - * Rename this table - */ - public AuthorBook rename(String name) { - return new AuthorBook(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Book.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Book.java deleted file mode 100644 index 33b38e1eb5..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/Book.java +++ /dev/null @@ -1,113 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.public_.tables; - - -import com.baeldung.jooq.introduction.db.public_.Keys; -import com.baeldung.jooq.introduction.db.public_.Public; -import com.baeldung.jooq.introduction.db.public_.tables.records.BookRecord; - -import java.util.Arrays; -import java.util.List; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Table; -import org.jooq.TableField; -import org.jooq.UniqueKey; -import org.jooq.impl.TableImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class Book extends TableImpl { - - private static final long serialVersionUID = -1685336167; - - /** - * The reference instance of PUBLIC.BOOK - */ - public static final Book BOOK = new Book(); - - /** - * The class holding records for this type - */ - @Override - public Class getRecordType() { - return BookRecord.class; - } - - /** - * The column PUBLIC.BOOK.ID. - */ - public final TableField ID = createField("ID", org.jooq.impl.SQLDataType.INTEGER.nullable(false), this, ""); - - /** - * The column PUBLIC.BOOK.TITLE. - */ - public final TableField TITLE = createField("TITLE", org.jooq.impl.SQLDataType.VARCHAR.length(100).nullable(false), this, ""); - - /** - * Create a PUBLIC.BOOK table reference - */ - public Book() { - this("BOOK", null); - } - - /** - * Create an aliased PUBLIC.BOOK table reference - */ - public Book(String alias) { - this(alias, BOOK); - } - - private Book(String alias, Table aliased) { - this(alias, aliased, null); - } - - private Book(String alias, Table aliased, Field[] parameters) { - super(alias, Public.PUBLIC, aliased, parameters, ""); - } - - /** - * {@inheritDoc} - */ - @Override - public UniqueKey getPrimaryKey() { - return Keys.CONSTRAINT_1; - } - - /** - * {@inheritDoc} - */ - @Override - public List> getKeys() { - return Arrays.>asList(Keys.CONSTRAINT_1); - } - - /** - * {@inheritDoc} - */ - @Override - public Book as(String alias) { - return new Book(alias, this); - } - - /** - * Rename this table - */ - public Book rename(String name) { - return new Book(name, null); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorBookRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorBookRecord.java deleted file mode 100644 index 2e9a07ba4f..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorBookRecord.java +++ /dev/null @@ -1,172 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.public_.tables.records; - - -import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record2; -import org.jooq.Row2; -import org.jooq.impl.UpdatableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class AuthorBookRecord extends UpdatableRecordImpl implements Record2 { - - private static final long serialVersionUID = -1057354033; - - /** - * Setter for PUBLIC.AUTHOR_BOOK.AUTHOR_ID. - */ - public void setAuthorId(Integer value) { - setValue(0, value); - } - - /** - * Getter for PUBLIC.AUTHOR_BOOK.AUTHOR_ID. - */ - public Integer getAuthorId() { - return (Integer) getValue(0); - } - - /** - * Setter for PUBLIC.AUTHOR_BOOK.BOOK_ID. - */ - public void setBookId(Integer value) { - setValue(1, value); - } - - /** - * Getter for PUBLIC.AUTHOR_BOOK.BOOK_ID. - */ - public Integer getBookId() { - return (Integer) getValue(1); - } - - // ------------------------------------------------------------------------- - // Primary key information - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Record2 key() { - return (Record2) super.key(); - } - - // ------------------------------------------------------------------------- - // Record2 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row2 fieldsRow() { - return (Row2) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row2 valuesRow() { - return (Row2) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return AuthorBook.AUTHOR_BOOK.AUTHOR_ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return AuthorBook.AUTHOR_BOOK.BOOK_ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value1() { - return getAuthorId(); - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value2() { - return getBookId(); - } - - /** - * {@inheritDoc} - */ - @Override - public AuthorBookRecord value1(Integer value) { - setAuthorId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public AuthorBookRecord value2(Integer value) { - setBookId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public AuthorBookRecord values(Integer value1, Integer value2) { - value1(value1); - value2(value2); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached AuthorBookRecord - */ - public AuthorBookRecord() { - super(AuthorBook.AUTHOR_BOOK); - } - - /** - * Create a detached, initialised AuthorBookRecord - */ - public AuthorBookRecord(Integer authorId, Integer bookId) { - super(AuthorBook.AUTHOR_BOOK); - - setValue(0, authorId); - setValue(1, bookId); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorRecord.java deleted file mode 100644 index 5d6d88b0c3..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/AuthorRecord.java +++ /dev/null @@ -1,214 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.public_.tables.records; - - -import com.baeldung.jooq.introduction.db.public_.tables.Author; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record1; -import org.jooq.Record3; -import org.jooq.Row3; -import org.jooq.impl.UpdatableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class AuthorRecord extends UpdatableRecordImpl implements Record3 { - - private static final long serialVersionUID = 253757039; - - /** - * Setter for PUBLIC.AUTHOR.ID. - */ - public void setId(Integer value) { - setValue(0, value); - } - - /** - * Getter for PUBLIC.AUTHOR.ID. - */ - public Integer getId() { - return (Integer) getValue(0); - } - - /** - * Setter for PUBLIC.AUTHOR.FIRST_NAME. - */ - public void setFirstName(String value) { - setValue(1, value); - } - - /** - * Getter for PUBLIC.AUTHOR.FIRST_NAME. - */ - public String getFirstName() { - return (String) getValue(1); - } - - /** - * Setter for PUBLIC.AUTHOR.LAST_NAME. - */ - public void setLastName(String value) { - setValue(2, value); - } - - /** - * Getter for PUBLIC.AUTHOR.LAST_NAME. - */ - public String getLastName() { - return (String) getValue(2); - } - - // ------------------------------------------------------------------------- - // Primary key information - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Record1 key() { - return (Record1) super.key(); - } - - // ------------------------------------------------------------------------- - // Record3 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row3 fieldsRow() { - return (Row3) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row3 valuesRow() { - return (Row3) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Author.AUTHOR.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Author.AUTHOR.FIRST_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field3() { - return Author.AUTHOR.LAST_NAME; - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value1() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getFirstName(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value3() { - return getLastName(); - } - - /** - * {@inheritDoc} - */ - @Override - public AuthorRecord value1(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public AuthorRecord value2(String value) { - setFirstName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public AuthorRecord value3(String value) { - setLastName(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public AuthorRecord values(Integer value1, String value2, String value3) { - value1(value1); - value2(value2); - value3(value3); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached AuthorRecord - */ - public AuthorRecord() { - super(Author.AUTHOR); - } - - /** - * Create a detached, initialised AuthorRecord - */ - public AuthorRecord(Integer id, String firstName, String lastName) { - super(Author.AUTHOR); - - setValue(0, id); - setValue(1, firstName); - setValue(2, lastName); - } -} diff --git a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/BookRecord.java b/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/BookRecord.java deleted file mode 100644 index 1725dccff0..0000000000 --- a/jooq-spring/src/main/java/com/baeldung/jooq/introduction/db/public_/tables/records/BookRecord.java +++ /dev/null @@ -1,173 +0,0 @@ -/** - * This class is generated by jOOQ - */ -package com.baeldung.jooq.introduction.db.public_.tables.records; - - -import com.baeldung.jooq.introduction.db.public_.tables.Book; - -import javax.annotation.Generated; - -import org.jooq.Field; -import org.jooq.Record1; -import org.jooq.Record2; -import org.jooq.Row2; -import org.jooq.impl.UpdatableRecordImpl; - - -/** - * This class is generated by jOOQ. - */ -@Generated( - value = { - "http://www.jooq.org", - "jOOQ version:3.7.3" - }, - comments = "This class is generated by jOOQ" -) -@SuppressWarnings({ "all", "unchecked", "rawtypes" }) -public class BookRecord extends UpdatableRecordImpl implements Record2 { - - private static final long serialVersionUID = -434165872; - - /** - * Setter for PUBLIC.BOOK.ID. - */ - public void setId(Integer value) { - setValue(0, value); - } - - /** - * Getter for PUBLIC.BOOK.ID. - */ - public Integer getId() { - return (Integer) getValue(0); - } - - /** - * Setter for PUBLIC.BOOK.TITLE. - */ - public void setTitle(String value) { - setValue(1, value); - } - - /** - * Getter for PUBLIC.BOOK.TITLE. - */ - public String getTitle() { - return (String) getValue(1); - } - - // ------------------------------------------------------------------------- - // Primary key information - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Record1 key() { - return (Record1) super.key(); - } - - // ------------------------------------------------------------------------- - // Record2 type implementation - // ------------------------------------------------------------------------- - - /** - * {@inheritDoc} - */ - @Override - public Row2 fieldsRow() { - return (Row2) super.fieldsRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Row2 valuesRow() { - return (Row2) super.valuesRow(); - } - - /** - * {@inheritDoc} - */ - @Override - public Field field1() { - return Book.BOOK.ID; - } - - /** - * {@inheritDoc} - */ - @Override - public Field field2() { - return Book.BOOK.TITLE; - } - - /** - * {@inheritDoc} - */ - @Override - public Integer value1() { - return getId(); - } - - /** - * {@inheritDoc} - */ - @Override - public String value2() { - return getTitle(); - } - - /** - * {@inheritDoc} - */ - @Override - public BookRecord value1(Integer value) { - setId(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public BookRecord value2(String value) { - setTitle(value); - return this; - } - - /** - * {@inheritDoc} - */ - @Override - public BookRecord values(Integer value1, String value2) { - value1(value1); - value2(value2); - return this; - } - - // ------------------------------------------------------------------------- - // Constructors - // ------------------------------------------------------------------------- - - /** - * Create a detached BookRecord - */ - public BookRecord() { - super(Book.BOOK); - } - - /** - * Create a detached, initialised BookRecord - */ - public BookRecord(Integer id, String title) { - super(Book.BOOK); - - setValue(0, id); - setValue(1, title); - } -} From 34abb0eab7e419cbe5babdee7667643f38e61c63 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 7 Jun 2016 18:05:50 +0200 Subject: [PATCH 057/283] Refactor jOOQ-Spring --- jooq-spring/.classpath | 31 ------ jooq-spring/.project | 29 ------ .../introduction/ExceptionTranslator.java | 2 +- .../jooq/introduction/PersistenceContext.java | 4 +- .../baeldung/jooq/introduction/QueryTest.java | 93 +++++++++++------ .../baeldung/jooq/springboot/Application.java | 11 +-- .../jooq/springboot/SpringBootTest.java | 99 +++++++++++++------ pom.xml | 1 + 8 files changed, 144 insertions(+), 126 deletions(-) delete mode 100644 jooq-spring/.classpath delete mode 100644 jooq-spring/.project diff --git a/jooq-spring/.classpath b/jooq-spring/.classpath deleted file mode 100644 index 9ae7bca0fc..0000000000 --- a/jooq-spring/.classpath +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/jooq-spring/.project b/jooq-spring/.project deleted file mode 100644 index a291146b79..0000000000 --- a/jooq-spring/.project +++ /dev/null @@ -1,29 +0,0 @@ - - - jooq-spring - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.springframework.ide.eclipse.core.springbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.springframework.ide.eclipse.core.springnature - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java index 7bee21f077..8312f20c05 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/ExceptionTranslator.java @@ -8,12 +8,12 @@ import org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator; import org.springframework.jdbc.support.SQLExceptionTranslator; public class ExceptionTranslator extends DefaultExecuteListener { - private static final long serialVersionUID = 649359748808106775L; @Override public void exception(ExecuteContext context) { SQLDialect dialect = context.configuration().dialect(); SQLExceptionTranslator translator = new SQLErrorCodeSQLExceptionTranslator(dialect.name()); + context.exception(translator.translate("Access database using jOOQ", context.sql(), context.sqlException())); } } \ No newline at end of file diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContext.java b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContext.java index ee34c00679..df628f9f78 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContext.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/PersistenceContext.java @@ -1,6 +1,5 @@ package com.baeldung.jooq.introduction; -import javax.sql.DataSource; import org.h2.jdbcx.JdbcDataSource; import org.jooq.SQLDialect; import org.jooq.impl.DataSourceConnectionProvider; @@ -17,11 +16,14 @@ import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; import org.springframework.transaction.annotation.EnableTransactionManagement; +import javax.sql.DataSource; + @Configuration @ComponentScan({ "com.baeldung.jooq.introduction.db.public_.tables" }) @EnableTransactionManagement @PropertySource("classpath:intro_config.properties") public class PersistenceContext { + @Autowired private Environment environment; diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryTest.java b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryTest.java index bc12dff5a0..68f975dd6d 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryTest.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/introduction/QueryTest.java @@ -1,8 +1,5 @@ package com.baeldung.jooq.introduction; -import com.baeldung.jooq.introduction.db.public_.tables.Author; -import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; -import com.baeldung.jooq.introduction.db.public_.tables.Book; import org.jooq.DSLContext; import org.jooq.Record3; import org.jooq.Result; @@ -15,6 +12,9 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; +import static com.baeldung.jooq.introduction.db.public_.tables.Author.AUTHOR; +import static com.baeldung.jooq.introduction.db.public_.tables.AuthorBook.AUTHOR_BOOK; +import static com.baeldung.jooq.introduction.db.public_.tables.Book.BOOK; import static org.junit.Assert.assertEquals; @ContextConfiguration(classes = PersistenceContext.class) @@ -25,61 +25,98 @@ public class QueryTest { @Autowired private DSLContext dsl; - Author author = Author.AUTHOR; - Book book = Book.BOOK; - AuthorBook authorBook = AuthorBook.AUTHOR_BOOK; - @Test public void givenValidData_whenInserting_thenSucceed() { - dsl.insertInto(author).set(author.ID, 4).set(author.FIRST_NAME, "Herbert").set(author.LAST_NAME, "Schildt").execute(); - dsl.insertInto(book).set(book.ID, 4).set(book.TITLE, "A Beginner's Guide").execute(); - dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 4).execute(); - Result> result = dsl.select(author.ID, author.LAST_NAME, DSL.count()).from(author).join(authorBook).on(author.ID.equal(authorBook.AUTHOR_ID)).join(book).on(authorBook.BOOK_ID.equal(book.ID)) - .groupBy(author.LAST_NAME).fetch(); + dsl.insertInto(AUTHOR) + .set(AUTHOR.ID, 4) + .set(AUTHOR.FIRST_NAME, "Herbert") + .set(AUTHOR.LAST_NAME, "Schildt") + .execute(); + + dsl.insertInto(BOOK) + .set(BOOK.ID, 4) + .set(BOOK.TITLE, "A Beginner's Guide") + .execute(); + + dsl.insertInto(AUTHOR_BOOK) + .set(AUTHOR_BOOK.AUTHOR_ID, 4) + .set(AUTHOR_BOOK.BOOK_ID, 4) + .execute(); + + final Result> result = dsl.select(AUTHOR.ID, AUTHOR.LAST_NAME, DSL.count()) + .from(AUTHOR) + .join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID)) + .join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID)) + .groupBy(AUTHOR.LAST_NAME).fetch(); assertEquals(3, result.size()); - assertEquals("Sierra", result.getValue(0, author.LAST_NAME)); + assertEquals("Sierra", result.getValue(0, AUTHOR.LAST_NAME)); assertEquals(Integer.valueOf(2), result.getValue(0, DSL.count())); - assertEquals("Schildt", result.getValue(2, author.LAST_NAME)); + assertEquals("Schildt", result.getValue(2, AUTHOR.LAST_NAME)); assertEquals(Integer.valueOf(1), result.getValue(2, DSL.count())); } @Test(expected = DataAccessException.class) public void givenInvalidData_whenInserting_thenFail() { - dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 5).execute(); + dsl.insertInto(AUTHOR_BOOK).set(AUTHOR_BOOK.AUTHOR_ID, 4).set(AUTHOR_BOOK.BOOK_ID, 5).execute(); } @Test public void givenValidData_whenUpdating_thenSucceed() { - dsl.update(author).set(author.LAST_NAME, "Baeldung").where(author.ID.equal(3)).execute(); - dsl.update(book).set(book.TITLE, "Building your REST API with Spring").where(book.ID.equal(3)).execute(); - dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 3).set(authorBook.BOOK_ID, 3).execute(); - Result> result = dsl.select(author.ID, author.LAST_NAME, book.TITLE).from(author).join(authorBook).on(author.ID.equal(authorBook.AUTHOR_ID)).join(book).on(authorBook.BOOK_ID.equal(book.ID)).where(author.ID.equal(3)) + dsl.update(AUTHOR) + .set(AUTHOR.LAST_NAME, "Baeldung") + .where(AUTHOR.ID.equal(3)) + .execute(); + + dsl.update(BOOK) + .set(BOOK.TITLE, "Building your REST API with Spring") + .where(BOOK.ID.equal(3)).execute(); + + dsl.insertInto(AUTHOR_BOOK) + .set(AUTHOR_BOOK.AUTHOR_ID, 3) + .set(AUTHOR_BOOK.BOOK_ID, 3) + .execute(); + + final Result> result = dsl.select(AUTHOR.ID, AUTHOR.LAST_NAME, BOOK.TITLE) + .from(AUTHOR) + .join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID)) + .join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID)) + .where(AUTHOR.ID.equal(3)) .fetch(); assertEquals(1, result.size()); - assertEquals(Integer.valueOf(3), result.getValue(0, author.ID)); - assertEquals("Baeldung", result.getValue(0, author.LAST_NAME)); - assertEquals("Building your REST API with Spring", result.getValue(0, book.TITLE)); + assertEquals(Integer.valueOf(3), result.getValue(0, AUTHOR.ID)); + assertEquals("Baeldung", result.getValue(0, AUTHOR.LAST_NAME)); + assertEquals("Building your REST API with Spring", result.getValue(0, BOOK.TITLE)); } @Test(expected = DataAccessException.class) public void givenInvalidData_whenUpdating_thenFail() { - dsl.update(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 5).execute(); + dsl.update(AUTHOR_BOOK) + .set(AUTHOR_BOOK.AUTHOR_ID, 4) + .set(AUTHOR_BOOK.BOOK_ID, 5) + .execute(); } @Test public void givenValidData_whenDeleting_thenSucceed() { - dsl.delete(author).where(author.ID.lt(3)).execute(); - Result> result = dsl.select(author.ID, author.FIRST_NAME, author.LAST_NAME).from(author).fetch(); + dsl.delete(AUTHOR) + .where(AUTHOR.ID.lt(3)) + .execute(); + + final Result> result = dsl.select(AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME) + .from(AUTHOR) + .fetch(); assertEquals(1, result.size()); - assertEquals("Bryan", result.getValue(0, author.FIRST_NAME)); - assertEquals("Basham", result.getValue(0, author.LAST_NAME)); + assertEquals("Bryan", result.getValue(0, AUTHOR.FIRST_NAME)); + assertEquals("Basham", result.getValue(0, AUTHOR.LAST_NAME)); } @Test(expected = DataAccessException.class) public void givenInvalidData_whenDeleting_thenFail() { - dsl.delete(book).where(book.ID.equal(1)).execute(); + dsl.delete(BOOK) + .where(BOOK.ID.equal(1)) + .execute(); } } \ No newline at end of file diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java index a52f0a0ef3..844a2989a5 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java @@ -1,12 +1,10 @@ package com.baeldung.jooq.springboot; -import javax.sql.DataSource; - +import com.baeldung.jooq.introduction.ExceptionTranslator; import org.jooq.impl.DataSourceConnectionProvider; import org.jooq.impl.DefaultConfiguration; import org.jooq.impl.DefaultDSLContext; import org.jooq.impl.DefaultExecuteListenerProvider; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @@ -16,14 +14,14 @@ import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; import org.springframework.transaction.annotation.EnableTransactionManagement; -import com.baeldung.jooq.introduction.ExceptionTranslator; +import javax.sql.DataSource; @SpringBootApplication @EnableTransactionManagement public class Application { + @Autowired private Environment environment; - private DataSource dataSource; public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); @@ -41,7 +39,7 @@ public class Application { } public DataSourceTransactionManager transactionManager() { - return new DataSourceTransactionManager(dataSource); + return new DataSourceTransactionManager(dataSource()); } @Bean @@ -60,6 +58,7 @@ public class Application { public DefaultConfiguration configuration() { DefaultConfiguration jooqConfiguration = new DefaultConfiguration(); + jooqConfiguration.set(connectionProvider()); jooqConfiguration.set(new DefaultExecuteListenerProvider(exceptionTransformer())); diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java index bf5cc250a8..f9427f30fb 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/SpringBootTest.java @@ -1,7 +1,5 @@ package com.baeldung.jooq.springboot; -import static org.junit.Assert.*; - import org.jooq.DSLContext; import org.jooq.Record3; import org.jooq.Result; @@ -14,72 +12,113 @@ import org.springframework.dao.DataAccessException; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; -import com.baeldung.jooq.introduction.db.public_.tables.Author; -import com.baeldung.jooq.introduction.db.public_.tables.AuthorBook; -import com.baeldung.jooq.introduction.db.public_.tables.Book; +import static com.baeldung.jooq.introduction.db.public_.tables.Author.AUTHOR; +import static com.baeldung.jooq.introduction.db.public_.tables.AuthorBook.AUTHOR_BOOK; +import static com.baeldung.jooq.introduction.db.public_.tables.Book.BOOK; +import static org.junit.Assert.assertEquals; @SpringApplicationConfiguration(Application.class) @Transactional("transactionManager") @RunWith(SpringJUnit4ClassRunner.class) public class SpringBootTest { - @Autowired - private DSLContext dsl; - Author author = Author.AUTHOR; - Book book = Book.BOOK; - AuthorBook authorBook = AuthorBook.AUTHOR_BOOK; + @Autowired + private DSLContext dsl; @Test public void givenValidData_whenInserting_thenSucceed() { - dsl.insertInto(author).set(author.ID, 4).set(author.FIRST_NAME, "Herbert").set(author.LAST_NAME, "Schildt").execute(); - dsl.insertInto(book).set(book.ID, 4).set(book.TITLE, "A Beginner's Guide").execute(); - dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 4).execute(); - Result> result = dsl.select(author.ID, author.LAST_NAME, DSL.count()).from(author).join(authorBook).on(author.ID.equal(authorBook.AUTHOR_ID)).join(book).on(authorBook.BOOK_ID.equal(book.ID)).groupBy(author.LAST_NAME) + dsl.insertInto(AUTHOR) + .set(AUTHOR.ID, 4) + .set(AUTHOR.FIRST_NAME, "Herbert") + .set(AUTHOR.LAST_NAME, "Schildt") + .execute(); + + dsl.insertInto(BOOK) + .set(BOOK.ID, 4) + .set(BOOK.TITLE, "A Beginner's Guide") + .execute(); + + dsl.insertInto(AUTHOR_BOOK) + .set(AUTHOR_BOOK.AUTHOR_ID, 4) + .set(AUTHOR_BOOK.BOOK_ID, 4) + .execute(); + + final Result> result = dsl.select(AUTHOR.ID, AUTHOR.LAST_NAME, DSL.count()) + .from(AUTHOR).join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID)) + .join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID)) + .groupBy(AUTHOR.LAST_NAME) .fetch(); assertEquals(3, result.size()); - assertEquals("Sierra", result.getValue(0, author.LAST_NAME)); + assertEquals("Sierra", result.getValue(0, AUTHOR.LAST_NAME)); assertEquals(Integer.valueOf(2), result.getValue(0, DSL.count())); - assertEquals("Schildt", result.getValue(2, author.LAST_NAME)); + assertEquals("Schildt", result.getValue(2, AUTHOR.LAST_NAME)); assertEquals(Integer.valueOf(1), result.getValue(2, DSL.count())); } @Test(expected = DataAccessException.class) public void givenInvalidData_whenInserting_thenFail() { - dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 5).execute(); + dsl.insertInto(AUTHOR_BOOK) + .set(AUTHOR_BOOK.AUTHOR_ID, 4) + .set(AUTHOR_BOOK.BOOK_ID, 5) + .execute(); } @Test public void givenValidData_whenUpdating_thenSucceed() { - dsl.update(author).set(author.LAST_NAME, "Baeldung").where(author.ID.equal(3)).execute(); - dsl.update(book).set(book.TITLE, "Building your REST API with Spring").where(book.ID.equal(3)).execute(); - dsl.insertInto(authorBook).set(authorBook.AUTHOR_ID, 3).set(authorBook.BOOK_ID, 3).execute(); - Result> result = dsl.select(author.ID, author.LAST_NAME, book.TITLE).from(author).join(authorBook).on(author.ID.equal(authorBook.AUTHOR_ID)).join(book).on(authorBook.BOOK_ID.equal(book.ID)).where(author.ID.equal(3)) + dsl.update(AUTHOR) + .set(AUTHOR.LAST_NAME, "Baeldung") + .where(AUTHOR.ID.equal(3)) + .execute(); + + dsl.update(BOOK) + .set(BOOK.TITLE, "Building your REST API with Spring") + .where(BOOK.ID.equal(3)) + .execute(); + + dsl.insertInto(AUTHOR_BOOK) + .set(AUTHOR_BOOK.AUTHOR_ID, 3) + .set(AUTHOR_BOOK.BOOK_ID, 3) + .execute(); + + final Result> result = dsl.select(AUTHOR.ID, AUTHOR.LAST_NAME, BOOK.TITLE) + .from(AUTHOR).join(AUTHOR_BOOK).on(AUTHOR.ID.equal(AUTHOR_BOOK.AUTHOR_ID)) + .join(BOOK).on(AUTHOR_BOOK.BOOK_ID.equal(BOOK.ID)) + .where(AUTHOR.ID.equal(3)) .fetch(); assertEquals(1, result.size()); - assertEquals(Integer.valueOf(3), result.getValue(0, author.ID)); - assertEquals("Baeldung", result.getValue(0, author.LAST_NAME)); - assertEquals("Building your REST API with Spring", result.getValue(0, book.TITLE)); + assertEquals(Integer.valueOf(3), result.getValue(0, AUTHOR.ID)); + assertEquals("Baeldung", result.getValue(0, AUTHOR.LAST_NAME)); + assertEquals("Building your REST API with Spring", result.getValue(0, BOOK.TITLE)); } @Test(expected = DataAccessException.class) public void givenInvalidData_whenUpdating_thenFail() { - dsl.update(authorBook).set(authorBook.AUTHOR_ID, 4).set(authorBook.BOOK_ID, 5).execute(); + dsl.update(AUTHOR_BOOK) + .set(AUTHOR_BOOK.AUTHOR_ID, 4) + .set(AUTHOR_BOOK.BOOK_ID, 5) + .execute(); } @Test public void givenValidData_whenDeleting_thenSucceed() { - dsl.delete(author).where(author.ID.lt(3)).execute(); - Result> result = dsl.select(author.ID, author.FIRST_NAME, author.LAST_NAME).from(author).fetch(); + dsl.delete(AUTHOR) + .where(AUTHOR.ID.lt(3)) + .execute(); + + final Result> result = dsl.select(AUTHOR.ID, AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME) + .from(AUTHOR).fetch(); assertEquals(1, result.size()); - assertEquals("Bryan", result.getValue(0, author.FIRST_NAME)); - assertEquals("Basham", result.getValue(0, author.LAST_NAME)); + assertEquals("Bryan", result.getValue(0, AUTHOR.FIRST_NAME)); + assertEquals("Basham", result.getValue(0, AUTHOR.LAST_NAME)); } @Test(expected = DataAccessException.class) public void givenInvalidData_whenDeleting_thenFail() { - dsl.delete(book).where(book.ID.equal(1)).execute(); + dsl.delete(BOOK) + .where(BOOK.ID.equal(1)) + .execute(); } } \ No newline at end of file diff --git a/pom.xml b/pom.xml index d6a1d7c034..7a51347af6 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,7 @@ httpclient jackson javaxval + jooq-spring json-path mockito From b7812b951e16aa2427a0a7db4c4c1cf8cb28e21b Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 7 Jun 2016 18:09:51 +0200 Subject: [PATCH 058/283] Refactor .gitignore --- .gitignore | 3 --- jooq-spring/.gitignore | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) create mode 100644 jooq-spring/.gitignore diff --git a/.gitignore b/.gitignore index 1a67437a83..48ac4000a2 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,3 @@ log/ target/ spring-openid/src/main/resources/application.properties - -# Autogenerated jOOQ files -jooq-spring/src/main/java/com/baeldung/jooq/introduction/db diff --git a/jooq-spring/.gitignore b/jooq-spring/.gitignore new file mode 100644 index 0000000000..aba850c8e6 --- /dev/null +++ b/jooq-spring/.gitignore @@ -0,0 +1 @@ +/src/main/java/com/baeldung/jooq/introduction/db \ No newline at end of file From 27250c67b1144a5cf8f372d7c1c189d66674e1ba Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 7 Jun 2016 18:20:50 +0200 Subject: [PATCH 059/283] Refactor wiremock/cucumber examples --- rest-testing/.classpath | 36 ------- ...e.wst.jsdt.core.javascriptValidator.launch | 7 -- rest-testing/.gitignore | 6 +- rest-testing/.project | 36 ------- rest-testing/.settings/.jsdtscope | 5 - .../.settings/org.eclipse.jdt.core.prefs | 95 ------------------- .../.settings/org.eclipse.jdt.ui.prefs | 55 ----------- .../.settings/org.eclipse.m2e.core.prefs | 4 - .../.settings/org.eclipse.m2e.wtp.prefs | 2 - .../org.eclipse.wst.common.component | 8 -- ....eclipse.wst.common.project.facet.core.xml | 4 - ...rg.eclipse.wst.jsdt.ui.superType.container | 1 - .../org.eclipse.wst.jsdt.ui.superType.name | 1 - .../org.eclipse.wst.validation.prefs | 14 --- .../org.eclipse.wst.ws.service.policy.prefs | 2 - rest-testing/.springBeans | 14 --- .../rest/cucumber/StepDefinition.java | 60 ++++++++---- .../wiremock/introduction/JUnitManaged.java | 87 ++++++++++------- .../introduction/ProgrammaticallyManaged.java | 36 +++---- rest-testing/src/test/resources/.gitignore | 13 --- 20 files changed, 115 insertions(+), 371 deletions(-) delete mode 100644 rest-testing/.classpath delete mode 100644 rest-testing/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch delete mode 100644 rest-testing/.project delete mode 100644 rest-testing/.settings/.jsdtscope delete mode 100644 rest-testing/.settings/org.eclipse.jdt.core.prefs delete mode 100644 rest-testing/.settings/org.eclipse.jdt.ui.prefs delete mode 100644 rest-testing/.settings/org.eclipse.m2e.core.prefs delete mode 100644 rest-testing/.settings/org.eclipse.m2e.wtp.prefs delete mode 100644 rest-testing/.settings/org.eclipse.wst.common.component delete mode 100644 rest-testing/.settings/org.eclipse.wst.common.project.facet.core.xml delete mode 100644 rest-testing/.settings/org.eclipse.wst.jsdt.ui.superType.container delete mode 100644 rest-testing/.settings/org.eclipse.wst.jsdt.ui.superType.name delete mode 100644 rest-testing/.settings/org.eclipse.wst.validation.prefs delete mode 100644 rest-testing/.settings/org.eclipse.wst.ws.service.policy.prefs delete mode 100644 rest-testing/.springBeans delete mode 100644 rest-testing/src/test/resources/.gitignore diff --git a/rest-testing/.classpath b/rest-testing/.classpath deleted file mode 100644 index 8ebf6d9c31..0000000000 --- a/rest-testing/.classpath +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rest-testing/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch b/rest-testing/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch deleted file mode 100644 index 627021fb96..0000000000 --- a/rest-testing/.externalToolBuilders/org.eclipse.wst.jsdt.core.javascriptValidator.launch +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/rest-testing/.gitignore b/rest-testing/.gitignore index 83c05e60c8..601d2281e5 100644 --- a/rest-testing/.gitignore +++ b/rest-testing/.gitignore @@ -10,4 +10,8 @@ # Packaged files # *.jar *.war -*.ear \ No newline at end of file +*.ear + +.externalToolBuilders +.settings +.springBeans \ No newline at end of file diff --git a/rest-testing/.project b/rest-testing/.project deleted file mode 100644 index 1dc9ce93fe..0000000000 --- a/rest-testing/.project +++ /dev/null @@ -1,36 +0,0 @@ - - - rest-testing - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.wst.common.project.facet.core.builder - - - - - org.eclipse.wst.validation.validationbuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jem.workbench.JavaEMFNature - org.eclipse.wst.common.modulecore.ModuleCoreNature - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - org.eclipse.wst.common.project.facet.core.nature - - diff --git a/rest-testing/.settings/.jsdtscope b/rest-testing/.settings/.jsdtscope deleted file mode 100644 index 7b3f0c8b9f..0000000000 --- a/rest-testing/.settings/.jsdtscope +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/rest-testing/.settings/org.eclipse.jdt.core.prefs b/rest-testing/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index b126d6476b..0000000000 --- a/rest-testing/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,95 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore -org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull -org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault -org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable -org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.autoboxing=ignore -org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning -org.eclipse.jdt.core.compiler.problem.deadCode=warning -org.eclipse.jdt.core.compiler.problem.deprecation=warning -org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled -org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled -org.eclipse.jdt.core.compiler.problem.discouragedReference=warning -org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore -org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore -org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled -org.eclipse.jdt.core.compiler.problem.fieldHiding=error -org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning -org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning -org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled -org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning -org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore -org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore -org.eclipse.jdt.core.compiler.problem.localVariableHiding=error -org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning -org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore -org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled -org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore -org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled -org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning -org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore -org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning -org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning -org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore -org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error -org.eclipse.jdt.core.compiler.problem.nullReference=warning -org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error -org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning -org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning -org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore -org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore -org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore -org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore -org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning -org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning -org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore -org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore -org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore -org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore -org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled -org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning -org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled -org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled -org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore -org.eclipse.jdt.core.compiler.problem.typeParameterHiding=error -org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=enabled -org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning -org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning -org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore -org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning -org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore -org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore -org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled -org.eclipse.jdt.core.compiler.problem.unusedImport=warning -org.eclipse.jdt.core.compiler.problem.unusedLabel=warning -org.eclipse.jdt.core.compiler.problem.unusedLocal=warning -org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore -org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled -org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled -org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning -org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning -org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/rest-testing/.settings/org.eclipse.jdt.ui.prefs b/rest-testing/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 471e9b0d81..0000000000 --- a/rest-testing/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,55 +0,0 @@ -#Sat Jan 21 23:04:06 EET 2012 -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=true -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=true -sp_cleanup.correct_indentation=true -sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=true -sp_cleanup.make_local_variable_final=true -sp_cleanup.make_parameters_final=true -sp_cleanup.make_private_fields_final=false -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=true -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=false -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=true -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=true -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=true -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=false -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=true -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=true -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true diff --git a/rest-testing/.settings/org.eclipse.m2e.core.prefs b/rest-testing/.settings/org.eclipse.m2e.core.prefs deleted file mode 100644 index f897a7f1cb..0000000000 --- a/rest-testing/.settings/org.eclipse.m2e.core.prefs +++ /dev/null @@ -1,4 +0,0 @@ -activeProfiles= -eclipse.preferences.version=1 -resolveWorkspaceProjects=true -version=1 diff --git a/rest-testing/.settings/org.eclipse.m2e.wtp.prefs b/rest-testing/.settings/org.eclipse.m2e.wtp.prefs deleted file mode 100644 index ef86089622..0000000000 --- a/rest-testing/.settings/org.eclipse.m2e.wtp.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.m2e.wtp.enabledProjectSpecificPrefs=false diff --git a/rest-testing/.settings/org.eclipse.wst.common.component b/rest-testing/.settings/org.eclipse.wst.common.component deleted file mode 100644 index e98377cb0f..0000000000 --- a/rest-testing/.settings/org.eclipse.wst.common.component +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/rest-testing/.settings/org.eclipse.wst.common.project.facet.core.xml b/rest-testing/.settings/org.eclipse.wst.common.project.facet.core.xml deleted file mode 100644 index f4ef8aa0a5..0000000000 --- a/rest-testing/.settings/org.eclipse.wst.common.project.facet.core.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/rest-testing/.settings/org.eclipse.wst.jsdt.ui.superType.container b/rest-testing/.settings/org.eclipse.wst.jsdt.ui.superType.container deleted file mode 100644 index 3bd5d0a480..0000000000 --- a/rest-testing/.settings/org.eclipse.wst.jsdt.ui.superType.container +++ /dev/null @@ -1 +0,0 @@ -org.eclipse.wst.jsdt.launching.baseBrowserLibrary \ No newline at end of file diff --git a/rest-testing/.settings/org.eclipse.wst.jsdt.ui.superType.name b/rest-testing/.settings/org.eclipse.wst.jsdt.ui.superType.name deleted file mode 100644 index 05bd71b6ec..0000000000 --- a/rest-testing/.settings/org.eclipse.wst.jsdt.ui.superType.name +++ /dev/null @@ -1 +0,0 @@ -Window \ No newline at end of file diff --git a/rest-testing/.settings/org.eclipse.wst.validation.prefs b/rest-testing/.settings/org.eclipse.wst.validation.prefs deleted file mode 100644 index cacf5451ae..0000000000 --- a/rest-testing/.settings/org.eclipse.wst.validation.prefs +++ /dev/null @@ -1,14 +0,0 @@ -DELEGATES_PREFERENCE=delegateValidatorList -USER_BUILD_PREFERENCE=enabledBuildValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator; -USER_MANUAL_PREFERENCE=enabledManualValidatorListorg.eclipse.jst.j2ee.internal.classpathdep.ClasspathDependencyValidator; -USER_PREFERENCE=overrideGlobalPreferencestruedisableAllValidationfalseversion1.2.303.v201202090300 -eclipse.preferences.version=1 -override=true -suspend=false -vals/org.eclipse.jst.jsf.ui.JSFAppConfigValidator/global=FF01 -vals/org.eclipse.jst.jsp.core.JSPBatchValidator/global=FF01 -vals/org.eclipse.jst.jsp.core.JSPContentValidator/global=FF01 -vals/org.eclipse.jst.jsp.core.TLDValidator/global=FF01 -vals/org.eclipse.wst.dtd.core.dtdDTDValidator/global=FF01 -vals/org.eclipse.wst.jsdt.web.core.JsBatchValidator/global=TF02 -vf.version=3 diff --git a/rest-testing/.settings/org.eclipse.wst.ws.service.policy.prefs b/rest-testing/.settings/org.eclipse.wst.ws.service.policy.prefs deleted file mode 100644 index 9cfcabe16f..0000000000 --- a/rest-testing/.settings/org.eclipse.wst.ws.service.policy.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.wst.ws.service.policy.projectEnabled=false diff --git a/rest-testing/.springBeans b/rest-testing/.springBeans deleted file mode 100644 index a79097f40d..0000000000 --- a/rest-testing/.springBeans +++ /dev/null @@ -1,14 +0,0 @@ - - - 1 - - - - - - - src/main/webapp/WEB-INF/api-servlet.xml - - - - diff --git a/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java b/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java index 0d72c60950..b461da8403 100644 --- a/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java +++ b/rest-testing/src/test/java/com/baeldung/rest/cucumber/StepDefinition.java @@ -1,13 +1,8 @@ package com.baeldung.rest.cucumber; -import static org.junit.Assert.*; -import static org.hamcrest.CoreMatchers.containsString; -import static com.github.tomakehurst.wiremock.client.WireMock.*; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Scanner; - +import com.github.tomakehurst.wiremock.WireMockServer; +import cucumber.api.java.en.Then; +import cucumber.api.java.en.When; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; @@ -15,33 +10,55 @@ import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; -import com.github.tomakehurst.wiremock.WireMockServer; +import java.io.IOException; +import java.io.InputStream; +import java.util.Scanner; -import cucumber.api.java.en.Then; -import cucumber.api.java.en.When; +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.configureFor; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; public class StepDefinition { - InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("cucumber.json"); - String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); - WireMockServer wireMockServer = new WireMockServer(); - CloseableHttpClient httpClient = HttpClients.createDefault(); + private static final String CREATE_PATH = "/create"; + private static final String APPLICATION_JSON = "application/json"; + + private final InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("cucumber.json"); + private final String jsonString = new Scanner(jsonInputStream, "UTF-8").useDelimiter("\\Z").next(); + + private final WireMockServer wireMockServer = new WireMockServer(); + private final CloseableHttpClient httpClient = HttpClients.createDefault(); @When("^users upload data on a project$") public void usersUploadDataOnAProject() throws IOException { wireMockServer.start(); configureFor("localhost", 8080); - stubFor(post(urlEqualTo("/create")).withHeader("content-type", equalTo("application/json")).withRequestBody(containing("testing-framework")).willReturn(aResponse().withStatus(200))); + stubFor(post(urlEqualTo(CREATE_PATH)) + .withHeader("content-type", equalTo(APPLICATION_JSON)) + .withRequestBody(containing("testing-framework")) + .willReturn(aResponse().withStatus(200))); HttpPost request = new HttpPost("http://localhost:8080/create"); StringEntity entity = new StringEntity(jsonString); - request.addHeader("content-type", "application/json"); + request.addHeader("content-type", APPLICATION_JSON); request.setEntity(entity); HttpResponse response = httpClient.execute(request); assertEquals(200, response.getStatusLine().getStatusCode()); - verify(postRequestedFor(urlEqualTo("/create")).withHeader("content-type", equalTo("application/json"))); + verify(postRequestedFor(urlEqualTo(CREATE_PATH)) + .withHeader("content-type", equalTo(APPLICATION_JSON))); wireMockServer.stop(); } @@ -51,16 +68,17 @@ public class StepDefinition { wireMockServer.start(); configureFor("localhost", 8080); - stubFor(get(urlEqualTo("/projects/cucumber")).withHeader("accept", equalTo("application/json")).willReturn(aResponse().withBody(jsonString))); + stubFor(get(urlEqualTo("/projects/cucumber")).withHeader("accept", equalTo(APPLICATION_JSON)) + .willReturn(aResponse().withBody(jsonString))); HttpGet request = new HttpGet("http://localhost:8080/projects/" + projectName.toLowerCase()); - request.addHeader("accept", "application/json"); + request.addHeader("accept", APPLICATION_JSON); HttpResponse httpResponse = httpClient.execute(request); String responseString = convertResponseToString(httpResponse); assertThat(responseString, containsString("\"testing-framework\": \"cucumber\"")); assertThat(responseString, containsString("\"website\": \"cucumber.io\"")); - verify(getRequestedFor(urlEqualTo("/projects/cucumber")).withHeader("accept", equalTo("application/json"))); + verify(getRequestedFor(urlEqualTo("/projects/cucumber")).withHeader("accept", equalTo(APPLICATION_JSON))); wireMockServer.stop(); } diff --git a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java index f6a46256ac..664c3fac78 100644 --- a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java +++ b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/JUnitManaged.java @@ -1,24 +1,6 @@ package com.baeldung.rest.wiremock.introduction; -import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; -import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; -import static com.github.tomakehurst.wiremock.client.WireMock.get; -import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; -import static com.github.tomakehurst.wiremock.client.WireMock.post; -import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; -import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; -import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; -import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; -import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; -import static com.github.tomakehurst.wiremock.client.WireMock.matching; -import static com.github.tomakehurst.wiremock.client.WireMock.containing; -import static com.github.tomakehurst.wiremock.client.WireMock.verify; -import static org.junit.Assert.assertEquals; - -import java.io.IOException; -import java.io.InputStream; -import java.util.Scanner; - +import com.github.tomakehurst.wiremock.junit.WireMockRule; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; @@ -28,30 +10,60 @@ import org.apache.http.impl.client.HttpClients; import org.junit.Rule; import org.junit.Test; -import com.github.tomakehurst.wiremock.junit.WireMockRule; +import java.io.IOException; +import java.io.InputStream; +import java.util.Scanner; + +import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; +import static com.github.tomakehurst.wiremock.client.WireMock.containing; +import static com.github.tomakehurst.wiremock.client.WireMock.equalTo; +import static com.github.tomakehurst.wiremock.client.WireMock.get; +import static com.github.tomakehurst.wiremock.client.WireMock.getRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.matching; +import static com.github.tomakehurst.wiremock.client.WireMock.post; +import static com.github.tomakehurst.wiremock.client.WireMock.postRequestedFor; +import static com.github.tomakehurst.wiremock.client.WireMock.stubFor; +import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo; +import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching; +import static com.github.tomakehurst.wiremock.client.WireMock.verify; +import static org.junit.Assert.assertEquals; public class JUnitManaged { + + private static final String BAELDUNG_WIREMOCK_PATH = "/baeldung/wiremock"; + private static final String APPLICATION_JSON = "application/json"; + @Rule public WireMockRule wireMockRule = new WireMockRule(); @Test public void givenJUnitManagedServer_whenMatchingURL_thenCorrect() throws IOException { - stubFor(get(urlPathMatching("/baeldung/.*")).willReturn(aResponse().withStatus(200).withHeader("Content-Type", "application/json").withBody("\"testing-library\": \"WireMock\""))); + stubFor(get(urlPathMatching("/baeldung/.*")) + .willReturn(aResponse() + .withStatus(200) + .withHeader("Content-Type", APPLICATION_JSON) + .withBody("\"testing-library\": \"WireMock\""))); CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); HttpResponse httpResponse = httpClient.execute(request); String stringResponse = convertHttpResponseToString(httpResponse); - verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + verify(getRequestedFor(urlEqualTo(BAELDUNG_WIREMOCK_PATH))); assertEquals(200, httpResponse.getStatusLine().getStatusCode()); - assertEquals("application/json", httpResponse.getFirstHeader("Content-Type").getValue()); + assertEquals(APPLICATION_JSON, httpResponse.getFirstHeader("Content-Type").getValue()); assertEquals("\"testing-library\": \"WireMock\"", stringResponse); } @Test public void givenJUnitManagedServer_whenMatchingHeaders_thenCorrect() throws IOException { - stubFor(get(urlPathEqualTo("/baeldung/wiremock")).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503).withHeader("Content-Type", "text/html").withBody("!!! Service Unavailable !!!"))); + stubFor(get(urlPathEqualTo(BAELDUNG_WIREMOCK_PATH)) + .withHeader("Accept", matching("text/.*")) + .willReturn(aResponse() + .withStatus(503) + .withHeader("Content-Type", "text/html") + .withBody("!!! Service Unavailable !!!"))); CloseableHttpClient httpClient = HttpClients.createDefault(); HttpGet request = new HttpGet("http://localhost:8080/baeldung/wiremock"); @@ -59,7 +71,7 @@ public class JUnitManaged { HttpResponse httpResponse = httpClient.execute(request); String stringResponse = convertHttpResponseToString(httpResponse); - verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + verify(getRequestedFor(urlEqualTo(BAELDUNG_WIREMOCK_PATH))); assertEquals(503, httpResponse.getStatusLine().getStatusCode()); assertEquals("text/html", httpResponse.getFirstHeader("Content-Type").getValue()); assertEquals("!!! Service Unavailable !!!", stringResponse); @@ -67,8 +79,12 @@ public class JUnitManaged { @Test public void givenJUnitManagedServer_whenMatchingBody_thenCorrect() throws IOException { - stubFor(post(urlEqualTo("/baeldung/wiremock")).withHeader("Content-Type", equalTo("application/json")).withRequestBody(containing("\"testing-library\": \"WireMock\"")).withRequestBody(containing("\"creator\": \"Tom Akehurst\"")) - .withRequestBody(containing("\"website\": \"wiremock.org\"")).willReturn(aResponse().withStatus(200))); + stubFor(post(urlEqualTo(BAELDUNG_WIREMOCK_PATH)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON)) + .withRequestBody(containing("\"testing-library\": \"WireMock\"")) + .withRequestBody(containing("\"creator\": \"Tom Akehurst\"")) + .withRequestBody(containing("\"website\": \"wiremock.org\"")) + .willReturn(aResponse().withStatus(200))); InputStream jsonInputStream = this.getClass().getClassLoader().getResourceAsStream("wiremock_intro.json"); String jsonString = convertInputStreamToString(jsonInputStream); @@ -76,42 +92,43 @@ public class JUnitManaged { CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost request = new HttpPost("http://localhost:8080/baeldung/wiremock"); - request.addHeader("Content-Type", "application/json"); + request.addHeader("Content-Type", APPLICATION_JSON); request.setEntity(entity); HttpResponse response = httpClient.execute(request); - verify(postRequestedFor(urlEqualTo("/baeldung/wiremock")).withHeader("Content-Type", equalTo("application/json"))); + verify(postRequestedFor(urlEqualTo(BAELDUNG_WIREMOCK_PATH)) + .withHeader("Content-Type", equalTo(APPLICATION_JSON))); assertEquals(200, response.getStatusLine().getStatusCode()); } @Test public void givenJUnitManagedServer_whenNotUsingPriority_thenCorrect() throws IOException { stubFor(get(urlPathMatching("/baeldung/.*")).willReturn(aResponse().withStatus(200))); - stubFor(get(urlPathEqualTo("/baeldung/wiremock")).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503))); + stubFor(get(urlPathEqualTo(BAELDUNG_WIREMOCK_PATH)).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503))); HttpResponse httpResponse = generateClientAndReceiveResponseForPriorityTests(); - verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + verify(getRequestedFor(urlEqualTo(BAELDUNG_WIREMOCK_PATH))); assertEquals(503, httpResponse.getStatusLine().getStatusCode()); } @Test public void givenJUnitManagedServer_whenUsingPriority_thenCorrect() throws IOException { stubFor(get(urlPathMatching("/baeldung/.*")).atPriority(1).willReturn(aResponse().withStatus(200))); - stubFor(get(urlPathEqualTo("/baeldung/wiremock")).atPriority(2).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503))); + stubFor(get(urlPathEqualTo(BAELDUNG_WIREMOCK_PATH)).atPriority(2).withHeader("Accept", matching("text/.*")).willReturn(aResponse().withStatus(503))); HttpResponse httpResponse = generateClientAndReceiveResponseForPriorityTests(); - verify(getRequestedFor(urlEqualTo("/baeldung/wiremock"))); + verify(getRequestedFor(urlEqualTo(BAELDUNG_WIREMOCK_PATH))); assertEquals(200, httpResponse.getStatusLine().getStatusCode()); } - private String convertHttpResponseToString(HttpResponse httpResponse) throws IOException { + private static String convertHttpResponseToString(HttpResponse httpResponse) throws IOException { InputStream inputStream = httpResponse.getEntity().getContent(); return convertInputStreamToString(inputStream); } - private String convertInputStreamToString(InputStream inputStream) { + private static String convertInputStreamToString(InputStream inputStream) { Scanner scanner = new Scanner(inputStream, "UTF-8"); String string = scanner.useDelimiter("\\Z").next(); scanner.close(); diff --git a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java index 34b445ac0f..ad7caa52b5 100644 --- a/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java +++ b/rest-testing/src/test/java/com/baeldung/rest/wiremock/introduction/ProgrammaticallyManaged.java @@ -1,5 +1,16 @@ package com.baeldung.rest.wiremock.introduction; +import com.github.tomakehurst.wiremock.WireMockServer; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.junit.Test; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Scanner; + import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.configureFor; import static com.github.tomakehurst.wiremock.client.WireMock.get; @@ -9,40 +20,31 @@ import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.client.WireMock.verify; import static org.junit.Assert.assertEquals; -import java.io.IOException; -import java.io.InputStream; -import java.util.Scanner; - -import org.apache.http.HttpResponse; -import org.apache.http.client.methods.HttpGet; -import org.apache.http.impl.client.CloseableHttpClient; -import org.apache.http.impl.client.HttpClients; -import org.junit.Test; - -import com.github.tomakehurst.wiremock.WireMockServer; - public class ProgrammaticallyManaged { - WireMockServer wireMockServer = new WireMockServer(); - CloseableHttpClient httpClient = HttpClients.createDefault(); + + private static final String BAELDUNG_PATH = "/baeldung"; + + private WireMockServer wireMockServer = new WireMockServer(); + private CloseableHttpClient httpClient = HttpClients.createDefault(); @Test public void givenProgrammaticallyManagedServer_whenUsingSimpleStubbing_thenCorrect() throws IOException { wireMockServer.start(); configureFor("localhost", 8080); - stubFor(get(urlEqualTo("/baeldung")).willReturn(aResponse().withBody("Welcome to Baeldung!"))); + stubFor(get(urlEqualTo(BAELDUNG_PATH)).willReturn(aResponse().withBody("Welcome to Baeldung!"))); HttpGet request = new HttpGet("http://localhost:8080/baeldung"); HttpResponse httpResponse = httpClient.execute(request); String stringResponse = convertResponseToString(httpResponse); - verify(getRequestedFor(urlEqualTo("/baeldung"))); + verify(getRequestedFor(urlEqualTo(BAELDUNG_PATH))); assertEquals("Welcome to Baeldung!", stringResponse); wireMockServer.stop(); } - private String convertResponseToString(HttpResponse response) throws IOException { + private static String convertResponseToString(HttpResponse response) throws IOException { InputStream responseStream = response.getEntity().getContent(); Scanner scanner = new Scanner(responseStream, "UTF-8"); String stringResponse = scanner.useDelimiter("\\Z").next(); diff --git a/rest-testing/src/test/resources/.gitignore b/rest-testing/src/test/resources/.gitignore deleted file mode 100644 index 83c05e60c8..0000000000 --- a/rest-testing/src/test/resources/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*.class - -#folders# -/target -/neoDb* -/data -/src/main/webapp/WEB-INF/classes -*/META-INF/* - -# Packaged files # -*.jar -*.war -*.ear \ No newline at end of file From 665afc028e0f9d78285d4cc63c77123e492a8a04 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 7 Jun 2016 18:56:18 +0200 Subject: [PATCH 060/283] Revert jOOQ Application.java --- .../test/java/com/baeldung/jooq/springboot/Application.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java index 844a2989a5..95e00fd5fb 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java @@ -23,6 +23,8 @@ public class Application { @Autowired private Environment environment; + private DataSource dataSource; + public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); @@ -39,7 +41,7 @@ public class Application { } public DataSourceTransactionManager transactionManager() { - return new DataSourceTransactionManager(dataSource()); + return new DataSourceTransactionManager(dataSource); } @Bean From d8cd30d0fdec365f71554f75ad34066274937b85 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 7 Jun 2016 20:35:29 +0200 Subject: [PATCH 061/283] Fix Application.java --- .../java/com/baeldung/jooq/springboot/Application.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java index 95e00fd5fb..4865b575e1 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java @@ -9,7 +9,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment; -import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; import org.springframework.transaction.annotation.EnableTransactionManagement; @@ -23,8 +22,6 @@ public class Application { @Autowired private Environment environment; - private DataSource dataSource; - public DataSource dataSource() { DriverManagerDataSource dataSource = new DriverManagerDataSource(); @@ -40,10 +37,6 @@ public class Application { return new TransactionAwareDataSourceProxy(dataSource()); } - public DataSourceTransactionManager transactionManager() { - return new DataSourceTransactionManager(dataSource); - } - @Bean public DataSourceConnectionProvider connectionProvider() { return new DataSourceConnectionProvider(transactionAwareDataSource()); From 632a1f613f5dc0ff97d49ad2ee95441e26165583 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Wed, 8 Jun 2016 08:33:36 +0200 Subject: [PATCH 062/283] Leverage Spring Boot's autoconfiguration (#441) * Leverage Spring Boot's autoconfiguration * Remove unnecessary @PropertySource --- .../baeldung/jooq/springboot/Application.java | 53 ------------------- .../jooq/springboot/InitialConfiguration.java | 39 ++++++++++++++ 2 files changed, 39 insertions(+), 53 deletions(-) create mode 100644 jooq-spring/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java index 4865b575e1..ff74851d2a 100644 --- a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java +++ b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/Application.java @@ -1,62 +1,9 @@ package com.baeldung.jooq.springboot; -import com.baeldung.jooq.introduction.ExceptionTranslator; -import org.jooq.impl.DataSourceConnectionProvider; -import org.jooq.impl.DefaultConfiguration; -import org.jooq.impl.DefaultDSLContext; -import org.jooq.impl.DefaultExecuteListenerProvider; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.core.env.Environment; -import org.springframework.jdbc.datasource.DriverManagerDataSource; -import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; import org.springframework.transaction.annotation.EnableTransactionManagement; -import javax.sql.DataSource; - @SpringBootApplication @EnableTransactionManagement public class Application { - - @Autowired - private Environment environment; - - public DataSource dataSource() { - DriverManagerDataSource dataSource = new DriverManagerDataSource(); - - dataSource.setUrl(environment.getRequiredProperty("spring.datasource.url")); - dataSource.setUsername(environment.getRequiredProperty("spring.datasource.username")); - dataSource.setPassword(environment.getRequiredProperty("spring.datasource.password")); - - return dataSource; - } - - @Bean - public TransactionAwareDataSourceProxy transactionAwareDataSource() { - return new TransactionAwareDataSourceProxy(dataSource()); - } - - @Bean - public DataSourceConnectionProvider connectionProvider() { - return new DataSourceConnectionProvider(transactionAwareDataSource()); - } - - public ExceptionTranslator exceptionTransformer() { - return new ExceptionTranslator(); - } - - @Bean - public DefaultDSLContext dsl() { - return new DefaultDSLContext(configuration()); - } - - public DefaultConfiguration configuration() { - DefaultConfiguration jooqConfiguration = new DefaultConfiguration(); - - jooqConfiguration.set(connectionProvider()); - jooqConfiguration.set(new DefaultExecuteListenerProvider(exceptionTransformer())); - - return jooqConfiguration; - } } \ No newline at end of file diff --git a/jooq-spring/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java new file mode 100644 index 0000000000..c0d9dac797 --- /dev/null +++ b/jooq-spring/src/test/java/com/baeldung/jooq/springboot/InitialConfiguration.java @@ -0,0 +1,39 @@ +package com.baeldung.jooq.springboot; + +import com.baeldung.jooq.introduction.ExceptionTranslator; +import org.jooq.impl.DataSourceConnectionProvider; +import org.jooq.impl.DefaultConfiguration; +import org.jooq.impl.DefaultDSLContext; +import org.jooq.impl.DefaultExecuteListenerProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; + +import javax.sql.DataSource; + +@Configuration +public class InitialConfiguration { + + @Autowired + private DataSource dataSource; + + @Bean + public DataSourceConnectionProvider connectionProvider() { + return new DataSourceConnectionProvider(new TransactionAwareDataSourceProxy(dataSource)); + } + + @Bean + public DefaultDSLContext dsl() { + return new DefaultDSLContext(configuration()); + } + + public DefaultConfiguration configuration() { + DefaultConfiguration jooqConfiguration = new DefaultConfiguration(); + + jooqConfiguration.set(connectionProvider()); + jooqConfiguration.set(new DefaultExecuteListenerProvider(new ExceptionTranslator())); + + return jooqConfiguration; + } +} From 5c8961e7e8d0448f500c9acf576786b71e76fb7c Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Wed, 8 Jun 2016 16:47:36 +0200 Subject: [PATCH 063/283] Remove gatling load test demo --- gatling-loadtest-demo/.cache-tests | 166 ------------------ gatling-loadtest-demo/.classpath | 32 ---- gatling-loadtest-demo/.project | 24 --- gatling-loadtest-demo/pom.xml | 113 ------------ .../src/test/resources/gatling.conf | 127 -------------- .../src/test/resources/logback.xml | 22 --- .../src/test/resources/recorder.conf | 57 ------ .../src/test/scala/Engine.scala | 13 -- .../src/test/scala/IDEPathHelper.scala | 22 --- .../src/test/scala/Recorder.scala | 12 -- .../org/baeldung/RecordedSimulation.scala | 46 ----- 11 files changed, 634 deletions(-) delete mode 100644 gatling-loadtest-demo/.cache-tests delete mode 100644 gatling-loadtest-demo/.classpath delete mode 100644 gatling-loadtest-demo/.project delete mode 100644 gatling-loadtest-demo/pom.xml delete mode 100644 gatling-loadtest-demo/src/test/resources/gatling.conf delete mode 100644 gatling-loadtest-demo/src/test/resources/logback.xml delete mode 100644 gatling-loadtest-demo/src/test/resources/recorder.conf delete mode 100644 gatling-loadtest-demo/src/test/scala/Engine.scala delete mode 100644 gatling-loadtest-demo/src/test/scala/IDEPathHelper.scala delete mode 100644 gatling-loadtest-demo/src/test/scala/Recorder.scala delete mode 100644 gatling-loadtest-demo/src/test/scala/org/baeldung/RecordedSimulation.scala diff --git a/gatling-loadtest-demo/.cache-tests b/gatling-loadtest-demo/.cache-tests deleted file mode 100644 index 31b0015eef..0000000000 --- a/gatling-loadtest-demo/.cache-tests +++ /dev/null @@ -1,166 +0,0 @@ -format version: 5 -output mode: -1 items -0 -> multiple -output directories: -2 items -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\resources -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes -compile options: -8 items -0 -> -javabootclasspath -1 -> C:\develop\Java\jdk1.8.0_77\jre\lib\resources.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\jsse.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\jce.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\charsets.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\jfr.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\access-bridge-64.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\cldrdata.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\dnsns.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\jaccess.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\jfxrt.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\localedata.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\nashorn.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunec.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunjce_provider.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunmscapi.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunpkcs11.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\zipfs.jar -2 -> -javaextdirs -3 -> -4 -> -bootclasspath -5 -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -6 -> -encoding -7 -> UTF-8 -javac options: -0 items -compiler version: -1 items -0 -> 2.11.8 -compile order: -1 items -0 -> Mixed -name hashing: -1 items -0 -> false -products: -9 items -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine$.class -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine$delayedInit$body.class -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine.class -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\IDEPathHelper$.class -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\IDEPathHelper.class -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\org\baeldung\RecordedSimulation.class -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder$.class -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder$delayedInit$body.class -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder.class -binary dependencies: -15 items -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-app\2.2.0\gatling-app-2.2.0.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-http\2.2.0\gatling-http-2.2.0.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-jdbc\2.2.0\gatling-jdbc-2.2.0.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-recorder\2.2.0\gatling-recorder-2.2.0.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -direct source dependencies: -2 items -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -direct external dependencies: -0 items -public inherited source dependencies: -0 items -public inherited external dependencies: -0 items -member reference internal dependencies: -0 items -member reference external dependencies: -0 items -inheritance internal dependencies: -0 items -inheritance external dependencies: -0 items -class names: -9 items -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> Engine -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> Engine$ -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> Engine$delayedInit$body -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> IDEPathHelper -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> IDEPathHelper$ -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> org.baeldung.RecordedSimulation -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> Recorder -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> Recorder$ -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> Recorder$delayedInit$body -used names: -0 items -product stamps: -9 items -C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine$.class -> lastModified(1464356690978) -C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine$delayedInit$body.class -> lastModified(1464356690989) -C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Engine.class -> lastModified(1464356690863) -C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\IDEPathHelper$.class -> lastModified(1464356691030) -C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\IDEPathHelper.class -> lastModified(1464356691005) -C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\org\baeldung\RecordedSimulation.class -> lastModified(1464356691072) -C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder$.class -> lastModified(1464356691045) -C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder$delayedInit$body.class -> lastModified(1464356691049) -C:\develop\git\tutorials\gatling-loadtest-demo\target\test-classes\Recorder.class -> lastModified(1464356691034) -source stamps: -4 items -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> hash(e98bacf89a84be65d2a131fa7e072d4f6ebef89d) -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> hash(20255b66020a40c67db52f8248fab7e3250fc940) -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> hash(1d4aab935ed26aa3fee62aff5bc9d1d2dbc3f776) -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> hash(667da8a9d712f988ed7b14bdfa7b293c76ac3b61) -binary stamps: -8 items -C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -> lastModified(1463581376873) -C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -> lastModified(1460466041763) -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-app\2.2.0\gatling-app-2.2.0.jar -> lastModified(1463577683111) -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar -> lastModified(1463577434095) -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar -> lastModified(1463577425041) -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-http\2.2.0\gatling-http-2.2.0.jar -> lastModified(1463577691216) -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-jdbc\2.2.0\gatling-jdbc-2.2.0.jar -> lastModified(1463577767127) -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-recorder\2.2.0\gatling-recorder-2.2.0.jar -> lastModified(1463577812366) -class names: -8 items -C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -> scala.reflect.ClassTag$ -C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -> java.lang.Object -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-app\2.2.0\gatling-app-2.2.0.jar -> io.gatling.app.Gatling$ -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar -> io.gatling.commons.util.TypeCaster$ -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar -> io.gatling.core.scenario.Simulation -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-http\2.2.0\gatling-http-2.2.0.jar -> io.gatling.http.protocol.HttpProtocolBuilder -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-jdbc\2.2.0\gatling-jdbc-2.2.0.jar -> io.gatling.jdbc.Predef$ -C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-recorder\2.2.0\gatling-recorder-2.2.0.jar -> io.gatling.recorder.GatlingRecorder$ -internal apis: -4 items -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> -rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHA7lBuUAHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAAGRW5naW5ldXIAGltMeHNidGkuYXBpLlR5cGVQYXJhbWV0ZXI72W0mDyid8rYCAAB4cAAAAAB+cgAYeHNidGkuYXBpLkRlZmluaXRpb25UeXBlAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAGTW9kdWxldXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAnQAEHNjYWxhLmRlcHJlY2F0ZWR0ABpzY2FsYS5kZXByZWNhdGVkT3ZlcnJpZGluZ3NyABN4c2J0aS5TYWZlTGF6eSRJbXBsO5FPEfRFTMkCAANaAAhiaXRtYXAkMEwAAl90dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEZXZhbHQAEUxzY2FsYS9GdW5jdGlvbjA7eHIAFnhzYnRpLmFwaS5BYnN0cmFjdExhennTd7UBX7vnoAIAAHhwAXNyABN4c2J0aS5hcGkuRW1wdHlUeXBlvP2eRkk7iSQCAAB4cgAUeHNidGkuYXBpLlNpbXBsZVR5cGVyeGKIISO/QAIAAHhyAA54c2J0aS5hcGkuVHlwZT9q2SEWSarKAgAAeHBwc3EAfgAwAXNyABN4c2J0aS5hcGkuU3RydWN0dXJlqar5gJNv2AACAANMAAhkZWNsYXJlZHEAfgAVTAAJaW5oZXJpdGVkcQB+ABVMAAdwYXJlbnRzcQB+ABV4cQB+ADdzcQB+ADABdXEAfgAQAAAAAHBzcQB+ADABdXEAfgAQAAAAAXNyAA14c2J0aS5hcGkuRGVmUr6f4ny0NmkCAAJMAApyZXR1cm5UeXBldAAQTHhzYnRpL2FwaS9UeXBlO1sAD3ZhbHVlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1BhcmFtZXRlckxpc3Q7eHEAfgAWcQB+ACB1cQB+ACEAAAABc3IAFHhzYnRpLmFwaS5Bbm5vdGF0aW9u3g6BovZcCrICAAJbAAlhcmd1bWVudHN0AB9bTHhzYnRpL2FwaS9Bbm5vdGF0aW9uQXJndW1lbnQ7TAAEYmFzZXEAfgBBeHB1cgAfW0x4c2J0aS5hcGkuQW5ub3RhdGlvbkFyZ3VtZW50O1Gdpo84JQ94AgAAeHAAAAABc3IAHHhzYnRpLmFwaS5Bbm5vdGF0aW9uQXJndW1lbnTWRbHYAxsXfAIAAkwABG5hbWVxAH4AHEwABXZhbHVlcQB+ABx4cHQAAHQAKigibWFpbiBzaG91bGQgbm90IGJlIG92ZXJyaWRkZW4iLCIyLjExLjAiKXNyABR4c2J0aS5hcGkuUHJvamVjdGlvbvPSjVTpRaQtAgACTAACaWRxAH4AHEwABnByZWZpeHQAFkx4c2J0aS9hcGkvU2ltcGxlVHlwZTt4cQB+ADZ0ABRkZXByZWNhdGVkT3ZlcnJpZGluZ3NyABN4c2J0aS5hcGkuU2luZ2xldG9u/Kdf+M9W5EYCAAFMAARwYXRodAAQTHhzYnRpL2FwaS9QYXRoO3hxAH4ANnNyAA54c2J0aS5hcGkuUGF0aJs9XAjOpSeEAgABWwAKY29tcG9uZW50c3QAGltMeHNidGkvYXBpL1BhdGhDb21wb25lbnQ7eHB1cgAaW0x4c2J0aS5hcGkuUGF0aENvbXBvbmVudDtD2gl0LWcWdAIAAHhwAAAAAnNyAAx4c2J0aS5hcGkuSWSYMmyLN1PEQAIAAUwAAmlkcQB+ABx4cgAXeHNidGkuYXBpLlBhdGhDb21wb25lbnRfmiJbLoafvAIAAHhwdAAFc2NhbGFzcgAOeHNidGkuYXBpLlRoaXPbCe2mzFpAXAIAAHhxAH4AW3NxAH4AIwB0AARtYWludXEAfgAmAAAAAHNxAH4ATnQABFVuaXRxAH4AVHVyABpbTHhzYnRpLmFwaS5QYXJhbWV0ZXJMaXN0O/XTOh3ys3DuAgAAeHAAAAABc3IAF3hzYnRpLmFwaS5QYXJhbWV0ZXJMaXN01sW8HGRJdOMCAAJaAAppc0ltcGxpY2l0WwAKcGFyYW1ldGVyc3QAHFtMeHNidGkvYXBpL01ldGhvZFBhcmFtZXRlcjt4cAB1cgAcW0x4c2J0aS5hcGkuTWV0aG9kUGFyYW1ldGVyO8+4xV2l3bVtAgAAeHAAAAABc3IAGXhzYnRpLmFwaS5NZXRob2RQYXJhbWV0ZXIfRa4X00mw6gIABFoACmhhc0RlZmF1bHRMAAhtb2RpZmllcnQAHUx4c2J0aS9hcGkvUGFyYW1ldGVyTW9kaWZpZXI7TAAEbmFtZXEAfgAcTAADdHBlcQB+AEF4cAB+cgAbeHNidGkuYXBpLlBhcmFtZXRlck1vZGlmaWVyAAAAAAAAAAASAAB4cQB+ACl0AAVQbGFpbnQABGFyZ3NzcgAXeHNidGkuYXBpLlBhcmFtZXRlcml6ZWQWbO5pA8m7fwIAAkwACGJhc2VUeXBlcQB+AE9bAA10eXBlQXJndW1lbnRzdAARW0x4c2J0aS9hcGkvVHlwZTt4cQB+ADZzcQB+AE50AAVBcnJheXEAfgBUdXIAEVtMeHNidGkuYXBpLlR5cGU7dP+lWnv56UECAAB4cAAAAAFzcQB+AE50AAZTdHJpbmdzcQB+AFJzcQB+AFV1cQB+AFgAAAADc3EAfgBadAAEamF2YXNxAH4AWnQABGxhbmdxAH4AX3BzcQB+ADABdXEAfgB4AAAABHNxAH4ATnQAA0FwcHEAfgBUc3EAfgBOdAALRGVsYXllZEluaXRxAH4AVHNxAH4ATnQABk9iamVjdHEAfgB8c3EAfgBOdAADQW55cQB+AFRwcHVyABRbTHhzYnRpLmFwaS5QYWNrYWdlO1sTGTdwpyehAgAAeHAAAAAAc3IAFXhzYnRpLmFwaS5Db21waWxhdGlvbu364MNq6KBCAgACSgAJc3RhcnRUaW1lWwAHb3V0cHV0c3QAGltMeHNidGkvYXBpL091dHB1dFNldHRpbmc7eHAAAAFU8nXEpnVyABpbTHhzYnRpLmFwaS5PdXRwdXRTZXR0aW5nO39qwvOnh6VCAgAAeHAAAAACc3IAF3hzYnRpLmFwaS5PdXRwdXRTZXR0aW5netmaR3T7HXsCAAJMAA9vdXRwdXREaXJlY3RvcnlxAH4AHEwAD3NvdXJjZURpcmVjdG9yeXEAfgAceHB0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AD1DOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHNjYWxhc3EAfgCUdABCQzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmctbG9hZHRlc3QtZGVtb1x0YXJnZXRcdGVzdC1jbGFzc2VzdABBQzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmctbG9hZHRlc3QtZGVtb1xzcmNcdGVzdFxyZXNvdXJjZXN1cgACW0Ks8xf4BghU4AIAAHhwAAAAFOmLrPiahL5l0qEx+n4HLU9uvvid -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> -rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHCXMg60AHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAANSURFUGF0aEhlbHBlcnVyABpbTHhzYnRpLmFwaS5UeXBlUGFyYW1ldGVyO9ltJg8onfK2AgAAeHAAAAAAfnIAGHhzYnRpLmFwaS5EZWZpbml0aW9uVHlwZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABk1vZHVsZXVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAABzcgATeHNidGkuU2FmZUxhenkkSW1wbDuRTxH0RUzJAgADWgAIYml0bWFwJDBMAAJfdHQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABGV2YWx0ABFMc2NhbGEvRnVuY3Rpb24wO3hyABZ4c2J0aS5hcGkuQWJzdHJhY3RMYXp503e1AV+756ACAAB4cAFzcgATeHNidGkuYXBpLkVtcHR5VHlwZbz9nkZJO4kkAgAAeHIAFHhzYnRpLmFwaS5TaW1wbGVUeXBlcnhiiCEjv0ACAAB4cgAOeHNidGkuYXBpLlR5cGU/atkhFkmqygIAAHhwcHNxAH4ALgFzcgATeHNidGkuYXBpLlN0cnVjdHVyZamq+YCTb9gAAgADTAAIZGVjbGFyZWRxAH4AFUwACWluaGVyaXRlZHEAfgAVTAAHcGFyZW50c3EAfgAVeHEAfgA1c3EAfgAuAXVxAH4AEAAAAABwc3EAfgAuAXVxAH4AEAAAAABwc3EAfgAuAXVyABFbTHhzYnRpLmFwaS5UeXBlO3T/pVp7+elBAgAAeHAAAAACc3IAFHhzYnRpLmFwaS5Qcm9qZWN0aW9u89KNVOlFpC0CAAJMAAJpZHEAfgAcTAAGcHJlZml4dAAWTHhzYnRpL2FwaS9TaW1wbGVUeXBlO3hxAH4ANHQABk9iamVjdHNyABN4c2J0aS5hcGkuU2luZ2xldG9u/Kdf+M9W5EYCAAFMAARwYXRodAAQTHhzYnRpL2FwaS9QYXRoO3hxAH4ANHNyAA54c2J0aS5hcGkuUGF0aJs9XAjOpSeEAgABWwAKY29tcG9uZW50c3QAGltMeHNidGkvYXBpL1BhdGhDb21wb25lbnQ7eHB1cgAaW0x4c2J0aS5hcGkuUGF0aENvbXBvbmVudDtD2gl0LWcWdAIAAHhwAAAAA3NyAAx4c2J0aS5hcGkuSWSYMmyLN1PEQAIAAUwAAmlkcQB+ABx4cgAXeHNidGkuYXBpLlBhdGhDb21wb25lbnRfmiJbLoafvAIAAHhwdAAEamF2YXNxAH4ATXQABGxhbmdzcgAOeHNidGkuYXBpLlRoaXPbCe2mzFpAXAIAAHhxAH4ATnNxAH4AQXQAA0FueXNxAH4ARXNxAH4ASHVxAH4ASwAAAAJzcQB+AE10AAVzY2FsYXEAfgBUcHB1cgAUW0x4c2J0aS5hcGkuUGFja2FnZTtbExk3cKcnoQIAAHhwAAAAAHNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVPJ1xKZ1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5cQB+ABxMAA9zb3VyY2VEaXJlY3RvcnlxAH4AHHhwdABCQzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmctbG9hZHRlc3QtZGVtb1x0YXJnZXRcdGVzdC1jbGFzc2VzdAA9QzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmctbG9hZHRlc3QtZGVtb1xzcmNcdGVzdFxzY2FsYXNxAH4AY3QAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAQUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3RccmVzb3VyY2VzdXIAAltCrPMX+AYIVOACAAB4cAAAABQgJVtmAgpAxn21L4JI+rfjJQ/JQA== -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> -rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHARTQnpAHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAAfb3JnLmJhZWxkdW5nLlJlY29yZGVkU2ltdWxhdGlvbnVyABpbTHhzYnRpLmFwaS5UeXBlUGFyYW1ldGVyO9ltJg8onfK2AgAAeHAAAAAAfnIAGHhzYnRpLmFwaS5EZWZpbml0aW9uVHlwZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQACENsYXNzRGVmdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAHNyABN4c2J0aS5TYWZlTGF6eSRJbXBsO5FPEfRFTMkCAANaAAhiaXRtYXAkMEwAAl90dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEZXZhbHQAEUxzY2FsYS9GdW5jdGlvbjA7eHIAFnhzYnRpLmFwaS5BYnN0cmFjdExhennTd7UBX7vnoAIAAHhwAXNyABN4c2J0aS5hcGkuRW1wdHlUeXBlvP2eRkk7iSQCAAB4cgAUeHNidGkuYXBpLlNpbXBsZVR5cGVyeGKIISO/QAIAAHhyAA54c2J0aS5hcGkuVHlwZT9q2SEWSarKAgAAeHBwc3EAfgAuAXNyABN4c2J0aS5hcGkuU3RydWN0dXJlqar5gJNv2AACAANMAAhkZWNsYXJlZHEAfgAVTAAJaW5oZXJpdGVkcQB+ABVMAAdwYXJlbnRzcQB+ABV4cQB+ADVzcQB+AC4BdXEAfgAQAAAAAHBzcQB+AC4BdXEAfgAQAAAAAHBzcQB+AC4BdXIAEVtMeHNidGkuYXBpLlR5cGU7dP+lWnv56UECAAB4cAAAAANzcgAUeHNidGkuYXBpLlByb2plY3Rpb27z0o1U6UWkLQIAAkwAAmlkcQB+ABxMAAZwcmVmaXh0ABZMeHNidGkvYXBpL1NpbXBsZVR5cGU7eHEAfgA0dAAKU2ltdWxhdGlvbnNyABN4c2J0aS5hcGkuU2luZ2xldG9u/Kdf+M9W5EYCAAFMAARwYXRodAAQTHhzYnRpL2FwaS9QYXRoO3hxAH4ANHNyAA54c2J0aS5hcGkuUGF0aJs9XAjOpSeEAgABWwAKY29tcG9uZW50c3QAGltMeHNidGkvYXBpL1BhdGhDb21wb25lbnQ7eHB1cgAaW0x4c2J0aS5hcGkuUGF0aENvbXBvbmVudDtD2gl0LWcWdAIAAHhwAAAABXNyAAx4c2J0aS5hcGkuSWSYMmyLN1PEQAIAAUwAAmlkcQB+ABx4cgAXeHNidGkuYXBpLlBhdGhDb21wb25lbnRfmiJbLoafvAIAAHhwdAACaW9zcQB+AE10AAdnYXRsaW5nc3EAfgBNdAAEY29yZXNxAH4ATXQACHNjZW5hcmlvc3IADnhzYnRpLmFwaS5UaGlz2wntpsxaQFwCAAB4cQB+AE5zcQB+AEF0AAZPYmplY3RzcQB+AEVzcQB+AEh1cQB+AEsAAAADc3EAfgBNdAAEamF2YXNxAH4ATXQABGxhbmdxAH4AWHNxAH4AQXQAA0FueXNxAH4ARXNxAH4ASHVxAH4ASwAAAAJzcQB+AE10AAVzY2FsYXEAfgBYcHB1cgAUW0x4c2J0aS5hcGkuUGFja2FnZTtbExk3cKcnoQIAAHhwAAAAAnNyABF4c2J0aS5hcGkuUGFja2FnZX5Zj/auzjlYAgABTAAEbmFtZXEAfgAceHB0AAxvcmcuYmFlbGR1bmdzcQB+AGt0AANvcmdzcgAVeHNidGkuYXBpLkNvbXBpbGF0aW9u7frgw2rooEICAAJKAAlzdGFydFRpbWVbAAdvdXRwdXRzdAAaW0x4c2J0aS9hcGkvT3V0cHV0U2V0dGluZzt4cAAAAVTydcSmdXIAGltMeHNidGkuYXBpLk91dHB1dFNldHRpbmc7f2rC86eHpUICAAB4cAAAAAJzcgAXeHNidGkuYXBpLk91dHB1dFNldHRpbmd62ZpHdPsdewIAAkwAD291dHB1dERpcmVjdG9yeXEAfgAcTAAPc291cmNlRGlyZWN0b3J5cQB+ABx4cHQAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAPUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AHV0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AEFDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlc3VyAAJbQqzzF/gGCFTgAgAAeHAAAAAUHUqrk17SaqP+5ir/W8nR0tvD93Y= -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> -rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHD3nMHWAHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAAIUmVjb3JkZXJ1cgAaW0x4c2J0aS5hcGkuVHlwZVBhcmFtZXRlcjvZbSYPKJ3ytgIAAHhwAAAAAH5yABh4c2J0aS5hcGkuRGVmaW5pdGlvblR5cGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAZNb2R1bGV1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAACdAAQc2NhbGEuZGVwcmVjYXRlZHQAGnNjYWxhLmRlcHJlY2F0ZWRPdmVycmlkaW5nc3IAE3hzYnRpLlNhZmVMYXp5JEltcGw7kU8R9EVMyQIAA1oACGJpdG1hcCQwTAACX3R0ABJMamF2YS9sYW5nL09iamVjdDtMAARldmFsdAARTHNjYWxhL0Z1bmN0aW9uMDt4cgAWeHNidGkuYXBpLkFic3RyYWN0TGF6edN3tQFfu+egAgAAeHABc3IAE3hzYnRpLmFwaS5FbXB0eVR5cGW8/Z5GSTuJJAIAAHhyABR4c2J0aS5hcGkuU2ltcGxlVHlwZXJ4YoghI79AAgAAeHIADnhzYnRpLmFwaS5UeXBlP2rZIRZJqsoCAAB4cHBzcQB+ADABc3IAE3hzYnRpLmFwaS5TdHJ1Y3R1cmWpqvmAk2/YAAIAA0wACGRlY2xhcmVkcQB+ABVMAAlpbmhlcml0ZWRxAH4AFUwAB3BhcmVudHNxAH4AFXhxAH4AN3NxAH4AMAF1cQB+ABAAAAAAcHNxAH4AMAF1cQB+ABAAAAABc3IADXhzYnRpLmFwaS5EZWZSvp/ifLQ2aQIAAkwACnJldHVyblR5cGV0ABBMeHNidGkvYXBpL1R5cGU7WwAPdmFsdWVQYXJhbWV0ZXJzdAAaW0x4c2J0aS9hcGkvUGFyYW1ldGVyTGlzdDt4cQB+ABZxAH4AIHVxAH4AIQAAAAFzcgAUeHNidGkuYXBpLkFubm90YXRpb27eDoGi9lwKsgIAAlsACWFyZ3VtZW50c3QAH1tMeHNidGkvYXBpL0Fubm90YXRpb25Bcmd1bWVudDtMAARiYXNlcQB+AEF4cHVyAB9bTHhzYnRpLmFwaS5Bbm5vdGF0aW9uQXJndW1lbnQ7UZ2mjzglD3gCAAB4cAAAAAFzcgAceHNidGkuYXBpLkFubm90YXRpb25Bcmd1bWVudNZFsdgDGxd8AgACTAAEbmFtZXEAfgAcTAAFdmFsdWVxAH4AHHhwdAAAdAAqKCJtYWluIHNob3VsZCBub3QgYmUgb3ZlcnJpZGRlbiIsIjIuMTEuMCIpc3IAFHhzYnRpLmFwaS5Qcm9qZWN0aW9u89KNVOlFpC0CAAJMAAJpZHEAfgAcTAAGcHJlZml4dAAWTHhzYnRpL2FwaS9TaW1wbGVUeXBlO3hxAH4ANnQAFGRlcHJlY2F0ZWRPdmVycmlkaW5nc3IAE3hzYnRpLmFwaS5TaW5nbGV0b278p1/4z1bkRgIAAUwABHBhdGh0ABBMeHNidGkvYXBpL1BhdGg7eHEAfgA2c3IADnhzYnRpLmFwaS5QYXRomz1cCM6lJ4QCAAFbAApjb21wb25lbnRzdAAaW0x4c2J0aS9hcGkvUGF0aENvbXBvbmVudDt4cHVyABpbTHhzYnRpLmFwaS5QYXRoQ29tcG9uZW50O0PaCXQtZxZ0AgAAeHAAAAACc3IADHhzYnRpLmFwaS5JZJgybIs3U8RAAgABTAACaWRxAH4AHHhyABd4c2J0aS5hcGkuUGF0aENvbXBvbmVudF+aIlsuhp+8AgAAeHB0AAVzY2FsYXNyAA54c2J0aS5hcGkuVGhpc9sJ7abMWkBcAgAAeHEAfgBbc3EAfgAjAHQABG1haW51cQB+ACYAAAAAc3EAfgBOdAAEVW5pdHEAfgBUdXIAGltMeHNidGkuYXBpLlBhcmFtZXRlckxpc3Q79dM6HfKzcO4CAAB4cAAAAAFzcgAXeHNidGkuYXBpLlBhcmFtZXRlckxpc3TWxbwcZEl04wIAAloACmlzSW1wbGljaXRbAApwYXJhbWV0ZXJzdAAcW0x4c2J0aS9hcGkvTWV0aG9kUGFyYW1ldGVyO3hwAHVyABxbTHhzYnRpLmFwaS5NZXRob2RQYXJhbWV0ZXI7z7jFXaXdtW0CAAB4cAAAAAFzcgAZeHNidGkuYXBpLk1ldGhvZFBhcmFtZXRlch9FrhfTSbDqAgAEWgAKaGFzRGVmYXVsdEwACG1vZGlmaWVydAAdTHhzYnRpL2FwaS9QYXJhbWV0ZXJNb2RpZmllcjtMAARuYW1lcQB+ABxMAAN0cGVxAH4AQXhwAH5yABt4c2J0aS5hcGkuUGFyYW1ldGVyTW9kaWZpZXIAAAAAAAAAABIAAHhxAH4AKXQABVBsYWludAAEYXJnc3NyABd4c2J0aS5hcGkuUGFyYW1ldGVyaXplZBZs7mkDybt/AgACTAAIYmFzZVR5cGVxAH4AT1sADXR5cGVBcmd1bWVudHN0ABFbTHhzYnRpL2FwaS9UeXBlO3hxAH4ANnNxAH4ATnQABUFycmF5cQB+AFR1cgARW0x4c2J0aS5hcGkuVHlwZTt0/6Vae/npQQIAAHhwAAAAAXNxAH4ATnQABlN0cmluZ3NxAH4AUnNxAH4AVXVxAH4AWAAAAANzcQB+AFp0AARqYXZhc3EAfgBadAAEbGFuZ3EAfgBfcHNxAH4AMAF1cQB+AHgAAAAEc3EAfgBOdAADQXBwcQB+AFRzcQB+AE50AAtEZWxheWVkSW5pdHEAfgBUc3EAfgBOdAAGT2JqZWN0cQB+AHxzcQB+AE50AANBbnlxAH4AVHBwdXIAFFtMeHNidGkuYXBpLlBhY2thZ2U7WxMZN3CnJ6ECAAB4cAAAAABzcgAVeHNidGkuYXBpLkNvbXBpbGF0aW9u7frgw2rooEICAAJKAAlzdGFydFRpbWVbAAdvdXRwdXRzdAAaW0x4c2J0aS9hcGkvT3V0cHV0U2V0dGluZzt4cAAAAVTydcSmdXIAGltMeHNidGkuYXBpLk91dHB1dFNldHRpbmc7f2rC86eHpUICAAB4cAAAAAJzcgAXeHNidGkuYXBpLk91dHB1dFNldHRpbmd62ZpHdPsdewIAAkwAD291dHB1dERpcmVjdG9yeXEAfgAcTAAPc291cmNlRGlyZWN0b3J5cQB+ABx4cHQAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAPUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AJR0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AEFDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlc3VyAAJbQqzzF/gGCFTgAgAAeHAAAAAUZn2oqdcS+YjtexS9+nspPHasO2E= -external apis: -0 items -source infos: -4 items -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Engine.scala -> -AAAAAAAAAAA= -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\IDEPathHelper.scala -> -AAAAAAAAAAA= -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\org\baeldung\RecordedSimulation.scala -> -AAAAAAAAAAA= -C:\develop\git\tutorials\gatling-loadtest-demo\src\test\scala\Recorder.scala -> -AAAAAAAAAAA= -compilations: -17 items -00 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVOxQus91cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -01 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1Iw051cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -02 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1LJxV1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -03 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1LOZV1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -04 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1QxNd1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -05 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1U4651cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -06 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1kjrl1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -07 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1koUh1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -08 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1kwGd1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -09 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1lpUV1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -10 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1oYjh1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -11 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1ofWt1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -12 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1px4J1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -13 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVO1q7U91cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -14 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVPJoEOF1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAUUM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QATEM6XGRldmVsb3Bcd29ya3NwYWNlc1x2anBvcnRhbFdvcmtzcGFjZVxnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AFFDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AFBDOlxkZXZlbG9wXHdvcmtzcGFjZXNcdmpwb3J0YWxXb3Jrc3BhY2VcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -15 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVPJ0QXt1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAPUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AEFDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== -16 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVPJ1xKZ1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQAQkM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAPUM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nLWxvYWR0ZXN0LWRlbW9cc3JjXHRlc3Rcc2NhbGFzcQB+AAV0AEJDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHRhcmdldFx0ZXN0LWNsYXNzZXN0AEFDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZy1sb2FkdGVzdC1kZW1vXHNyY1x0ZXN0XHJlc291cmNlcw== diff --git a/gatling-loadtest-demo/.classpath b/gatling-loadtest-demo/.classpath deleted file mode 100644 index 6026072109..0000000000 --- a/gatling-loadtest-demo/.classpath +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gatling-loadtest-demo/.project b/gatling-loadtest-demo/.project deleted file mode 100644 index a5e3b774e0..0000000000 --- a/gatling-loadtest-demo/.project +++ /dev/null @@ -1,24 +0,0 @@ - - - gatling-loadtest-demo - - - - - - org.scala-ide.sdt.core.scalabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.scala-ide.sdt.core.scalanature - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/gatling-loadtest-demo/pom.xml b/gatling-loadtest-demo/pom.xml deleted file mode 100644 index f5ed1d7de7..0000000000 --- a/gatling-loadtest-demo/pom.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - 4.0.0 - org.baeldung - gatling-loadtest-demo - 1.0-SNAPSHOT - - - 1.8 - 1.8 - 2.11.7 - UTF-8 - - 2.2.0 - - 3.2.2 - - - - - - io.gatling - gatling-app - ${gatling.version} - - - io.gatling - gatling-recorder - ${gatling.version} - - - io.gatling.highcharts - gatling-charts-highcharts - ${gatling.version} - - - org.scala-lang - scala-library - ${scala.version} - - - - - - - io.gatling.highcharts - gatling-charts-highcharts - - - io.gatling - gatling-app - - - io.gatling - gatling-recorder - - - org.scala-lang - scala-library - - - - - src/test/scala - - - - net.alchim31.maven - scala-maven-plugin - ${scala-maven-plugin.version} - - - - - - net.alchim31.maven - scala-maven-plugin - - - - testCompile - - - - -Ybackend:GenBCode - -Ydelambdafy:method - -target:jvm-1.8 - -deprecation - -feature - -unchecked - -language:implicitConversions - -language:postfixOps - - - - - - - - io.gatling - gatling-maven-plugin - ${gatling.version} - - - test - execute - - - - - - diff --git a/gatling-loadtest-demo/src/test/resources/gatling.conf b/gatling-loadtest-demo/src/test/resources/gatling.conf deleted file mode 100644 index 8bfa0ed366..0000000000 --- a/gatling-loadtest-demo/src/test/resources/gatling.conf +++ /dev/null @@ -1,127 +0,0 @@ -######################### -# Gatling Configuration # -######################### - -# This file contains all the settings configurable for Gatling with their default values - -gatling { - core { - #outputDirectoryBaseName = "" # The prefix for each simulation result folder (then suffixed by the report generation timestamp) - #runDescription = "" # The description for this simulation run, displayed in each report - #encoding = "utf-8" # Encoding to use throughout Gatling for file and string manipulation - #simulationClass = "" # The FQCN of the simulation to run (when used in conjunction with noReports, the simulation for which assertions will be validated) - #mute = false # When set to true, don't ask for simulation name nor run description (currently only used by Gatling SBT plugin) - #elFileBodiesCacheMaxCapacity = 200 # Cache size for request body EL templates, set to 0 to disable - #rawFileBodiesCacheMaxCapacity = 200 # Cache size for request body Raw templates, set to 0 to disable - #rawFileBodiesInMemoryMaxSize = 1000 # Below this limit, raw file bodies will be cached in memory - - extract { - regex { - #cacheMaxCapacity = 200 # Cache size for the compiled regexes, set to 0 to disable caching - } - xpath { - #cacheMaxCapacity = 200 # Cache size for the compiled XPath queries, set to 0 to disable caching - } - jsonPath { - #cacheMaxCapacity = 200 # Cache size for the compiled jsonPath queries, set to 0 to disable caching - #preferJackson = false # When set to true, prefer Jackson over Boon for JSON-related operations - } - css { - #cacheMaxCapacity = 200 # Cache size for the compiled CSS selectors queries, set to 0 to disable caching - } - } - - directory { - #data = user-files/data # Folder where user's data (e.g. files used by Feeders) is located - #bodies = user-files/bodies # Folder where bodies are located - #simulations = user-files/simulations # Folder where the bundle's simulations are located - #reportsOnly = "" # If set, name of report folder to look for in order to generate its report - #binaries = "" # If set, name of the folder where compiles classes are located: Defaults to GATLING_HOME/target. - #results = results # Name of the folder where all reports folder are located - } - } - charting { - #noReports = false # When set to true, don't generate HTML reports - #maxPlotPerSeries = 1000 # Number of points per graph in Gatling reports - #useGroupDurationMetric = false # Switch group timings from cumulated response time to group duration. - indicators { - #lowerBound = 800 # Lower bound for the requests' response time to track in the reports and the console summary - #higherBound = 1200 # Higher bound for the requests' response time to track in the reports and the console summary - #percentile1 = 50 # Value for the 1st percentile to track in the reports, the console summary and Graphite - #percentile2 = 75 # Value for the 2nd percentile to track in the reports, the console summary and Graphite - #percentile3 = 95 # Value for the 3rd percentile to track in the reports, the console summary and Graphite - #percentile4 = 99 # Value for the 4th percentile to track in the reports, the console summary and Graphite - } - } - http { - #fetchedCssCacheMaxCapacity = 200 # Cache size for CSS parsed content, set to 0 to disable - #fetchedHtmlCacheMaxCapacity = 200 # Cache size for HTML parsed content, set to 0 to disable - #perUserCacheMaxCapacity = 200 # Per virtual user cache size, set to 0 to disable - #warmUpUrl = "http://gatling.io" # The URL to use to warm-up the HTTP stack (blank means disabled) - #enableGA = true # Very light Google Analytics, please support - ssl { - keyStore { - #type = "" # Type of SSLContext's KeyManagers store - #file = "" # Location of SSLContext's KeyManagers store - #password = "" # Password for SSLContext's KeyManagers store - #algorithm = "" # Algorithm used SSLContext's KeyManagers store - } - trustStore { - #type = "" # Type of SSLContext's TrustManagers store - #file = "" # Location of SSLContext's TrustManagers store - #password = "" # Password for SSLContext's TrustManagers store - #algorithm = "" # Algorithm used by SSLContext's TrustManagers store - } - } - ahc { - #keepAlive = true # Allow pooling HTTP connections (keep-alive header automatically added) - #connectTimeout = 60000 # Timeout when establishing a connection - #pooledConnectionIdleTimeout = 60000 # Timeout when a connection stays unused in the pool - #readTimeout = 60000 # Timeout when a used connection stays idle - #maxRetry = 2 # Number of times that a request should be tried again - #requestTimeout = 60000 # Timeout of the requests - #acceptAnyCertificate = true # When set to true, doesn't validate SSL certificates - #httpClientCodecMaxInitialLineLength = 4096 # Maximum length of the initial line of the response (e.g. "HTTP/1.0 200 OK") - #httpClientCodecMaxHeaderSize = 8192 # Maximum size, in bytes, of each request's headers - #httpClientCodecMaxChunkSize = 8192 # Maximum length of the content or each chunk - #webSocketMaxFrameSize = 10240000 # Maximum frame payload size - #sslEnabledProtocols = [TLSv1.2, TLSv1.1, TLSv1] # Array of enabled protocols for HTTPS, if empty use the JDK defaults - #sslEnabledCipherSuites = [] # Array of enabled cipher suites for HTTPS, if empty use the JDK defaults - #sslSessionCacheSize = 0 # SSLSession cache size, set to 0 to use JDK's default - #sslSessionTimeout = 0 # SSLSession timeout in seconds, set to 0 to use JDK's default (24h) - #useOpenSsl = false # if OpenSSL should be used instead of JSSE (requires tcnative jar) - #useNativeTransport = false # if native transport should be used instead of Java NIO (requires netty-transport-native-epoll, currently Linux only) - #usePooledMemory = true # if Gatling should use pooled memory - #tcpNoDelay = true - #soReuseAddress = false - #soLinger = -1 - #soSndBuf = -1 - #soRcvBuf = -1 - } - dns { - #queryTimeout = 5000 # Timeout of each DNS query in millis - #maxQueriesPerResolve = 3 # Maximum allowed number of DNS queries for a given name resolution - } - } - data { - #writers = [console, file] # The list of DataWriters to which Gatling write simulation data (currently supported : console, file, graphite, jdbc) - console { - #light = false # When set to true, displays a light version without detailed request stats - } - file { - #bufferSize = 8192 # FileDataWriter's internal data buffer size, in bytes - } - leak { - #noActivityTimeout = 30 # Period, in seconds, for which Gatling may have no activity before considering a leak may be happening - } - graphite { - #light = false # only send the all* stats - #host = "localhost" # The host where the Carbon server is located - #port = 2003 # The port to which the Carbon server listens to (2003 is default for plaintext, 2004 is default for pickle) - #protocol = "tcp" # The protocol used to send data to Carbon (currently supported : "tcp", "udp") - #rootPathPrefix = "gatling" # The common prefix of all metrics sent to Graphite - #bufferSize = 8192 # GraphiteDataWriter's internal data buffer size, in bytes - #writeInterval = 1 # GraphiteDataWriter's write interval, in seconds - } - } -} diff --git a/gatling-loadtest-demo/src/test/resources/logback.xml b/gatling-loadtest-demo/src/test/resources/logback.xml deleted file mode 100644 index a8fe714e7d..0000000000 --- a/gatling-loadtest-demo/src/test/resources/logback.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - %d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx - false - - - - - - - - - - - - - - - diff --git a/gatling-loadtest-demo/src/test/resources/recorder.conf b/gatling-loadtest-demo/src/test/resources/recorder.conf deleted file mode 100644 index f4ba60310b..0000000000 --- a/gatling-loadtest-demo/src/test/resources/recorder.conf +++ /dev/null @@ -1,57 +0,0 @@ -recorder { - core { - className=RecordedSimulation - encoding=utf-8 - harFilePath="" - headless=false - mode=Proxy - outputFolder="C:\\develop\\workspaces\\vjportalWorkspace\\gatling-loadtest-demo\\src\\test\\scala" - package="org.baeldung" - saveConfig=true - thresholdForPauseCreation=100 - } - filters { - blacklist=[ - ".*\\.css", - ".*\\.js", - ".*\\.ico" - ] - filterStrategy=BlacklistFirst - whitelist=[] - } - http { - automaticReferer=true - checkResponseBodies=false - followRedirect=true - inferHtmlResources=true - removeCacheHeaders=true - } - netty { - maxChunkSize=8192 - maxContentLength=100000000 - maxHeaderSize=20000 - maxInitialLineLength=10000 - } - proxy { - https { - certificateAuthority { - certificatePath="" - privateKeyPath="" - } - keyStore { - password="" - path="" - type=JKS - } - mode=SelfSignedCertificate - } - outgoing { - host="" - password="" - port=0 - sslPort=0 - username="" - } - port=8000 - } -} diff --git a/gatling-loadtest-demo/src/test/scala/Engine.scala b/gatling-loadtest-demo/src/test/scala/Engine.scala deleted file mode 100644 index 0ac3abe948..0000000000 --- a/gatling-loadtest-demo/src/test/scala/Engine.scala +++ /dev/null @@ -1,13 +0,0 @@ -import io.gatling.app.Gatling -import io.gatling.core.config.GatlingPropertiesBuilder - -object Engine extends App { - - val props = new GatlingPropertiesBuilder - props.dataDirectory(IDEPathHelper.dataDirectory.toString) - props.resultsDirectory(IDEPathHelper.resultsDirectory.toString) - props.bodiesDirectory(IDEPathHelper.bodiesDirectory.toString) - props.binariesDirectory(IDEPathHelper.mavenBinariesDirectory.toString) - - Gatling.fromMap(props.build) -} diff --git a/gatling-loadtest-demo/src/test/scala/IDEPathHelper.scala b/gatling-loadtest-demo/src/test/scala/IDEPathHelper.scala deleted file mode 100644 index 32c986a072..0000000000 --- a/gatling-loadtest-demo/src/test/scala/IDEPathHelper.scala +++ /dev/null @@ -1,22 +0,0 @@ -import java.nio.file.Path - -import io.gatling.commons.util.PathHelper._ - -object IDEPathHelper { - - val gatlingConfUrl: Path = getClass.getClassLoader.getResource("gatling.conf").toURI - val projectRootDir = gatlingConfUrl.ancestor(3) - - val mavenSourcesDirectory = projectRootDir / "src" / "test" / "scala" - val mavenResourcesDirectory = projectRootDir / "src" / "test" / "resources" - val mavenTargetDirectory = projectRootDir / "target" - val mavenBinariesDirectory = mavenTargetDirectory / "test-classes" - - val dataDirectory = mavenResourcesDirectory / "data" - val bodiesDirectory = mavenResourcesDirectory / "bodies" - - val recorderOutputDirectory = mavenSourcesDirectory - val resultsDirectory = mavenTargetDirectory / "gatling" - - val recorderConfigFile = mavenResourcesDirectory / "recorder.conf" -} diff --git a/gatling-loadtest-demo/src/test/scala/Recorder.scala b/gatling-loadtest-demo/src/test/scala/Recorder.scala deleted file mode 100644 index 1372da6d41..0000000000 --- a/gatling-loadtest-demo/src/test/scala/Recorder.scala +++ /dev/null @@ -1,12 +0,0 @@ -import io.gatling.recorder.GatlingRecorder -import io.gatling.recorder.config.RecorderPropertiesBuilder - -object Recorder extends App { - - val props = new RecorderPropertiesBuilder - props.simulationOutputFolder(IDEPathHelper.recorderOutputDirectory.toString) - props.simulationPackage("org.baeldung") - props.bodiesFolder(IDEPathHelper.bodiesDirectory.toString) - - GatlingRecorder.fromMap(props.build, Some(IDEPathHelper.recorderConfigFile)) -} diff --git a/gatling-loadtest-demo/src/test/scala/org/baeldung/RecordedSimulation.scala b/gatling-loadtest-demo/src/test/scala/org/baeldung/RecordedSimulation.scala deleted file mode 100644 index 553e17e56f..0000000000 --- a/gatling-loadtest-demo/src/test/scala/org/baeldung/RecordedSimulation.scala +++ /dev/null @@ -1,46 +0,0 @@ -package org.baeldung - -import scala.concurrent.duration._ - -import io.gatling.core.Predef._ -import io.gatling.http.Predef._ -import io.gatling.jdbc.Predef._ - -class RecordedSimulation extends Simulation { - - val httpProtocol = http - .baseURL("http://computer-database.gatling.io") - .inferHtmlResources(BlackList(""".*\.css""", """.*\.js""", """.*\.ico"""), WhiteList()) - .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") - .acceptEncodingHeader("gzip, deflate") - .acceptLanguageHeader("it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3") - .userAgentHeader("Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0") - - - - - - val scn = scenario("RecordedSimulation") - .exec(http("request_0") - .get("/")) - .pause(5) - .exec(http("request_1") - .get("/computers?f=amstrad")) - .pause(4) - .exec(http("request_2") - .get("/computers/412")) - .pause(2) - .exec(http("request_3") - .get("/")) - .pause(2) - .exec(http("request_4") - .get("/computers?p=1")) - .pause(1) - .exec(http("request_5") - .get("/computers?p=2")) - .pause(2) - .exec(http("request_6") - .get("/computers?p=3")) - - setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol) -} \ No newline at end of file From 737848c9bed07ff8b1183574e13be5601ac8bf58 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Wed, 8 Jun 2016 16:49:16 +0200 Subject: [PATCH 064/283] Gatling load test demo --- gatling/pom.xml | 110 +++++++++++++++ gatling/src/test/resources/gatling.conf | 127 ++++++++++++++++++ gatling/src/test/resources/logback.xml | 22 +++ gatling/src/test/resources/recorder.conf | 53 ++++++++ gatling/src/test/scala/Engine.scala | 13 ++ gatling/src/test/scala/IDEPathHelper.scala | 22 +++ gatling/src/test/scala/Recorder.scala | 12 ++ .../org/baeldung/RecordedSimulation.scala | 46 +++++++ 8 files changed, 405 insertions(+) create mode 100644 gatling/pom.xml create mode 100644 gatling/src/test/resources/gatling.conf create mode 100644 gatling/src/test/resources/logback.xml create mode 100644 gatling/src/test/resources/recorder.conf create mode 100644 gatling/src/test/scala/Engine.scala create mode 100644 gatling/src/test/scala/IDEPathHelper.scala create mode 100644 gatling/src/test/scala/Recorder.scala create mode 100644 gatling/src/test/scala/org/baeldung/RecordedSimulation.scala diff --git a/gatling/pom.xml b/gatling/pom.xml new file mode 100644 index 0000000000..273797d76c --- /dev/null +++ b/gatling/pom.xml @@ -0,0 +1,110 @@ + + + 4.0.0 + org.baeldung + gatling + 1.0-SNAPSHOT + + + 1.8 + 1.8 + 2.11.7 + UTF-8 + 2.2.0 + 3.2.2 + + + + + + io.gatling + gatling-app + ${gatling.version} + + + io.gatling + gatling-recorder + ${gatling.version} + + + io.gatling.highcharts + gatling-charts-highcharts + ${gatling.version} + + + org.scala-lang + scala-library + ${scala.version} + + + + + + + io.gatling.highcharts + gatling-charts-highcharts + + + io.gatling + gatling-app + + + io.gatling + gatling-recorder + + + org.scala-lang + scala-library + + + + + src/test/scala + + + + net.alchim31.maven + scala-maven-plugin + ${scala-maven-plugin.version} + + + + + + net.alchim31.maven + scala-maven-plugin + + + + testCompile + + + + -Ybackend:GenBCode + -Ydelambdafy:method + -target:jvm-1.8 + -deprecation + -feature + -unchecked + -language:implicitConversions + -language:postfixOps + + + + + + + io.gatling + gatling-maven-plugin + ${gatling.version} + + + test + execute + + + + + + diff --git a/gatling/src/test/resources/gatling.conf b/gatling/src/test/resources/gatling.conf new file mode 100644 index 0000000000..8bfa0ed366 --- /dev/null +++ b/gatling/src/test/resources/gatling.conf @@ -0,0 +1,127 @@ +######################### +# Gatling Configuration # +######################### + +# This file contains all the settings configurable for Gatling with their default values + +gatling { + core { + #outputDirectoryBaseName = "" # The prefix for each simulation result folder (then suffixed by the report generation timestamp) + #runDescription = "" # The description for this simulation run, displayed in each report + #encoding = "utf-8" # Encoding to use throughout Gatling for file and string manipulation + #simulationClass = "" # The FQCN of the simulation to run (when used in conjunction with noReports, the simulation for which assertions will be validated) + #mute = false # When set to true, don't ask for simulation name nor run description (currently only used by Gatling SBT plugin) + #elFileBodiesCacheMaxCapacity = 200 # Cache size for request body EL templates, set to 0 to disable + #rawFileBodiesCacheMaxCapacity = 200 # Cache size for request body Raw templates, set to 0 to disable + #rawFileBodiesInMemoryMaxSize = 1000 # Below this limit, raw file bodies will be cached in memory + + extract { + regex { + #cacheMaxCapacity = 200 # Cache size for the compiled regexes, set to 0 to disable caching + } + xpath { + #cacheMaxCapacity = 200 # Cache size for the compiled XPath queries, set to 0 to disable caching + } + jsonPath { + #cacheMaxCapacity = 200 # Cache size for the compiled jsonPath queries, set to 0 to disable caching + #preferJackson = false # When set to true, prefer Jackson over Boon for JSON-related operations + } + css { + #cacheMaxCapacity = 200 # Cache size for the compiled CSS selectors queries, set to 0 to disable caching + } + } + + directory { + #data = user-files/data # Folder where user's data (e.g. files used by Feeders) is located + #bodies = user-files/bodies # Folder where bodies are located + #simulations = user-files/simulations # Folder where the bundle's simulations are located + #reportsOnly = "" # If set, name of report folder to look for in order to generate its report + #binaries = "" # If set, name of the folder where compiles classes are located: Defaults to GATLING_HOME/target. + #results = results # Name of the folder where all reports folder are located + } + } + charting { + #noReports = false # When set to true, don't generate HTML reports + #maxPlotPerSeries = 1000 # Number of points per graph in Gatling reports + #useGroupDurationMetric = false # Switch group timings from cumulated response time to group duration. + indicators { + #lowerBound = 800 # Lower bound for the requests' response time to track in the reports and the console summary + #higherBound = 1200 # Higher bound for the requests' response time to track in the reports and the console summary + #percentile1 = 50 # Value for the 1st percentile to track in the reports, the console summary and Graphite + #percentile2 = 75 # Value for the 2nd percentile to track in the reports, the console summary and Graphite + #percentile3 = 95 # Value for the 3rd percentile to track in the reports, the console summary and Graphite + #percentile4 = 99 # Value for the 4th percentile to track in the reports, the console summary and Graphite + } + } + http { + #fetchedCssCacheMaxCapacity = 200 # Cache size for CSS parsed content, set to 0 to disable + #fetchedHtmlCacheMaxCapacity = 200 # Cache size for HTML parsed content, set to 0 to disable + #perUserCacheMaxCapacity = 200 # Per virtual user cache size, set to 0 to disable + #warmUpUrl = "http://gatling.io" # The URL to use to warm-up the HTTP stack (blank means disabled) + #enableGA = true # Very light Google Analytics, please support + ssl { + keyStore { + #type = "" # Type of SSLContext's KeyManagers store + #file = "" # Location of SSLContext's KeyManagers store + #password = "" # Password for SSLContext's KeyManagers store + #algorithm = "" # Algorithm used SSLContext's KeyManagers store + } + trustStore { + #type = "" # Type of SSLContext's TrustManagers store + #file = "" # Location of SSLContext's TrustManagers store + #password = "" # Password for SSLContext's TrustManagers store + #algorithm = "" # Algorithm used by SSLContext's TrustManagers store + } + } + ahc { + #keepAlive = true # Allow pooling HTTP connections (keep-alive header automatically added) + #connectTimeout = 60000 # Timeout when establishing a connection + #pooledConnectionIdleTimeout = 60000 # Timeout when a connection stays unused in the pool + #readTimeout = 60000 # Timeout when a used connection stays idle + #maxRetry = 2 # Number of times that a request should be tried again + #requestTimeout = 60000 # Timeout of the requests + #acceptAnyCertificate = true # When set to true, doesn't validate SSL certificates + #httpClientCodecMaxInitialLineLength = 4096 # Maximum length of the initial line of the response (e.g. "HTTP/1.0 200 OK") + #httpClientCodecMaxHeaderSize = 8192 # Maximum size, in bytes, of each request's headers + #httpClientCodecMaxChunkSize = 8192 # Maximum length of the content or each chunk + #webSocketMaxFrameSize = 10240000 # Maximum frame payload size + #sslEnabledProtocols = [TLSv1.2, TLSv1.1, TLSv1] # Array of enabled protocols for HTTPS, if empty use the JDK defaults + #sslEnabledCipherSuites = [] # Array of enabled cipher suites for HTTPS, if empty use the JDK defaults + #sslSessionCacheSize = 0 # SSLSession cache size, set to 0 to use JDK's default + #sslSessionTimeout = 0 # SSLSession timeout in seconds, set to 0 to use JDK's default (24h) + #useOpenSsl = false # if OpenSSL should be used instead of JSSE (requires tcnative jar) + #useNativeTransport = false # if native transport should be used instead of Java NIO (requires netty-transport-native-epoll, currently Linux only) + #usePooledMemory = true # if Gatling should use pooled memory + #tcpNoDelay = true + #soReuseAddress = false + #soLinger = -1 + #soSndBuf = -1 + #soRcvBuf = -1 + } + dns { + #queryTimeout = 5000 # Timeout of each DNS query in millis + #maxQueriesPerResolve = 3 # Maximum allowed number of DNS queries for a given name resolution + } + } + data { + #writers = [console, file] # The list of DataWriters to which Gatling write simulation data (currently supported : console, file, graphite, jdbc) + console { + #light = false # When set to true, displays a light version without detailed request stats + } + file { + #bufferSize = 8192 # FileDataWriter's internal data buffer size, in bytes + } + leak { + #noActivityTimeout = 30 # Period, in seconds, for which Gatling may have no activity before considering a leak may be happening + } + graphite { + #light = false # only send the all* stats + #host = "localhost" # The host where the Carbon server is located + #port = 2003 # The port to which the Carbon server listens to (2003 is default for plaintext, 2004 is default for pickle) + #protocol = "tcp" # The protocol used to send data to Carbon (currently supported : "tcp", "udp") + #rootPathPrefix = "gatling" # The common prefix of all metrics sent to Graphite + #bufferSize = 8192 # GraphiteDataWriter's internal data buffer size, in bytes + #writeInterval = 1 # GraphiteDataWriter's write interval, in seconds + } + } +} diff --git a/gatling/src/test/resources/logback.xml b/gatling/src/test/resources/logback.xml new file mode 100644 index 0000000000..b9ba6255a0 --- /dev/null +++ b/gatling/src/test/resources/logback.xml @@ -0,0 +1,22 @@ + + + + + + %d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx + false + + + + + + + + + + + + + + + diff --git a/gatling/src/test/resources/recorder.conf b/gatling/src/test/resources/recorder.conf new file mode 100644 index 0000000000..969b9e8668 --- /dev/null +++ b/gatling/src/test/resources/recorder.conf @@ -0,0 +1,53 @@ +recorder { + core { + #mode = "Proxy" + #encoding = "utf-8" # The encoding used for reading/writing request bodies and the generated simulation + #outputFolder = "" # The folder where generated simulation will we written + #package = "" # The package's name of the generated simulation + #className = "RecordedSimulation" # The name of the generated Simulation class + #thresholdForPauseCreation = 100 # The minimum time, in milliseconds, that must pass between requests to trigger a pause creation + #saveConfig = false # When set to true, the configuration from the Recorder GUI overwrites this configuration + #headless = false # When set to true, run the Recorder in headless mode instead of the GUI + #harFilePath = "" # The path of the HAR file to convert + } + filters { + #filterStrategy = "Disabled" # The selected filter resources filter strategy (currently supported : "Disabled", "BlackList", "WhiteList") + #whitelist = [] # The list of ressources patterns that are part of the Recorder's whitelist + #blacklist = [] # The list of ressources patterns that are part of the Recorder's blacklist + } + http { + #automaticReferer = true # When set to false, write the referer + enable 'disableAutoReferer' in the generated simulation + #followRedirect = true # When set to false, write redirect requests + enable 'disableFollowRedirect' in the generated simulation + #removeCacheHeaders = true # When set to true, removes from the generated requests headers leading to request caching + #inferHtmlResources = true # When set to true, add inferred resources + set 'inferHtmlResources' with the configured blacklist/whitelist in the generated simulation + #checkResponseBodies = false # When set to true, save response bodies as files and add raw checks in the generated simulation + } + proxy { + #port = 8000 # Local port used by Gatling's Proxy for HTTP/HTTPS + https { + #mode = "SelfSignedCertificate" # The selected "HTTPS mode" (currently supported : "SelfSignedCertificate", "ProvidedKeyStore", "GatlingCertificateAuthority", "CustomCertificateAuthority") + keyStore { + #path = "" # The path of the custom key store + #password = "" # The password for this key store + #type = "JKS" # The type of the key store (currently supported: "JKS") + } + certificateAuthority { + #certificatePath = "" # The path of the custom certificate + #privateKeyPath = "" # The certificate's private key path + } + } + outgoing { + #host = "" # The outgoing proxy's hostname + #username = "" # The username to use to connect to the outgoing proxy + #password = "" # The password corresponding to the user to use to connect to the outgoing proxy + #port = 0 # The HTTP port to use to connect to the outgoing proxy + #sslPort = 0 # If set, The HTTPS port to use to connect to the outgoing proxy + } + } + netty { + #maxInitialLineLength = 10000 # Maximum length of the initial line of the response (e.g. "HTTP/1.0 200 OK") + #maxHeaderSize = 20000 # Maximum size, in bytes, of each request's headers + #maxChunkSize = 8192 # Maximum length of the content or each chunk + #maxContentLength = 100000000 # Maximum length of the aggregated content of each response + } +} diff --git a/gatling/src/test/scala/Engine.scala b/gatling/src/test/scala/Engine.scala new file mode 100644 index 0000000000..32c85fbe45 --- /dev/null +++ b/gatling/src/test/scala/Engine.scala @@ -0,0 +1,13 @@ +import io.gatling.app.Gatling +import io.gatling.core.config.GatlingPropertiesBuilder + +object Engine extends App { + + val props = new GatlingPropertiesBuilder + props.dataDirectory(IDEPathHelper.dataDirectory.toString) + props.resultsDirectory(IDEPathHelper.resultsDirectory.toString) + props.bodiesDirectory(IDEPathHelper.bodiesDirectory.toString) + props.binariesDirectory(IDEPathHelper.mavenBinariesDirectory.toString) + + Gatling.fromMap(props.build) +} diff --git a/gatling/src/test/scala/IDEPathHelper.scala b/gatling/src/test/scala/IDEPathHelper.scala new file mode 100644 index 0000000000..0abf6a42ef --- /dev/null +++ b/gatling/src/test/scala/IDEPathHelper.scala @@ -0,0 +1,22 @@ +import java.nio.file.Path + +import io.gatling.commons.util.PathHelper._ + +object IDEPathHelper { + + val gatlingConfUrl: Path = getClass.getClassLoader.getResource("gatling.conf").toURI + val projectRootDir = gatlingConfUrl.ancestor(3) + + val mavenSourcesDirectory = projectRootDir / "src" / "test" / "scala" + val mavenResourcesDirectory = projectRootDir / "src" / "test" / "resources" + val mavenTargetDirectory = projectRootDir / "target" + val mavenBinariesDirectory = mavenTargetDirectory / "test-classes" + + val dataDirectory = mavenResourcesDirectory / "data" + val bodiesDirectory = mavenResourcesDirectory / "bodies" + + val recorderOutputDirectory = mavenSourcesDirectory + val resultsDirectory = mavenTargetDirectory / "gatling" + + val recorderConfigFile = mavenResourcesDirectory / "recorder.conf" +} diff --git a/gatling/src/test/scala/Recorder.scala b/gatling/src/test/scala/Recorder.scala new file mode 100644 index 0000000000..6ad320618b --- /dev/null +++ b/gatling/src/test/scala/Recorder.scala @@ -0,0 +1,12 @@ +import io.gatling.recorder.GatlingRecorder +import io.gatling.recorder.config.RecorderPropertiesBuilder + +object Recorder extends App { + + val props = new RecorderPropertiesBuilder + props.simulationOutputFolder(IDEPathHelper.recorderOutputDirectory.toString) + props.simulationPackage("org.baeldung") + props.bodiesFolder(IDEPathHelper.bodiesDirectory.toString) + + GatlingRecorder.fromMap(props.build, Some(IDEPathHelper.recorderConfigFile)) +} diff --git a/gatling/src/test/scala/org/baeldung/RecordedSimulation.scala b/gatling/src/test/scala/org/baeldung/RecordedSimulation.scala new file mode 100644 index 0000000000..cdbef1bf3c --- /dev/null +++ b/gatling/src/test/scala/org/baeldung/RecordedSimulation.scala @@ -0,0 +1,46 @@ +package org.baeldung + +import scala.concurrent.duration._ + +import io.gatling.core.Predef._ +import io.gatling.http.Predef._ +import io.gatling.jdbc.Predef._ + +class RecordedSimulation extends Simulation { + + val httpProtocol = http + .baseURL("http://computer-database.gatling.io") + .inferHtmlResources(BlackList(""".*\.css""", """.*\.js""", """.*\.ico"""), WhiteList()) + .acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8") + .acceptEncodingHeader("gzip, deflate") + .acceptLanguageHeader("it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3") + .userAgentHeader("Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0") + + + + + + val scn = scenario("RecordedSimulation") + .exec(http("request_0") + .get("/")) + .pause(5) + .exec(http("request_1") + .get("/computers?f=amstrad")) + .pause(4) + .exec(http("request_2") + .get("/computers/412")) + .pause(2) + .exec(http("request_3") + .get("/")) + .pause(2) + .exec(http("request_4") + .get("/computers?p=1")) + .pause(1) + .exec(http("request_5") + .get("/computers?p=2")) + .pause(2) + .exec(http("request_6") + .get("/computers?p=3")) + + setUp(scn.inject(atOnceUsers(1))).protocols(httpProtocol) +} From 2452e58c2e95efe4efb1e01f8ad3ef4cbe857e26 Mon Sep 17 00:00:00 2001 From: ccristian Date: Wed, 8 Jun 2016 22:05:48 +0200 Subject: [PATCH 065/283] jee7schedule --- jee7schedule/pom.xml | 311 ++++++++++++++++++ .../baeldung/timer/AutomaticTimerBean.java | 27 ++ .../baeldung/timer/FixedDelayTimerBean.java | 20 ++ .../ProgrammaticAtFixedRateTimerBean.java | 31 ++ .../baeldung/timer/ProgrammaticTimerBean.java | 39 +++ ...ammaticWithInitialFixedDelayTimerBean.java | 31 ++ .../com/baeldung/timer/ScheduleTimerBean.java | 27 ++ .../java/com/baeldung/timer/TimerEvent.java | 27 ++ .../baeldung/timer/TimerEventListener.java | 26 ++ .../java/com/baeldung/timer/WorkerBean.java | 33 ++ .../src/main/webapp/WEB-INF/beans.xml | 0 .../timer/AutomaticTimerBeanTest.java | 66 ++++ .../ProgrammaticAtFixedRateTimerBeanTest.java | 56 ++++ .../timer/ProgrammaticTimerBeanTest.java | 53 +++ ...ogrammaticWithFixedDelayTimerBeanTest.java | 61 ++++ .../baeldung/timer/ScheduleTimerBeanTest.java | 59 ++++ .../baeldung/timer/WithinWindowMatcher.java | 30 ++ pom.xml | 1 + 18 files changed, 898 insertions(+) create mode 100644 jee7schedule/pom.xml create mode 100644 jee7schedule/src/main/java/com/baeldung/timer/AutomaticTimerBean.java create mode 100644 jee7schedule/src/main/java/com/baeldung/timer/FixedDelayTimerBean.java create mode 100644 jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBean.java create mode 100644 jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticTimerBean.java create mode 100644 jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticWithInitialFixedDelayTimerBean.java create mode 100644 jee7schedule/src/main/java/com/baeldung/timer/ScheduleTimerBean.java create mode 100644 jee7schedule/src/main/java/com/baeldung/timer/TimerEvent.java create mode 100644 jee7schedule/src/main/java/com/baeldung/timer/TimerEventListener.java create mode 100644 jee7schedule/src/main/java/com/baeldung/timer/WorkerBean.java create mode 100644 jee7schedule/src/main/webapp/WEB-INF/beans.xml create mode 100644 jee7schedule/src/test/java/com/baeldung/timer/AutomaticTimerBeanTest.java create mode 100644 jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBeanTest.java create mode 100644 jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticTimerBeanTest.java create mode 100644 jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticWithFixedDelayTimerBeanTest.java create mode 100644 jee7schedule/src/test/java/com/baeldung/timer/ScheduleTimerBeanTest.java create mode 100644 jee7schedule/src/test/java/com/baeldung/timer/WithinWindowMatcher.java diff --git a/jee7schedule/pom.xml b/jee7schedule/pom.xml new file mode 100644 index 0000000000..627b8723e3 --- /dev/null +++ b/jee7schedule/pom.xml @@ -0,0 +1,311 @@ + + + 4.0.0 + + com.baeldung + jee7schedule + 1.0-SNAPSHOT + JavaEE 7 Arquillian Archetype Sample + war + + + 1.7 + 3.0.0 + + 4.11 + 7.0 + + 1.1.4.Final + + 8.0.0.Final + + + + ${maven.min.version} + + + + + + org.jboss.arquillian + arquillian-bom + ${version.arquillian_core} + import + pom + + + + + + + javax + javaee-api + ${version.javaee_api} + provided + + + + junit + junit + ${version.junit} + test + + + org.jboss.arquillian.junit + arquillian-junit-container + test + + + com.jayway.awaitility + awaitility + 1.6.0 + test + + + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-impl-maven + test + jar + + + + org.jboss.shrinkwrap.resolver + shrinkwrap-resolver-impl-maven-archive + test + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + ${java.min.version} + ${java.min.version} + + + + org.apache.maven.plugins + maven-war-plugin + 2.1.1 + + false + + + + + + + + + wildfly-managed-arquillian + + true + + + standalone-full.xml + ${project.build.directory}/wildfly-${version.wildfly} + + + + io.undertow + undertow-websockets-jsr + 1.0.0.Beta25 + test + + + org.jboss.resteasy + resteasy-client + 3.0.5.Final + test + + + org.jboss.resteasy + resteasy-jaxb-provider + 3.0.5.Final + test + + + org.jboss.resteasy + resteasy-json-p-provider + 3.0.5.Final + test + + + org.wildfly + wildfly-arquillian-container-managed + ${version.wildfly} + test + + + + + + maven-dependency-plugin + 2.8 + + ${maven.test.skip} + + + + unpack + process-test-classes + + unpack + + + + + org.wildfly + wildfly-dist + ${version.wildfly} + zip + false + ${project.build.directory} + + + + + + + + maven-surefire-plugin + 2.17 + + + ${project.build.directory}/wildfly-${version.wildfly} + + + + + + + + wildfly-remote-arquillian + + + io.undertow + undertow-websockets-jsr + 1.0.0.Beta25 + test + + + org.jboss.resteasy + resteasy-client + 3.0.5.Final + test + + + org.jboss.resteasy + resteasy-jaxb-provider + 3.0.5.Final + test + + + org.jboss.resteasy + resteasy-json-p-provider + 3.0.5.Final + test + + + org.wildfly + wildfly-arquillian-container-remote + ${version.wildfly} + test + + + + + glassfish-embedded-arquillian + + + org.glassfish.main.extras + glassfish-embedded-all + 4.0 + test + + + org.glassfish + javax.json + 1.0.4 + test + + + org.glassfish.tyrus + tyrus-client + 1.3 + test + + + org.glassfish.tyrus + tyrus-container-grizzly-client + 1.3 + test + + + org.glassfish.jersey.core + jersey-client + 2.4 + test + + + org.jboss.arquillian.container + arquillian-glassfish-embedded-3.1 + 1.0.0.CR4 + test + + + + + glassfish-remote-arquillian + + + org.glassfish + javax.json + 1.0.4 + test + + + org.glassfish.tyrus + tyrus-client + 1.3 + test + + + org.glassfish.tyrus + tyrus-container-grizzly-client + 1.3 + test + + + org.glassfish.jersey.core + jersey-client + 2.4 + test + + + org.glassfish.jersey.media + jersey-media-json-jackson + 2.4 + test + + + org.glassfish.jersey.media + jersey-media-json-processing + 2.4 + test + + + org.jboss.arquillian.container + arquillian-glassfish-remote-3.1 + 1.0.0.CR4 + test + + + + + diff --git a/jee7schedule/src/main/java/com/baeldung/timer/AutomaticTimerBean.java b/jee7schedule/src/main/java/com/baeldung/timer/AutomaticTimerBean.java new file mode 100644 index 0000000000..373d962f02 --- /dev/null +++ b/jee7schedule/src/main/java/com/baeldung/timer/AutomaticTimerBean.java @@ -0,0 +1,27 @@ +package com.baeldung.timer; + +import javax.ejb.Schedule; +import javax.ejb.Singleton; +import javax.ejb.Startup; +import javax.enterprise.event.Event; +import javax.inject.Inject; +import java.util.Date; + + +@Startup +@Singleton +public class AutomaticTimerBean { + + + @Inject + Event event; + + /** + * This method will be called every 10 second and will fire an @TimerEvent + */ + @Schedule(hour = "*", minute = "*", second = "*/10", info = "Every 10 second timer") + public void printDate() { + event.fire(new TimerEvent("TimerEvent sent at :" + new Date())); + } + +} diff --git a/jee7schedule/src/main/java/com/baeldung/timer/FixedDelayTimerBean.java b/jee7schedule/src/main/java/com/baeldung/timer/FixedDelayTimerBean.java new file mode 100644 index 0000000000..a466682dea --- /dev/null +++ b/jee7schedule/src/main/java/com/baeldung/timer/FixedDelayTimerBean.java @@ -0,0 +1,20 @@ +package com.baeldung.timer; + +import javax.ejb.*; + +/** + * Created by ccristianchiovari on 5/2/16. + */ +@Singleton +public class FixedDelayTimerBean { + + @EJB + private WorkerBean workerBean; + + @Lock(LockType.READ) + @Schedule(second = "*/5", minute = "*", hour = "*", persistent = false) + public void atSchedule() throws InterruptedException { + workerBean.doTimerWork(); + } + +} \ No newline at end of file diff --git a/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBean.java b/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBean.java new file mode 100644 index 0000000000..c1c210c8ac --- /dev/null +++ b/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBean.java @@ -0,0 +1,31 @@ +package com.baeldung.timer; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import javax.ejb.*; +import javax.enterprise.event.Event; +import javax.inject.Inject; + +/** + * author: Cristian Chiovari + */ +@Startup +@Singleton +public class ProgrammaticAtFixedRateTimerBean { + + @Inject + Event event; + + @Resource + TimerService timerService; + + @PostConstruct + public void initialize() { + timerService.createTimer(0,1000, "Every second timer"); + } + + @Timeout + public void programmaticTimout(Timer timer) { + event.fire(new TimerEvent(timer.getInfo().toString())); + } +} diff --git a/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticTimerBean.java b/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticTimerBean.java new file mode 100644 index 0000000000..d2dba1239f --- /dev/null +++ b/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticTimerBean.java @@ -0,0 +1,39 @@ +package com.baeldung.timer; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import javax.ejb.*; +import javax.enterprise.event.Event; +import javax.inject.Inject; + +/** + * author: Jacek Jackowiak + */ +@Startup +@Singleton +public class ProgrammaticTimerBean { + + @Inject + Event event; + + @Resource + TimerService timerService; + + @PostConstruct + public void initialize() { + ScheduleExpression scheduleExpression = new ScheduleExpression() + .hour("*") + .minute("*") + .second("*/5"); + + TimerConfig timerConfig = new TimerConfig(); + timerConfig.setInfo("Every 5 second timer"); + + timerService.createCalendarTimer(scheduleExpression, timerConfig); + } + + @Timeout + public void programmaticTimout(Timer timer) { + event.fire(new TimerEvent(timer.getInfo().toString())); + } +} diff --git a/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticWithInitialFixedDelayTimerBean.java b/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticWithInitialFixedDelayTimerBean.java new file mode 100644 index 0000000000..9a1ebcdc57 --- /dev/null +++ b/jee7schedule/src/main/java/com/baeldung/timer/ProgrammaticWithInitialFixedDelayTimerBean.java @@ -0,0 +1,31 @@ +package com.baeldung.timer; + +import javax.annotation.PostConstruct; +import javax.annotation.Resource; +import javax.ejb.*; +import javax.enterprise.event.Event; +import javax.inject.Inject; + +/** + * author: Cristian Chiovari + */ +@Startup +@Singleton +public class ProgrammaticWithInitialFixedDelayTimerBean { + + @Inject + Event event; + + @Resource + TimerService timerService; + + @PostConstruct + public void initialize() { + timerService.createTimer(10000l,5000l, "Delay 10 seconds then every 5 second timer"); + } + + @Timeout + public void programmaticTimout(Timer timer) { + event.fire(new TimerEvent(timer.getInfo().toString())); + } +} diff --git a/jee7schedule/src/main/java/com/baeldung/timer/ScheduleTimerBean.java b/jee7schedule/src/main/java/com/baeldung/timer/ScheduleTimerBean.java new file mode 100644 index 0000000000..09fb95c889 --- /dev/null +++ b/jee7schedule/src/main/java/com/baeldung/timer/ScheduleTimerBean.java @@ -0,0 +1,27 @@ +package com.baeldung.timer; + +import javax.ejb.Schedule; +import javax.ejb.Singleton; +import javax.ejb.Startup; +import javax.ejb.Timer; +import javax.enterprise.event.Event; +import javax.inject.Inject; + + +@Startup +@Singleton +public class ScheduleTimerBean { + + @Inject + Event event; + + @Schedule(hour = "*", minute = "*", second = "*/5", info = "Every 5 second timer") + public void automaticallyScheduled(Timer timer) { + fireEvent(timer); + } + + + private void fireEvent(Timer timer) { + event.fire(new TimerEvent(timer.getInfo().toString())); + } +} diff --git a/jee7schedule/src/main/java/com/baeldung/timer/TimerEvent.java b/jee7schedule/src/main/java/com/baeldung/timer/TimerEvent.java new file mode 100644 index 0000000000..e430cfc1b1 --- /dev/null +++ b/jee7schedule/src/main/java/com/baeldung/timer/TimerEvent.java @@ -0,0 +1,27 @@ +package com.baeldung.timer; + +public class TimerEvent { + + private String eventInfo; + private long time = System.currentTimeMillis(); + + public TimerEvent(String s) { + this.eventInfo = s; + } + + public long getTime() { + return time; + } + + public String getEventInfo() { + return eventInfo; + } + + @Override + public String toString() { + return "TimerEvent {" + + "eventInfo='" + eventInfo + '\'' + + ", time=" + time + + '}'; + } +} diff --git a/jee7schedule/src/main/java/com/baeldung/timer/TimerEventListener.java b/jee7schedule/src/main/java/com/baeldung/timer/TimerEventListener.java new file mode 100644 index 0000000000..c89677213a --- /dev/null +++ b/jee7schedule/src/main/java/com/baeldung/timer/TimerEventListener.java @@ -0,0 +1,26 @@ +package com.baeldung.timer; + +import javax.ejb.Singleton; +import javax.ejb.Startup; +import javax.enterprise.event.Observes; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * This class will listen to all TimerEvent and will collect them + */ +@Startup +@Singleton +public class TimerEventListener { + + final List events = new CopyOnWriteArrayList<>(); + + public void listen(@Observes TimerEvent event) { + System.out.println("event = " + event); + events.add(event); + } + + public List getEvents() { + return events; + } +} diff --git a/jee7schedule/src/main/java/com/baeldung/timer/WorkerBean.java b/jee7schedule/src/main/java/com/baeldung/timer/WorkerBean.java new file mode 100644 index 0000000000..c1f781e95e --- /dev/null +++ b/jee7schedule/src/main/java/com/baeldung/timer/WorkerBean.java @@ -0,0 +1,33 @@ +package com.baeldung.timer; + +import javax.ejb.Lock; +import javax.ejb.LockType; +import javax.ejb.Singleton; +import java.util.concurrent.atomic.AtomicBoolean; + +/** + * Created by cristianchiovari on 5/2/16. + */ +@Singleton +public class WorkerBean { + + private AtomicBoolean busy = new AtomicBoolean(false); + + @Lock(LockType.READ) + public void doTimerWork() throws InterruptedException { + + System.out.println("Timer method called but not started yet !"); + + if (!busy.compareAndSet(false, true)) { + return; + } + + try { + System.out.println("Timer work started"); + Thread.sleep(12000); + System.out.println("Timer work done"); + } finally { + busy.set(false); + } + } +} \ No newline at end of file diff --git a/jee7schedule/src/main/webapp/WEB-INF/beans.xml b/jee7schedule/src/main/webapp/WEB-INF/beans.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/jee7schedule/src/test/java/com/baeldung/timer/AutomaticTimerBeanTest.java b/jee7schedule/src/test/java/com/baeldung/timer/AutomaticTimerBeanTest.java new file mode 100644 index 0000000000..df922b28df --- /dev/null +++ b/jee7schedule/src/test/java/com/baeldung/timer/AutomaticTimerBeanTest.java @@ -0,0 +1,66 @@ +package com.baeldung.timer; + +import com.jayway.awaitility.Awaitility; +import org.hamcrest.Matchers; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; +import java.io.File; +import java.util.concurrent.TimeUnit; + +import static com.jayway.awaitility.Awaitility.await; +import static com.jayway.awaitility.Awaitility.to; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + + +@RunWith(Arquillian.class) +public class AutomaticTimerBeanTest { + + //the @AutomaticTimerBean has a method called every 10 seconds + //testing the difference ==> 100000 + final static long TIMEOUT = 10000l; + + //the tolerance accepted , so if between two consecutive calls there has to be at least 9 or max 11 seconds. + //because the timer service is not intended for real-time applications so it will not be exactly 10 seconds + final static long TOLERANCE = 1000l; + + @Inject + TimerEventListener timerEventListener; + + @Deployment + public static WebArchive deploy() { + File[] jars = Maven.resolver().loadPomFromFile("pom.xml") + .resolve("com.jayway.awaitility:awaitility") + .withTransitivity().asFile(); + + //only @AutomaticTimerBean is deployed not the other timers + return ShrinkWrap.create(WebArchive.class) + .addAsLibraries(jars) + .addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, AutomaticTimerBean.class); + } + + + + @Test + public void should_receive_two_pings() { + Awaitility.setDefaultTimeout(30, TimeUnit.SECONDS); + //the test will wait here until two events are triggered + await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(2)); + + TimerEvent firstEvent = timerEventListener.getEvents().get(0); + TimerEvent secondEvent = timerEventListener.getEvents().get(1); + + long delay = secondEvent.getTime() - firstEvent.getTime(); + System.out.println("Actual timeout = " + delay); + + //ensure that the delay between the events is more or less 10 seconds (no real time precision) + assertThat(delay, Matchers.is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE))); + } +} diff --git a/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBeanTest.java b/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBeanTest.java new file mode 100644 index 0000000000..76c0e3e5b8 --- /dev/null +++ b/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticAtFixedRateTimerBeanTest.java @@ -0,0 +1,56 @@ +package com.baeldung.timer; + +import com.jayway.awaitility.Awaitility; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; +import java.io.File; +import java.util.concurrent.TimeUnit; + +import static com.jayway.awaitility.Awaitility.await; +import static com.jayway.awaitility.Awaitility.to; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; + + +@RunWith(Arquillian.class) +public class ProgrammaticAtFixedRateTimerBeanTest { + + final static long TIMEOUT = 1000; + final static long TOLERANCE = 500l; + + @Inject + TimerEventListener timerEventListener; + + @Deployment + public static WebArchive deploy() { + File[] jars = Maven.resolver().loadPomFromFile("pom.xml") + .resolve("com.jayway.awaitility:awaitility") + .withTransitivity().asFile(); + + return ShrinkWrap.create(WebArchive.class) + .addAsLibraries(jars) + .addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, ProgrammaticAtFixedRateTimerBean.class); + } + + @Test + public void should_receive_ten_pings() { + + Awaitility.setDefaultTimeout(30, TimeUnit.SECONDS); + + await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(10)); + TimerEvent firstEvent = timerEventListener.getEvents().get(0); + TimerEvent secondEvent = timerEventListener.getEvents().get(1); + + long delay = secondEvent.getTime() - firstEvent.getTime(); + System.out.println("Actual timeout = " + delay); + assertThat(delay, is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE))); + } +} \ No newline at end of file diff --git a/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticTimerBeanTest.java b/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticTimerBeanTest.java new file mode 100644 index 0000000000..f93ba61fe3 --- /dev/null +++ b/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticTimerBeanTest.java @@ -0,0 +1,53 @@ +package com.baeldung.timer; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; +import java.io.File; + +import static com.jayway.awaitility.Awaitility.await; +import static com.jayway.awaitility.Awaitility.to; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; + + +@RunWith(Arquillian.class) +public class ProgrammaticTimerBeanTest { + + final static long TIMEOUT = 5000l; + final static long TOLERANCE = 1000l; + + @Inject + TimerEventListener timerEventListener; + + @Deployment + public static WebArchive deploy() { + File[] jars = Maven.resolver().loadPomFromFile("pom.xml") + .resolve("com.jayway.awaitility:awaitility") + .withTransitivity().asFile(); + + return ShrinkWrap.create(WebArchive.class) + .addAsLibraries(jars) + .addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, ProgrammaticTimerBean.class); + } + + @Test + public void should_receive_two_pings() { + + await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(2)); + + TimerEvent firstEvent = timerEventListener.getEvents().get(0); + TimerEvent secondEvent = timerEventListener.getEvents().get(1); + + long delay = secondEvent.getTime() - firstEvent.getTime(); + System.out.println("Actual timeout = " + delay); + assertThat(delay, is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE))); + } +} \ No newline at end of file diff --git a/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticWithFixedDelayTimerBeanTest.java b/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticWithFixedDelayTimerBeanTest.java new file mode 100644 index 0000000000..6764aa386d --- /dev/null +++ b/jee7schedule/src/test/java/com/baeldung/timer/ProgrammaticWithFixedDelayTimerBeanTest.java @@ -0,0 +1,61 @@ +package com.baeldung.timer; + +import com.jayway.awaitility.Awaitility; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; +import java.io.File; +import java.util.concurrent.TimeUnit; + +import static com.jayway.awaitility.Awaitility.await; +import static com.jayway.awaitility.Awaitility.to; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.is; + + +@RunWith(Arquillian.class) +public class ProgrammaticWithFixedDelayTimerBeanTest { + + final static long TIMEOUT = 15000l; + final static long TOLERANCE = 1000l; + + @Inject + TimerEventListener timerEventListener; + + @Deployment + public static WebArchive deploy() { + File[] jars = Maven.resolver().loadPomFromFile("pom.xml") + .resolve("com.jayway.awaitility:awaitility") + .withTransitivity().asFile(); + + return ShrinkWrap.create(WebArchive.class) + .addAsLibraries(jars) + .addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, ProgrammaticWithInitialFixedDelayTimerBean.class); + } + + @Test + public void should_receive_two_pings() { + + Awaitility.setDefaultTimeout(30, TimeUnit.SECONDS); + + // 10 seconds pause so we get the startTime and it will trigger first event + long startTime = System.currentTimeMillis(); + + await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(2)); + TimerEvent firstEvent = timerEventListener.getEvents().get(0); + TimerEvent secondEvent = timerEventListener.getEvents().get(1); + + long delay = secondEvent.getTime() - startTime; + System.out.println("Actual timeout = " + delay); + + //apx 15 seconds = 10 delay + 2 timers (first after a pause of 10 seconds and the next others every 5 seconds) + assertThat(delay, is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE))); + } +} \ No newline at end of file diff --git a/jee7schedule/src/test/java/com/baeldung/timer/ScheduleTimerBeanTest.java b/jee7schedule/src/test/java/com/baeldung/timer/ScheduleTimerBeanTest.java new file mode 100644 index 0000000000..7a5b043101 --- /dev/null +++ b/jee7schedule/src/test/java/com/baeldung/timer/ScheduleTimerBeanTest.java @@ -0,0 +1,59 @@ +package com.baeldung.timer; + +import com.jayway.awaitility.Awaitility; +import org.hamcrest.Matchers; +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.junit.Test; +import org.junit.runner.RunWith; + +import javax.inject.Inject; +import java.io.File; +import java.util.concurrent.TimeUnit; + +import static com.jayway.awaitility.Awaitility.await; +import static com.jayway.awaitility.Awaitility.to; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; + + +@RunWith(Arquillian.class) +public class ScheduleTimerBeanTest { + + final static long TIMEOUT = 5000l; + final static long TOLERANCE = 1000l; + + @Inject + TimerEventListener timerEventListener; + + @Deployment + public static WebArchive deploy() { + File[] jars = Maven.resolver().loadPomFromFile("pom.xml") + .resolve("com.jayway.awaitility:awaitility") + .withTransitivity().asFile(); + + return ShrinkWrap.create(WebArchive.class) + .addAsLibraries(jars) + .addClasses(WithinWindowMatcher.class, TimerEvent.class, TimerEventListener.class, ScheduleTimerBean.class); + } + + @Test + public void should_receive_three_pings() { + + Awaitility.setDefaultTimeout(30, TimeUnit.SECONDS); + await().untilCall(to(timerEventListener.getEvents()).size(), equalTo(3)); + + TimerEvent firstEvent = timerEventListener.getEvents().get(0); + TimerEvent secondEvent = timerEventListener.getEvents().get(1); + TimerEvent thirdEvent = timerEventListener.getEvents().get(2); + + long delay = secondEvent.getTime() - firstEvent.getTime(); + assertThat(delay, Matchers.is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE))); + delay = thirdEvent.getTime() - secondEvent.getTime(); + assertThat(delay, Matchers.is(WithinWindowMatcher.withinWindow(TIMEOUT, TOLERANCE))); + + } +} diff --git a/jee7schedule/src/test/java/com/baeldung/timer/WithinWindowMatcher.java b/jee7schedule/src/test/java/com/baeldung/timer/WithinWindowMatcher.java new file mode 100644 index 0000000000..91adca6042 --- /dev/null +++ b/jee7schedule/src/test/java/com/baeldung/timer/WithinWindowMatcher.java @@ -0,0 +1,30 @@ +package com.baeldung.timer; + +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; +import org.hamcrest.Matcher; + +class WithinWindowMatcher extends BaseMatcher { + private final long timeout; + private final long tolerance; + + public WithinWindowMatcher(long timeout, long tolerance) { + this.timeout = timeout; + this.tolerance = tolerance; + } + + @Override + public boolean matches(Object item) { + final Long actual = (Long) item; + return Math.abs(actual - timeout) < tolerance; + } + + @Override + public void describeTo(Description description) { + //To change body of implemented methods use File | Settings | File Templates. + } + + public static Matcher withinWindow(final long timeout, final long tolerance) { + return new WithinWindowMatcher(timeout, tolerance); + } +} diff --git a/pom.xml b/pom.xml index 7a51347af6..91a2023cee 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ jooq-spring json-path mockito + jee7schedule querydsl From a156fa85908f8aaa44f8ba7a4af2d2699cd47afa Mon Sep 17 00:00:00 2001 From: Raquel Garrido Crespo Date: Wed, 8 Jun 2016 23:13:45 +0200 Subject: [PATCH 066/283] Introduction to XPath --- pom.xml | 2 +- xml/pom.xml | 139 +++++++++++++ .../java/com/baeldung/xml/DefaultParser.java | 193 ++++++++++++++++++ .../com/baeldung/xml/DefaultParserTest.java | 83 ++++++++ xml/src/test/resources/example.xml | 32 +++ xml/src/test/resources/example_namespace.xml | 32 +++ 6 files changed, 480 insertions(+), 1 deletion(-) create mode 100644 xml/pom.xml create mode 100644 xml/src/main/java/com/baeldung/xml/DefaultParser.java create mode 100644 xml/src/test/java/com/baeldung/xml/DefaultParserTest.java create mode 100644 xml/src/test/resources/example.xml create mode 100644 xml/src/test/resources/example_namespace.xml diff --git a/pom.xml b/pom.xml index 7a51347af6..ce7dfca62f 100644 --- a/pom.xml +++ b/pom.xml @@ -66,7 +66,7 @@ spring-thymeleaf spring-zuul jsf - + xml diff --git a/xml/pom.xml b/xml/pom.xml new file mode 100644 index 0000000000..fc158901e6 --- /dev/null +++ b/xml/pom.xml @@ -0,0 +1,139 @@ + + 4.0.0 + com.baeldung + xml + 0.1-SNAPSHOT + + xml + + + + + + com.google.guava + guava + ${guava.version} + + + + commons-io + commons-io + 2.4 + + + + org.apache.commons + commons-collections4 + 4.0 + + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + + + + + + + junit + junit + ${junit.version} + test + + + + org.hamcrest + hamcrest-core + ${org.hamcrest.version} + test + + + org.hamcrest + hamcrest-library + ${org.hamcrest.version} + test + + + + org.mockito + mockito-core + ${mockito.version} + test + + + + + + xml + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + 4.3.11.Final + 5.1.38 + + + 2.7.2 + + + 1.7.13 + 1.1.3 + + + 5.1.3.Final + + + 19.0 + 3.4 + + + 1.3 + 4.12 + 1.10.19 + + 4.4.1 + 4.5 + + 2.9.0 + + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 + + + + + diff --git a/xml/src/main/java/com/baeldung/xml/DefaultParser.java b/xml/src/main/java/com/baeldung/xml/DefaultParser.java new file mode 100644 index 0000000000..89326f45c9 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/DefaultParser.java @@ -0,0 +1,193 @@ +package com.baeldung.xml; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.Iterator; + +import javax.xml.namespace.NamespaceContext; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +public class DefaultParser { + + private File file; + + public DefaultParser(File file) { + this.file = file; + } + + public NodeList getFirstLevelNodeList() { + NodeList nodeList = null; + try { + FileInputStream fileIS = new FileInputStream(this.getFile()); + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + + DocumentBuilder builder = builderFactory.newDocumentBuilder(); + + Document xmlDocument = builder.parse(fileIS); + + XPath xPath = XPathFactory.newInstance().newXPath(); + + String expression = "/Tutorials/Tutorial"; + + nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); + + } catch (SAXException | IOException | ParserConfigurationException | XPathExpressionException e) { + e.printStackTrace(); + } + return nodeList; + } + + public Node getNodeById(String id) { + Node node = null; + try { + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + + DocumentBuilder builder = builderFactory.newDocumentBuilder(); + + Document xmlDocument = builder.parse(this.getFile()); + + XPath xPath = XPathFactory.newInstance().newXPath(); + + String expression = "/Tutorials/Tutorial[@tutId=" + "'" + id + "'" + "]"; + + node = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE); + + } catch (SAXException | IOException | ParserConfigurationException | XPathExpressionException e) { + e.printStackTrace(); + } + return node; + } + + public NodeList getNodeListByTitle(String name) { + NodeList nodeList = null; + try { + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + + DocumentBuilder builder = builderFactory.newDocumentBuilder(); + + Document xmlDocument = builder.parse(this.getFile()); + + this.clean(xmlDocument); + + XPath xPath = XPathFactory.newInstance().newXPath(); + + String expression = "//Tutorial[descendant::title[text()=" + "'" + name + "'" + "]]"; + + nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); + + } catch (SAXException | IOException | ParserConfigurationException | XPathExpressionException e) { + e.printStackTrace(); + } + return nodeList; + } + + public NodeList getElementsByDate(String date) { + NodeList nodeList = null; + + try { + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + + DocumentBuilder builder = builderFactory.newDocumentBuilder(); + + Document xmlDocument = builder.parse(this.getFile()); + + this.clean(xmlDocument); + + XPath xPath = XPathFactory.newInstance().newXPath(); + + String expression = "//Tutorial[number(translate(date, '/', '')) > " + date + "]"; + + nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); + + } catch (SAXException | IOException | ParserConfigurationException | XPathExpressionException e) { + e.printStackTrace(); + } + return nodeList; + } + + public NodeList getAllTutorials() { + NodeList nodeList = null; + try { + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + builderFactory.setNamespaceAware(true); + DocumentBuilder builder = builderFactory.newDocumentBuilder(); + + Document xmlDocument = builder.parse(this.getFile()); + + this.clean(xmlDocument); + + XPath xPath = XPathFactory.newInstance().newXPath(); + + xPath.setNamespaceContext(new NamespaceContext() { + + @Override + public Iterator getPrefixes(String arg0) { + return null; + } + + @Override + public String getPrefix(String arg0) { + return null; + } + + @Override + public String getNamespaceURI(String arg0) { + if ("bdn".equals(arg0)) { + return "http://www.baeldung.com/full_archive"; + } + return null; + } + }); + + String expression = "/bdn:Tutorials/bdn:Tutorial"; + + nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); + + } catch (SAXException | IOException | ParserConfigurationException | XPathExpressionException e) { + e.printStackTrace(); + } + return nodeList; + } + + private void clean(Node node) { + + NodeList childs = node.getChildNodes(); + + for (int n = childs.getLength() - 1; n >= 0; n--) { + Node child = childs.item(n); + short nodeType = child.getNodeType(); + + if (nodeType == Node.ELEMENT_NODE) + clean(child); + else if (nodeType == Node.TEXT_NODE) { + String trimmedNodeVal = child.getNodeValue().trim(); + if (trimmedNodeVal.length() == 0) + node.removeChild(child); + else + child.setNodeValue(trimmedNodeVal); + } else if (nodeType == Node.COMMENT_NODE) + node.removeChild(child); + } + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + +} diff --git a/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java new file mode 100644 index 0000000000..451917a5da --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java @@ -0,0 +1,83 @@ +package com.baeldung.xml; + +import static org.junit.Assert.*; + +import java.io.File; + +import org.junit.Test; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +/** + * Unit test for simple App. + */ +public class DefaultParserTest { + + final String fileName = "src/test/resources/example.xml"; + + final String fileNameSpace = "src/test/resources/example_namespace.xml"; + + DefaultParser parser; + + @Test + public void getFirstLevelNodeListTest() { + parser = new DefaultParser(new File(fileName)); + NodeList list = parser.getFirstLevelNodeList(); + + assertNotNull(list); + assertTrue(list.getLength() == 4); + } + + @Test + public void getNodeListByTitle() { + parser = new DefaultParser(new File(fileName)); + NodeList list = parser.getNodeListByTitle("XML"); + + for (int i = 0; null != list && i < list.getLength(); i++) { + Node nod = list.item(i); + assertEquals("java", nod.getAttributes().getNamedItem("type").getTextContent()); + assertEquals("02", nod.getAttributes().getNamedItem("tutId").getTextContent()); + assertEquals("XML", nod.getFirstChild().getTextContent()); + assertEquals("title", nod.getFirstChild().getNodeName()); + assertEquals("description", nod.getChildNodes().item(1).getNodeName()); + assertEquals("Introduction to XPath", nod.getChildNodes().item(1).getTextContent()); + assertEquals("author", nod.getLastChild().getNodeName()); + assertEquals("XMLAuthor", nod.getLastChild().getTextContent()); + } + } + + @Test + public void getNodeById() { + parser = new DefaultParser(new File(fileName)); + Node node = parser.getNodeById("03"); + + String type = node.getAttributes().getNamedItem("type").getNodeValue(); + assertEquals("android", type); + } + + @Test + public void getNodeListByDate(){ + parser = new DefaultParser(new File(fileName)); + NodeList list = parser.getNodeListByTitle("04022016"); + for (int i = 0; null != list && i < list.getLength(); i++) { + Node nod = list.item(i); + assertEquals("java", nod.getAttributes().getNamedItem("type").getTextContent()); + assertEquals("04", nod.getAttributes().getNamedItem("tutId").getTextContent()); + assertEquals("Spring", nod.getFirstChild().getTextContent()); + assertEquals("title", nod.getFirstChild().getNodeName()); + assertEquals("description", nod.getChildNodes().item(1).getNodeName()); + assertEquals("Introduction to Spring", nod.getChildNodes().item(1).getTextContent()); + assertEquals("author", nod.getLastChild().getNodeName()); + assertEquals("SpringAuthor", nod.getLastChild().getTextContent()); + } + } + + @Test + public void getNodeListWithNamespace(){ + parser = new DefaultParser(new File(fileNameSpace)); + NodeList list = parser.getAllTutorials(); + assertNotNull(list); + assertTrue(list.getLength() == 4); + } + +} diff --git a/xml/src/test/resources/example.xml b/xml/src/test/resources/example.xml new file mode 100644 index 0000000000..d546dd137b --- /dev/null +++ b/xml/src/test/resources/example.xml @@ -0,0 +1,32 @@ + + + + Guava + Introduction to Guava + 04/04/2016 + GuavaAuthor + + + XML + Introduction to XPath + 04/05/2016 + XMLAuthor + + + Android + Introduction to Android + 04/03/2016 + AndroidAuthor + + + Spring + Introduction to Spring + 04/02/2016 + SpringAuthor + +
Spring Core
+
Spring MVC
+
Spring Batch
+
+
+
\ No newline at end of file diff --git a/xml/src/test/resources/example_namespace.xml b/xml/src/test/resources/example_namespace.xml new file mode 100644 index 0000000000..26131302ea --- /dev/null +++ b/xml/src/test/resources/example_namespace.xml @@ -0,0 +1,32 @@ + + + + Guava + Introduction to Guava + 04/04/2016 + GuavaAuthor + + + XML + Introduction to XPath + 04/05/2016 + XMLAuthor + + + Android + Introduction to Android + 04/03/2016 + AndroidAuthor + + + Spring + Introduction to Spring + 04/02/2016 + SpringAuthor + +
Spring Core
+
Spring MVC
+
Spring Batch
+
+
+
\ No newline at end of file From 815933447beea629ad92f7a7e8584cc8b8c406b9 Mon Sep 17 00:00:00 2001 From: toubou91 Date: Thu, 9 Jun 2016 00:22:06 +0200 Subject: [PATCH 067/283] Updates for @ModelAttribute example --- .../baeldung/web/controller/EmployeeController.java | 11 ++++++++++- .../src/main/webapp/WEB-INF/view/employeeView.jsp | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java index 38272b23cb..2166c00873 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java @@ -3,10 +3,11 @@ package com.baeldung.web.controller; import java.util.HashMap; import java.util.Map; -import com.baeldung.model.Employee; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -14,7 +15,10 @@ import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; +import com.baeldung.model.Employee; + @Controller +@ControllerAdvice public class EmployeeController { Map employeeMap = new HashMap<>(); @@ -43,4 +47,9 @@ public class EmployeeController { return "employeeView"; } + @ModelAttribute + public void addAttributes(final Model model) { + model.addAttribute("msg", "Welcome to the Netherlands!"); + } + } diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp index 1457bc5fc8..9a9b879a35 100644 --- a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp +++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp @@ -6,6 +6,7 @@

Submitted Employee Information

+

${msg}

From 7eabc6cd2578b0b5b46fe6885db27e14cbc46932 Mon Sep 17 00:00:00 2001 From: reymalahay Date: Wed, 1 Jun 2016 06:47:26 -0600 Subject: [PATCH 068/283] Code and related files for the dependency injection demos. --- .gitignore | 2 + dependency-injection/.gitignore | 12 +++ dependency-injection/build.gradle | 43 ++++++++++ .../docs/autowired-name-demo-classdiagram.png | Bin 0 -> 48700 bytes .../docs/autowired-type-demo-classdiagram.png | Bin 0 -> 23197 bytes .../docs/autowired-type-demo-classdiagram.xml | 1 + .../docs/inject-demo-classdiagram.png | Bin 0 -> 38729 bytes .../docs/inject-field-demo-classdiagram.png | Bin 0 -> 19402 bytes .../docs/inject-field-demo-classdiagram.xml | 1 + .../docs/inject-name-demo-classdiagram.png | Bin 0 -> 23358 bytes .../docs/inject-name-demo-classdiagram.xml | 1 + .../inject-qualifier-demo-classdiagram.png | Bin 0 -> 37170 bytes .../inject-qualifier-demo-classdiagram.xml | 1 + .../docs/resource-demo-classdiagram.png | Bin 0 -> 46095 bytes .../docs/resource-field-demo-classdiagram.png | Bin 0 -> 17692 bytes .../docs/resource-field-demo-classdiagram.xml | 1 + ...source-method-byname-demo-classdiagram.png | Bin 0 -> 29579 bytes .../resource-method-demo-classdiagram.png | Bin 0 -> 19905 bytes .../resource-method-demo-classdiagram.xml | 1 + dependency-injection/pom.xml | 81 ++++++++++++++++++ .../autowired/FieldAutowiredDemo.java | 27 ++++++ .../autowired/FieldAutowiredNameDemo.java | 27 ++++++ .../FieldQualifierAutowiredDemo.java | 39 +++++++++ .../AnotherArbitraryDependency.java | 10 +++ .../dependency/ArbitraryDependency.java | 10 +++ .../YetAnotherArbitraryDependency.java | 10 +++ .../inject/FieldByNameInjectDemo.java | 30 +++++++ .../com/baeldung/inject/FieldInjectDemo.java | 27 ++++++ .../inject/FieldQualifierInjectDemo.java | 40 +++++++++ .../resource/FieldResourceInjectionDemo.java | 25 ++++++ .../MethodByQualifierResourceDemo.java | 43 ++++++++++ .../resource/MethodByTypeResourceDemo.java | 30 +++++++ .../resource/MethodResourceInjectionDemo.java | 29 +++++++ .../baeldung/resource/NamedResourceTest.java | 27 ++++++ .../QualifierResourceInjectionDemo.java | 35 ++++++++ .../resource/SetterResourceInjectionDemo.java | 29 +++++++ ...applicationContextTest-@Autowired-Name.xml | 12 +++ ...cationContextTest-@Autowired-Qualifier.xml | 12 +++ ...applicationContextTest-@Autowired-Type.xml | 10 +++ .../applicationContextTest-@Inject-Name.xml | 11 +++ ...plicationContextTest-@Inject-Qualifier.xml | 12 +++ .../applicationContextTest-@Inject-Type.xml | 10 +++ ...licationContextTest-@Resource-NameType.xml | 12 +++ ...icationContextTest-@Resource-Qualifier.xml | 16 ++++ 44 files changed, 677 insertions(+) create mode 100644 dependency-injection/.gitignore create mode 100644 dependency-injection/build.gradle create mode 100644 dependency-injection/docs/autowired-name-demo-classdiagram.png create mode 100644 dependency-injection/docs/autowired-type-demo-classdiagram.png create mode 100644 dependency-injection/docs/autowired-type-demo-classdiagram.xml create mode 100644 dependency-injection/docs/inject-demo-classdiagram.png create mode 100644 dependency-injection/docs/inject-field-demo-classdiagram.png create mode 100644 dependency-injection/docs/inject-field-demo-classdiagram.xml create mode 100644 dependency-injection/docs/inject-name-demo-classdiagram.png create mode 100644 dependency-injection/docs/inject-name-demo-classdiagram.xml create mode 100644 dependency-injection/docs/inject-qualifier-demo-classdiagram.png create mode 100644 dependency-injection/docs/inject-qualifier-demo-classdiagram.xml create mode 100644 dependency-injection/docs/resource-demo-classdiagram.png create mode 100644 dependency-injection/docs/resource-field-demo-classdiagram.png create mode 100644 dependency-injection/docs/resource-field-demo-classdiagram.xml create mode 100644 dependency-injection/docs/resource-method-byname-demo-classdiagram.png create mode 100644 dependency-injection/docs/resource-method-demo-classdiagram.png create mode 100644 dependency-injection/docs/resource-method-demo-classdiagram.xml create mode 100644 dependency-injection/pom.xml create mode 100644 dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/dependency/AnotherArbitraryDependency.java create mode 100644 dependency-injection/src/test/java/com/baeldung/dependency/ArbitraryDependency.java create mode 100644 dependency-injection/src/test/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java create mode 100644 dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/inject/FieldInjectDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/resource/NamedResourceTest.java create mode 100644 dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionDemo.java create mode 100644 dependency-injection/src/test/resources/applicationContextTest-@Autowired-Name.xml create mode 100644 dependency-injection/src/test/resources/applicationContextTest-@Autowired-Qualifier.xml create mode 100644 dependency-injection/src/test/resources/applicationContextTest-@Autowired-Type.xml create mode 100644 dependency-injection/src/test/resources/applicationContextTest-@Inject-Name.xml create mode 100644 dependency-injection/src/test/resources/applicationContextTest-@Inject-Qualifier.xml create mode 100644 dependency-injection/src/test/resources/applicationContextTest-@Inject-Type.xml create mode 100644 dependency-injection/src/test/resources/applicationContextTest-@Resource-NameType.xml create mode 100644 dependency-injection/src/test/resources/applicationContextTest-@Resource-Qualifier.xml diff --git a/.gitignore b/.gitignore index 210807d09e..7ebd658281 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ .settings/ .prefs *.prefs +.metadata/ # Intellij .idea/ @@ -23,3 +24,4 @@ log/ target/ spring-openid/src/main/resources/application.properties +.recommenders/ diff --git a/dependency-injection/.gitignore b/dependency-injection/.gitignore new file mode 100644 index 0000000000..6531dfc93f --- /dev/null +++ b/dependency-injection/.gitignore @@ -0,0 +1,12 @@ +RemoteSystemsTempFiles/ +.classpath +.project +.settings/ +bin/ +.metadata/ +docs/*.autosave +docs/*.autosave +.recommenders/ +build/ +.gradle/ +.DS_Store diff --git a/dependency-injection/build.gradle b/dependency-injection/build.gradle new file mode 100644 index 0000000000..968636154d --- /dev/null +++ b/dependency-injection/build.gradle @@ -0,0 +1,43 @@ +apply plugin: 'java' +apply plugin: 'eclipse' + +allprojects { + apply plugin: 'java' + sourceCompatibility = 1.6 + targetCompatibility = 1.6 +} + +repositories { + mavenCentral() +} + +sourceSets { + main { + resources.srcDirs = ["src/main/java","src/main/resources"] + } + test { + resources.srcDirs = ["src/main/java", "src/main/resources", "src/test/resources"] + } +} + +configurations { + compile +} + +test { + testLogging { + events 'started', 'passed' + } +} + +dependencies { + testCompile('junit:junit:4.11') + testCompile('org.mockito:mockito-all:1.10.19') + testCompile group: 'org.springframework', name: 'spring-test', version: '4.2.6.RELEASE' + testCompile group: 'org.springframework', name: 'spring-core', version: '4.2.6.RELEASE' + testCompile group: 'org.springframework', name: 'spring-beans', version: '4.2.6.RELEASE' + testCompile group: 'org.springframework', name: 'spring-context', version: '4.2.6.RELEASE' + testCompile group: 'javax.inject', name: 'javax.inject', version: '1' + + testRuntime('junit:junit:4.11') +} diff --git a/dependency-injection/docs/autowired-name-demo-classdiagram.png b/dependency-injection/docs/autowired-name-demo-classdiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..f367fdbf415f93423568c1df91bc5e1e693b0f8d GIT binary patch literal 48700 zcmb@u1yoht_cn?Nf&z+^w1}c~Hz-O-ib$t)dFZZJ1wlHbOF==pq*Liux{>bgzH=Y{ z-yPo=-?-zBamVH7?-kEEd+)W^UTe;0KF>4H#}{%EH?Z$uV_;z1crN+uB?iW&8VrmJ zJ6IRt6_RV8Q6O$-cbjOWjuymA^|8FO~J-SqbSd@1oyfEUV++U_krwZSzCtmouY1%a}8 zH>wFn@)Inkc=HP@TKJoclH9}Qk7u0qj0udlEmma7334eM!UKOcHj)>Ayg`(9ISk{% z#ml0^SeN;KXY-YNdiIukCXjZRcwNSFsySOq&q-fequKOHE|>aauLT3sow+S`Q}i+> z<~BX*N^B}0Ij;B4bqoyF*qs0kzgAlK1cqc6{HK*mX_96 zV+@S{6r7J1)10wN-p$R;l}vcVm0Z1mfsqs9X1+1g5-#Yc@kC8+C|q8+Wsn0-^SwQq z?L8d7u)0cE$%UNp@?Cm*U*wt?m%kPkD(1~yg^$tSxPE;DA9clM?&=~bjPeyD5f0vD z|KXSC$Y4_LrqxXmJ@0CFh0kJK6mvoT`Zr8f{c+?nN|QEaAA)q0Gp&^=F$X^-wa#Hv zp0?h&siYKv$=gU#O#K1V|aJ#GlG88D|f= zWU-Vca%xIV7~qkuY;I*`Wnf@nV`KCB_3Kx!KBbywWQ^l?b#!%T>tO32z{OQazTOr) zNW2*u9Zm0*H)KIMySuw9>YJ{ZcBiQ>Og2HlkvRl=YYwX(9}L*-GL zm$&gjva4=)uAX{8ON@oe7iyOXG*~s zs>W{drKqT=g@uK>y87RQRz<&LryZ_VqDrz&TNafRob{SLCm!CJ1S#~ASe75KFB!=; zjg_&qsV>OHNLwy%o9*V5{UCTQO^b(%tE{3TAtp9tQ9PgIIWBmzQlscoN8^Qsjm=K9 zyiuKjp%G#~)2Gfzb=DFLr->nur`LBz4j*xi|i}KBZtE^-wyB zxzB!V(#p=>o{O7XyV5B?BO@a#%c8-L@PdO`K=YCOyvpx)Im>gmME2S5Yc=bySCAB_ zk=CD%vLFljZ$^lKoac7j1o_qq4ojtOkPAE?{qA>cFCLvaY`@VOsFINBfCa!MyS%#k z#>{NE%yzy%TZ2WrvedNaKCKYm$YMx4VNTW+8n0AS_Aj`uEc)HvZL@dk`i}k$olPiL zyUL}x&~~n!EyyQ+-CWLR?lIpCYlfo>yk3;EEF>gkZ*NcJ|1Be9>Ev)*z+q)!c{z^t zwJ3E0Zj0t*t2(}?fbPnw7e6598WMf)Ue2R*~q4D$c3kV~4AjiqY1uG36UQ76c z`MJ5H!=tyCFkw~P7W??|V~mh%aqd?#O3K8Tn4z&T_od!+F7y6)VfXScUuZZuI6~wG za&=g|RP*)3U>F)2aXHJ^u3hu?_NJ`5KJu$-f82Fv;ZJ|Ra#R~35m97JOiV}!YqBe; zJ8?%xhjC|oncHDOs;RZLwX?G`4Gm2kkLB9>x=yLpYf;g6q0Jf^8q(6zPen!7%H}DN zy;|$E*)7d-jb_|^Uu*NQesrwDaecTbv#5wmP|$5{w2Z^J^ZK=Gn`g;6%kSU6*C;_{ zfB*jCHXV%f?%iMV65Mf2930z|uxXB0OIUQOHMO*udbaZts<&DhM19-a+wp`CKBuON z5A5>U&KVdRV`5^GaqwI;ecc()N9Dfr=gU){t5>hyx^;`vdFCeVFg&f4bxiY;((e_Dj8)xz({@VWLQEBaz^?7}Os@UaY5zUTRwY#g_eiV6-5zktAc*?i)=ckgZ% zy--ltg!^6_s~DKIf#4<+!)~}a)nFr3`g$EU&G(Gq{{CX)u0$BgKz~0r&7C`U3JMF2 z+oKgAE2ya*Zq(tiXcV_EGzC$3Ts>1dTY8Md`@sNpWbzuQtl$SgR9*E_5 zrL&dQ?~2r%Wh#$@FE`(1W@d_<9q6x{F-J+~q%bypd>|A3;>8QLm#UjETjatwzke#7#(7#9(nl& z1rdpoi+GHVesUA`_^^#mB?D@fmg^Pk)gyz0CZBe8b}R<-CcD2$k4IFLmydg%pYH8B zq&&kNb%6lO9oKQvnh>u)*4xXOEY}eTkHBKIG(R)b{27zQNU`ji>0Jt5tG^qQbr;6l z7Ahb^u2*gcZ4zTF!b2exWz;PF?c4UDyquq=zS4Qy?Ns$&4)N zs;R9_Nkl|MOl({@G>UR`bv=eJ{ z0+DeWu#g`5>CJS$7Kl(8?C!orMket3*JYnN>$8(Xn4Q$r)aK^qS`8BmivVBWkd(4F zZ{9>PYh~o*cr1MJxmXtU$MH{hcY)*jcyV#@_wV2H@>rFWTwPoYSa67$uVZ7Ip-|lG zHG{u@>lUfccO}Uq>#`KLKSyg>VXKbn?03ox+;~-0m2@PdTA7WZjEszqj*hA6;?eFh z0|NswllqL-(5wwajpMZn78;r_U%pHRd!Fc1tAxeJGkS$6Qj7O4wni|d$;8;efJ??* z+9s{Yh23}s1YDmnefsoiW@g4Dw%B^Qak?p(O2C1!76}S{eSKRjtgx_4#vC*tW6H{Q zl-n(?dL=ofk$%a}W?k4rjv4%gg=zu*($m{$m1QdG+cx6_tqf zRQ=SHp2*_RLMN&Or$_r<9Sl0JwAAV6yDRzm`3edOhlhuOfq{+Y4i}1HpS^hb@~%&& zzrR0^#o+JZ;X8jJ0sGTR1bxrohX8y9hiGPY_8JW%QCldjgu&M!fB)r$1rro15kfrv z)Kr5%1X76T9^-fJA<#+F7)~9VN+IB2aeB0S^X5%>8=jhSrhRkC)wtMLPFaSB4?hM6 z6N}b2HZrT`{ar1Ype!clD^lrvi(A>_jYHhn*oaLtH8n-VtXcZH?gM~K2v09xhDAo+ z5BB%-v(s8%S-HNUEj}UU?p~E@>QBTJ%l#&n@wuEFcQHc}n|>oa6?1d*C`Ps9<)au5 zV=sKgRGG~}A)0>^8ZL0SI#igJks+m|ROaJbH_19jA6HaTVjgQW{?)44@QV<=-`xj% zBpRxigXv|P$;o$Rdjja#FIv2YxYhUqB`*G9WR<%=j%*Kx(9qyd?2V5@#28}9k4*y` z)Y>{{gRuX6WfrCkepMZ zM={$LMJN`!9LSp>C)=~)P%)bEqUT3e79&mlM}h}4x9G%OBIN_nL&z37UMYkjtgrLP zzsLP*!H^w^YB2}GN#etP3KGMYKFn)fs6{E0zd(O&4_@B6xb zwyRQ?Xc*d@9;CfK_~^2g6%YY%pgc!Dp4a+Wf{UZUb7Pl4rOtopj~wrIOA z%jFiMOi&~E!50kK%w?hNr_IFDwV=CZ7wL_>Lm*rdU{Eegx<;s0yv)& z!;FgBhD9c)r0DDEsRORi(3qZ@V%DxCxpj-(dCLHOsRP1Wx2Ej)liapiAX=79+r4-Z zGKQkEkrJ1b^lh76T3pN@S!IrD6TCSjQ%(Cl!wlXh|INh0qH?=|L={qSVq)Uozq%>3 zVhRB>cXV-x{KbMUlQGC+dLXE-XA$r^glembvDnlYhQZZ6NKcWGkv(bh%jF)2TeE=Z zqoYaCBiVf&kR6+nDDm9M=>Q(SWyLCY*;1Y-ln#)NVPXL=*<3R&>x{+Zi}_jlq0qPs z5cqPrFa)HV_GW96ou^nhIAn{4WZP_l_l>S2IOXo$yHi`UZCqSjFx`#(c3X6k&heq4 z`Q`&T;Sc18R~^!NVm^H`7=Jbv*P3JsWngC0Y(s^dj7&f>{Wwi&YHDMJjh)?(jEuQA zShGRy9)KF%;h_L#AQWv+6mor*5KAUv_4mJwjIA4$wHh1S!xMS?>_^P7)4lLr_f}w6 zMAE^HyOymMk9grfkc$tg_(9Sp8jh4uIq#`i#_b_ozfy8PKi$W?dez|L$m)2N>pq!f z<)jvbb2X(ttqO-0r4c|ikkeM@FY@#A15^hvJ#WPe&(%=%dS#E0>t1t1#K_19d?Y)= z%*JNRSAApql|j7D z58Dt5x}H>7K#@Waq+zEOqsETbD%NwfD*7w7+G9Ahm{lN2i-|#?a#ursVjPS5`}-lk z0zP&*KRXq0TsxTwm%l9rDB3|(^p`LHSc#<$d=L(R!we0-wav0`&H6ICO2UpY?Uf<<_vk9Q^wEiY5?4|L*$NjYXC=UF zA3Q3DiZMXd00@bhH8*kujXTL{p6TmPHwKacx`4`7K1ujZ4t4NAjuyj!kuW?H$dz_l zc-O9}Dxc?>o4$Su{#_A~b8KeUW-=-y6nR@r!Xl#bJh7IR z_8&tb$>{9#cveko;DLN1IVq|0+9=;)*Tu$4EA%?%jfjhb+F^Wbtm@53@$cU+VqAPi zO(iJI#I`8clP(&(uv{PFrEfNyK>W>)N2IyA?WeBi)zKkOf2Ujgo|(AzWLx%yi_X6%#>!Hpz#8vfA_B5)=Ud5uJ5_IP?yTd%I?;9 zaQ~~+Snm$!87sbgiH(EP*4hdMPP=^oY2#dLdU`r6Fo_`YP}-lOSYsJ#RW zYVOxJ>8RFAB_pdgWd_IPIcce>cR2o4ztaOk`=g4lUfqjQA^4x9tlO8NG|t6D)CK@; zR_dmxuUetenEU=%b*$2Dx`z+bzkgrIsaR7lwum_xnSFS1aR*jC_r86X(0;Uz+x3$I zpWDq<0R=cT^?rm5b6rUyhOM^`*=T9?XImp0w-s(TsQMTTUg5dS!2`5LPMGud+!ZI~ zo*%G^BR_rOP3WAPGopD0Ob9@g*RLl-WIG^y3>6pxm;k;8b{qpUGq*}e6a3@JlP3`K zHa9m5jXEANGG52S<5~Y8WRdm~^6>T2)6>%{SFQlIvZ+{MD1|?OdB2#d!$x~|1;@q3 z1&SC=W)%mAVudHdft8hl{tZ(O6;KNX#xS8-4fCbL`6RrJtN`iGhr*NYPt z6HJ(@q$g4eUh9Et@p5VSdd;f}9|SW^V^d8FxWp9N{hzw3!2XU+ZTX0qkvs+sfo^Jf|jUY8vcMa7=O?RhR)92^{u;;_y4Xh4u~NJ>UouobbZSESxCK~da8 z^M27+o#Yfr!yf8`K!8Y4x%W;?uy{$z$_54n{foI&v8f+x63kZSvy$m;9K87UNGH21 z9;OsH@A+m?Gr0P^T4>NFOB=OXND*YObKIS_wsCh>VP~EBf62_<9g-*Q@puPom@E zmd}%L{;?;aqlL7*yu2ZWHh%A%9dgMzBX0h#C}^7vBUMli=WsW?vMug1ms*MGa_VSy zPoZSw%{}$t3oAFZigU^KZIPsX;AU3z=bbe%q`3&fyWB^XKF0OeM>~sfY$L4vhK3gXZSFab?Pds}2l)$r)zU8sE^2>tEXY>Xv7pzh^AvNpFQBx%{yUk*M!uZ31+;5I|Ql z(($yEuz9uqAJYr?3aI6aQEh0Fmn1vxxQd?yAgyi#KU|v{A7TP}fYj7mgino7@LGVB zvGD`EN#z$hI_M&mBwOVCuuITO<0qtTZ+t)CadBWRGf0!mpJ2%!=-0b_Uwr2n3`G$Y4T7WIu>PV6Ai-7d_7J z-P?JlQp`d(4`#5%NYzBiOpgaXH0Y7;trPNSx@Z?$kZz;FT}}jqQOz=&lM<0)j)>eP zCY`Pt_J1U`_mf9?`SXDDuxW@GRjnc#6D5YLS!ff61Xq+gl0?ppj>={SIneogDb=_I zRRT%fC8{l#jAfpbtE$btkIMAeV+TkbJ3C%-TrmaFr%wUkLm_Q3Ia+3m1Y)wNKr*!n z&4uOGDh5}bv@C8^4~IFjt~7Zdn3n9^7Ry)97B}nV?3lIr*rhYZu~adJ;;R`-8O1A; z%I`43`Dz0!1cWTRvlD0khOoG}#FS;ZW^k8rO{%`%Jr&Oem;cT`zBRc0|p@Lnh>^`*+j zjRPrZzufN*;tQ0AjR?)ES>-c5Z`4HAh@M7fzAt*s*C;bG?nwV4o%vnhScdUDN+hJXllSOHcq}HWh3?&(0gh2lT6%eHjhTVr7-%F`k28lSun~2!%5w@S zZ=)z6$3{d%0F47A3Gfu+&M;CmWdjsXJimR$%_zVVo-2cFK6PwwhJQePf3>>-XiKQV ziJ8fZjl{$n6y=4KUcLI7vGnzM_|fq(ASoKJ!BT60s=U0alvp&%+3Iw74r`+^p`pND z3c-u2sw6j33@;lsFqliEMH zi>$k(QB;Yh8Ad4~Cnsl?T48EgnKKZl06H4!w*b+20QZkYL+QH0Mk|CvlaZNuzTqRH zS?zXscD#7d|kel+iug47rtC*_Q6h zMFZOAmX_x&@*a143bP`^!lrJ%({Y}SINv`%n~3Ey?@ScZc=3W&zcJwZcY0@#DONns z<~=!OkKrokOPRTd9EEjIBcr^0gY(iYl5fEB0MpOI&8^NDX*=I38^bOZNyTqx0_BBY zvP=U1?iU}*u-whEv9;6V{ivuYU_cRQ-KKM9V`8$9r**RLd0v86v+fid!8$NA%h&|O z|B*pC3qNVSQBRmPOQ)v#`*-AoKtB=^60+~Mnn6u89#M19z_K<`Qv-}tTH1WegQQQ3 zLyLCsARXbePFBDlO&^`794O*okXWL8l`{XMDH}sM<2UPEwAW%`VM!8nwt+{d zqB8LFJ!asJ8?fx897gnhHZTI9Y2mU8CGlEM!6Od#^&KoQY=fdwC0CnC z9wel*v5C`!WO~c$LnEl~WV+y3sN>{CPJfJ{&U=#1egH%NxZC#c)bup4*s<~Pf~MW~ zY!C4~51!K0rvwW>!V`>#GB&@7vT$S-&XOwOzTR3?RHSn;4*&`bB-= zKGxROa@}Sbi2P?09LGuLMc81FtZToTqAiXvG>HL1zg1CI;^OB&lGZuu2Da+>=m-%{ zrayHUxz2=2+!jNqeLPCRgL(paEE-%Y;rNh{jf3f6s7OFWP*GC4(k<=e|11p<~g5q@Cbv-82`TX>!UOv5FfmvTh zX=y1C9iSy^M8bn-6&5~&I8m&g4W+eV6~Gbk&jkfrKsUo(G^*EQm$E~?h!=D&5Og}6 zjSAcvK~*rZv%kEru77d!Pl^QO5>kLkUZqg=dY&%pV0JeEAy4tQVH6@LQ1qR19dS_L z0h<5{7nB(vK87iqqfjW|81eOB?^32!G5}O+;lY750rRNSvIR=-=;$c$o;1&tmHRQN z+#W;BqJ9A-^5HbqImzwY^%d_+2}fgZV>J`Ba&p6lQkPX@GbjO^K9 zfB%DmM^yjI3*gV9S&A=7taE-eaH%pHbXg^3<+YKLTu`fMY3qy%Z^R`g$j!s*naO8c zt>>N9a&8Hu+v26AO-W0WpoA%QTh^EeYXbO2GJk&b3`P{d0>l`<(*||d1)lF8K3sLy ztvsLCk(88#LcQG|*QbuYtF0}Zh1$s2xTL74>`(`>Ozk{_Wc=6bFa|ASuZ@m1V7)m6c|y?%`3LvmBdhXkZYX>0EOHuV`y0rUEXZ zyLXSoQWb11~v{1)H!x z1o-&@#kMax!|rW-0<^r~+RBP%p;2H!2Gliz%0dRmw1)Yr*x1;xw}IIw$CZHX3ltEQ z)87lE#)M+l6=UP8P4)FoD^@cP&cvTRYo-XzQqBx*0A;6rU!c=d4?u~o+ckqzb=^_* z3Wqm;7uBlyRMgc$+DfJO!0|&E5&z8!0{kf77p9}*B3NkxnFvuVsMv6*6LJ!bllUeuhMzg+tht|)P zl(sv^pB8&wfzo0I_df9Kn7HJF#c$&N#9rT_tZNs=lI=0L64f?qeLPOA|0()BL-*AN zDjxE8E$d8;6o?BfTIHY8-deAXOq>-$N`di(e5fHrYqy#%GjAneSQ6?brXf>K^>JKdyeBV zdjW%=o|mpZwx6S+m_j9OQHN0vX9qxr=M)GI5Py6oV2?trO$Uo~_SD{pN~}3QT|a)_ zg|MV`Uw-`9SxigP25lG|4?T;VY4aer!veyhftrOnDu+N+CZ2cGT<2IFnAB8L<;*_% z{k}8$bIQ2z@ScHz`Orik3!Oyv$nP9W2k91aT|lG|vuFcr^71xat@ksej5-PQ^15t< z`YR67$olf920c?tOCFW)>FF)4t&lMz@so>+`l4TEWtf3gM6-PjqKwU31Da=gddVF| z9NZTz;Ny79E+s52v&o>5_*5N$wzjilN7_m##wKBm$nvnS^yLcKHdaEXXCDUBB?&zu z+b5%<(t#6(h28bSvcid8_Vr%4fHD1tSEm5G^deB}va+&sVZdMLfBc9ia`GE1l{@au z`goQ29v4wfoUr>5(3XL@mVs=_zg#- zIXO9bR(iTAXeE}Gxj8wV?d_jtfhq#QHuPp$aZPV;{Jut*M`ZMl@T`KK8z|&iIXTrq6d@tG+1c4Q6V+Nkl_=G0MdV`9Y;A8lt`7GN4h}*_92qgMWKCN>s;#X} zI@@`mqy)>@ppqgwJiHLtBBZ_pDGlU4V0d7N?QN3B#w8>BYhys$lMxW~^z}h*Dlz$U zciKW+yb-W703&mhXLHoaxZAd@vlQh)hJ_pOHph_2&QIn=Ft1!8Z5u?YQ<4ixN~gIe zR|4cc&PEY=YF^~LY*b3|YAaMgZotcpjg0~A1F5RQ`Mx-SHP6!lPqpm+(o$YpAxIiP zIl9BA5)u-C&H+TaGjS#fnt5(zWo32sxLMJM4I3=wpSp6^Xf>+a`{@#DU!eE z-oIwK56DJP@C3Bdlm@+r%*>QF&rOkPs_yH2zB)ffY2?XCSw~kF9yT_=%g%SUIeyQx z6J$aF0zjz|dVfx<8Yr9dt*9Dc@ndwPNo-6jV`K09&&0{d$}-W@hg|BL zIB4WSQx%B9RyG|Z0GK7vPQbiBOU$2$?*4tbL_t3AQvg&6pA8n;Q`OcU52KR?B@uim z9n(Xwq7W*a-LMs5Ee?NI4@V_JY{kg6LJFt34q(;b`2z2TjHu*lVL<^@mO+r#Y+bl> zhGc?NfyCtI=8kQH4Mzp#6p)QGjcjn%vyw+>a$)oqh#HBY)&vFN(vCIO*SkS7UtL%=7BoG^Q6i1)onT^rViS_9;@a$%gf9DzP{0r0nhio$!6)Gkoh)(5uhgZcVEhi0i_Lb<44s)i|Kuf@~vnvj99MY;)02-WQ3`5uL2Tpfu_Q3P@UyU##g0n6vJqUn>KW-Dc5tjWNphdDOZtl zyJRJw!7sOUE*O>|z$-cMjM>}og5}}g+NkC(ikxj!+m;BZ;Gy!4GWDT2q8;o8irlvIL*ZT$5E9;(;0QtpqehWmWkma>NOz_Rn{(ILvx2h4| z)f(t!7E%R#hKup#0t*&u1&B14^=fsh_umx&Fuj z?*ROaj>@2Ut_b5qXCrvOZjvN3`xp>Ms_7gT8!*Wk8Gx#l559o-b6PQR8uX9U0=v?T zQ?+1P51+DmEnp%TO5DYAO=d9#ROn8nao0b$m5FRD=SMJiMne_!7lC;g)K=)Hr|Yy5 z3GN?Oa6?_am=25UQWBNLxT`$Y7ka<^9}T|4H$}5FO4dRpC`rQwsvutgl!KrU7zRv_ zTpaf*QB1{MPm_Nn(&YoW#F16pJn##lN;ImIA9#iMtCM`>+W^WLcF$%L71ik*vsh(C z#qB>5R7~2HgY=`N*3%FTZV?bPt?mu$OP*aua}sP=N_E&^xvG@iE+;+;N))f1NDHH&dy~`_X3}X z-;aojns{0B&**0)*L8l(tIi0x6;$std?)~8U3pGh!o?08m*(Zr?3kL7?ry!3k?^pvc3D8YKo!Hu zKNvA2R-@F0N$EODI<QZxgZvCyOF+@|SQK<(Jr6oeMii77xqzPz-AO3(>M>kRq5qoeWh@fOUWpNsmY zNCdaOulcB_oVmYs2kH(Hw*xCk>;O`d>4B^Q1PsQejh-OJO;wG$irBJID3xyBkR6!* zqyF^iQ{XN4Re(l^2yU4$5%urnl;8^7HUMfLN|yyFMP+4VMu7|C zDz!PcWPp4E6;xk^8~7LjqoEhG=Ge|kTUwIGBQK|&KN2Tb=hm=%mPH_AXJ zVmt<|Zq|#NSF5Zv1pIwRxRiZp5R#>98{&L2TRn_@-muX{B3^<=Lb~I?yZrn z%*VZwNkQ|>(a{lfd;^28eP&<-@r0+_v0KHUqO2?~CRV1I1Jw?Nu$yWsxN7IX@dxe> zntCw*3GO{!TwT3^hqqt7xv{Y^KCX>^b~#@Aa$^&RosM4kp6C0XEO^&}t^z!&bG8*_ zuQieP`YBW#GF_lVo&c_W0I?akxW~hxU{2ls{S;3vTUp;=`1`unA>ao*!HxeK^bX;3 z0J?V(KV|)BfBznkJl``w`Ci(L0J<2&btfLK*T1}~tA)`cXuK~Za(=SS-q3pKDX@6p z{gCNOa^F)!h^%}l9gyEWJUkQ>LY*fpbyiPwG78lZUo6-QA)(Z#R682_)NKNx)YRDM zU~k`&PK)NKU^_oZboymhgw!q54036<&2-6cxZ|8VdC-rc&ULkDpfY&&I<|gJUenh} za0JeS$e$>vh83ES;12#bwQ7*p5xQuoU=}JkK(Vm*BK5ngVK0FtZ^B{Z4X_-yMcdiDYXVzgpG5id5EBvIkzPS0PXPf9)GoVze5>^FT^U3XYLdnJy1duo1C+x-V13HGV4x zR=S>Zd`yh<;g+GZ8*C~T_eJR~#En;T)R!w*y^x*q_2+)c*mGTSVp~leRP>19|8@o3A7Fyn}Wh8umk~n>j|!;>funx zvv6rn*~D88yZYw=WNQrKg-5DHZ%l|?$4&NIm?axOjr48_<$Kq8J)Dc&PRpz znqwrL&FY*rNOm>m-&3(xzD-9@-|Sl~>I=28n1aDY7%4#Q#&oDVn;IIlfH#Mj2%+R0 zY%`H8I%}B}?}2^!mTKs(1GX>1fE~tMiDE{Msv)my1R(Q)??2mRUvjA? zv)a$-AVzbSl{_Zt_J>2$E`lglxE1{?Cg~LwBd(8+?x$`UQvm;a{qW9aM0)R}6^VWo z*c0H`F|hnINqnlR;d0)Z8L_Mx6AT@$ps+3D^A<>uQ)}Yg_`c#k%P!xxyva*OK`}Ny zz80DRMYg5oK4r*1rS?_jwu!20bbiw=1mxKd@5aHRf(VJ2I%>?$D+FujF6|tTq1FM* zlY#KwxSN2maP_xu4HXHHz@g~>7x{HJY=NoZ|ZS2_H$tq5)FFaq`!d6m>B%Z)d%H zM*(*F<8sz@MM}EHCh$4y`#)K)x(e_E*w)GsOA8Aia_%BqQ1|jX;dyI|XkP2&{J77Y zAaA_K#KQ%L(Dm!&f=<5&Z_R@Gl$o6!Vfz4Pz+nX{`NXv}3Yz*5j)*|TGX^q3NdNXA z4?vj){^*?rg<#8Xsj02IX+pgN15ibd1JpxnegWUW?|NMge0tR&wRLvNDJcP){Lrfz zxB`Tme_eN#<{7vepo}$;jcNnJ)&cS+%mrXHD3ERA##gbZqy;R83d9n_Fsq?1wY9Z% zgvJ9fvLal~k}nOEnEJ#di?GPR67mmUe1xRv(Y*ER*DnZR@W}2w0d=bE{J7@)7Qb&zfXR50Mod{6~LXTUX@HORC2 zbB(||2T=;StPJLZNB~NDu4?|TK{wZC2e+Xj^Qfk`oF>$V#`s)QczKuhgO8{Ui3W%2x=XwvZ7$JARmH!DZUg4CTCz_lHv`H*T#X-oMPz%z^6B+lF|tpVc>U>o}xr&9vHz7a5~;`S7D zJJ@)TOYMHuoAiD;gj5;-MwS*Vy}6$ z;6;D0{g^7Sq39gHPHf)@FzmBxnf zt1)wZ$m;b&p2s?#OlWqXrNtSLsl8TLS639y_**D$A3wf!3F|juB?r%p%E^!E7u*bEA$9?oDjs*DWnIMbo&86R{s4v_lmZxP@Lu@YhW zC~%tq&MPVHmU3->GH;o+NzYhvsIc^=8lJU5+g-%ly3|Q|;=z?@oaC-NunQ)~b??lo z^_|G0G&1L7*d4V8vzw@JO*h?k*P-G!BY-8GhfDRw3qvdyTw_29*xV$F3A;&MrcPDy z4FjW*rD-0@c3{i<_wH!0R3F?8zEhhA%l`^I;Quz;r>VSiy9c+yhvC$V@u9E3UmOvJ z%*VqS?X{@3F;=VS>Z5;iu0CpT51_KqtAh)oVg+m}#%zKKf#)ewKfGk&aIo>(zX6FB zqmrDmWZNI3CqSppZTtoVz^^7*`A#Pf0Az3&yMv{|?O7uiG8>s6MMdDXL+*Gw3dUxs z>=qFjfp`^i8ygA(cCvMKbsuAGLPfkmk3y7z+Jjw$_ky_-^##8eAVi=@p&7GSMyGm5F24>p7vDG&AWJ5_4tvLg(CN2NfU!^nBH zHJT3z2vpH=--WFy>I>)FN- z{m#@?K87+9xrD^39B=5jYB3?Zbt~Ca9jaSUj)6Z7sC=5LZCe(Ku-6^-0l}2Bw$lUKwc-G*HDk*6VklnfCus)s; z8@rT$C3f?VtND-o*~|%=)!`y@u!lm4=q8Nk<(P*Ow&|`siLmYgDdis@H9Z{cu|rGa z1x+O&I>v$SJ5Y1B3(V?vk#TF^p!BTY$OLr4KvsdD+@Ic)E{AhGH4o1mP}o6RQO%@Eac^bQ%ynm0u&BK z0t8ne%t7Y2(JIW$SLMpd1;q=DOB)4jN?3(W%?f5$6E7eL zZNN8~9@yS$Cr4Nc;J46Vj0_100W1WG5OF%wfQaD=^#)jOv<5OWG7yQZ#vJA&0O@mU zru!zOS!(qqIr*1fzDzXhm&(c$2AxB{BoD(3N)i%ZKfjks_EuJTm6e)3KXP(%E@9%X z3>PuLW8&gc>YS+Uc(xXK5gEp`0u*x4?}R@Ej{{8R;N^IsWDkWj*mBq#DEaLc;QoN- z`JS^3=IT4eKS3mv!`cKH+^M+`5;9VhXJi1?98On#L?{Z4a?n#*2s;t{64}|SwQn!k zgo&G*FGGzF1~mO(p~&dy=3uArvO94)?-0p~q||Ei7Z^dni0h4yiAM>oFD^^zX#j6w zE|7H#^&<|=BL)WOOF^Wgh4M4J^9{VZ;zQsX2IO7(Iags{_y+`Vb{FP)c;i<%tRDRd z_OOG2WoD>DpJUv_i8yXJ6iBeo)fgk=HMbE{s5{0elhltyn8J2hV)L7GP#}4vyKo)_{bzix~Vi*%%pR4hA{sczK-~14yA{ z6UEXW!_zs%rjd*1y-7sG4fO?0J;Zke5xVZvJ-<`%zq|mbxQ;n1aHvT@^9G<5*ohEx znxrT&P>fk+AWIE+Z2Ie*Ac)Ws97TX6KzT;Gi9~&22SB0Oh7F~lrKxFX6TmM}jUt<1 z?2h~iTdHf#OpE2HPtufBfxiI3H0!6Z=$y71L1j5(lLypq_3>KxNLWiD1qB7jf(Tmz zodAcjZ^`Z;d&4?ABjeG%d(W``jEyCL?WM^*E-o%5CB=}tNR<&Wy+#1%0?N{iH5C0f zwL2Eo6mF+ze$bjui5Xc<6!EMUglWqcggA+R7mN|r)gHida~QRQCjmi!p^1jU5F^TS zfIAx?X}OBnDs%(D*f)VHVespQpWfbk13f0@<|AO>N~VuZg(L%uvZXbOMF)CMKBITXOXh)yn% zFvBX8&=7MBW-dT=6TRt*XhoI#UHT>^(Dy*eS(wRnK~|z)xv63Jg{9yj-@2%gA#z8s zX8@Y@15k!b^z{|FA3LOkzI}T^OaW>KAPV&K^bTav!9)e9RvQnGGuTHpJKtDf*0Qy$ z%5!tO&@Gt=8PKGc|2-oEDa_~cU&n-LF-Jic7pBRy`xEEC`A5-N4++XFI#g;zeStj$ zlI-u_ztEHkp{Tq2rI-TvD&oaKJuGlL+=4ejUiOee&ts9*e1c;&gh;ee9+<$Ni*|q- zNL3BJLH$}=LzSgSIXaeXijn$r$to)KRr1BN3BRHI4%Gu}mT}my-(Zmt^QIU9wM}x ze6kG!>urDoz+B*CW}f*&g+^Ng_QxTA!HtFC=+73t`>-w%0|Fyyn(*n4qI1Zn zPp`DKnS=LNhV)-yUAxBTe)K~Sr1IV9FKjao)=!C!mQ=7d!4^ig{iW{LuYf*5z-=m7 zs`=o7dZ?JX@&4Z$arrOO;89?3u!#NAD{$g~Rz&-N0W5-Trnf|W!Q%ExS=kJLIDnIg zKaxP8g8j`KAEZ(k$OVU0p@v_`V?z`i@a=4se)~qp&8;j~48BW^DwkadKR%;>@M~}Q z#E=1AL~`Fv<<1mIdHD$-LIF8JM?JLcBb_?{aY3PI;V&yIgRP@eY%z4#%LM!o!$^zP z-rAS|Bs`ciU-9@SGC>L`AW- zhpj+4b^{_Av1b9ofNK8EEMVc}LtVtR;M&#FLRz3h`Wwj2B1pB6GND+8l}QOQ4`5Ku zA~Pj0cw{|AT}53y=^_CcHRSzo@N5E5fSU$+9jtxOwf+W$LJXl<;b1I@j4ZYUYvS=9 z#4FMXCT3=bGEKw^1e4!EW@rh`{2+tOT{?H$g;-Ev@EqbI*kWN;TwPtE8~RgZq{D!g zBa>P|eY9vtEr%6>E@&#O9>@zP3OzrN4jW)8!3F}QI6yow9Rs5XGhZMI_Bxm>=!Jl- z+7J!+4kk3yR9#A{6`oe0(d=E4mX;O}M$RfCk&A=LJ%P(ySwcbrf-Lxu!2tnu1?Zb# zuexl@jkdWD)RxqozS))#Q-BbQd|3h7*9OMfKA^#=s4No$6rd~kk~z{F12x-eGi@+X zrz~K*;^OKv*-JWGO!C49Wj;GQ`>cZdV961bX@EYuKvVRYC9oSx85qof+0T*@Yc*dQ z=RdM2J;vNi-~-vHT6bTcjnX-rg<$*(hb3T7#0L93<`Qe;!Gn7kwSi5m4wx@dD>t2r zj(6*TBrFT1`8VFB8g1eG_^zLVon5NmeQZp1_2*CFRq&$PBVz+{fjK;hizAxaarD+NX6ockmw%A?Ng#19`mFq*f*01L% zKXzgOwf&#Dar2I;OgG6M0}!f|1*5!s;iyZd6Xy?;Ijj`**oiRyrtTKyx(E7TAkp>l z<3#59x|8O9>%j17PPp% z{|@;-4n*=1#@{(zd;SE$D;Ok6uap2831Y%`cq{@(w|yH!cN9p>+5@RB;C>V{dP+Vm`rh@7}$)UKnavH2RDd7DP|4-z%PeBN%PC!W(WcN8Z)WN17B) z{(ytec#3Az<5t}D;wS&z;N{lMdvev_jmeYG?i1=2>gFs;yQkJ2$7UIs8JXVrs|#mm zztcTVm&T9RvX{zTc8Q+h@UD?Q!M}|BVRaS%_e)5b_{8tukFj2pTy=j-jWs2V^$x1^ z-QB>CAD>uKW4$X?*gF9Vl0Z~YNaznS);sF8OI_O#qriRwvInEfr6>6Hfd%tmO^L!! z9$5bOk@wVCruI#&6{FrxOv zoABT4%a<>ICV+vB`dK_EijJj5XTy-@f7*@COtDV z$ftf|CfX^3j;FSA6Q6;wIP1}Oy$eFTht-FwWkbLn1pZ@|(L?LqV zX9Qs4S-1?p@yx`@zSP~}cn33aKf1%n?&3RY-(#aL-XFN=qmvBbLnTm#2@3v3CIhvz zoHdYw9x;!r(f^vlzg_HbnCrX3tH@0uf6$jfeu*)+(j23BYAO{XmzFZ|D_>mUQG_7_ zoC)h9jn`|EeK(1fFajf{n5&}63wx$X4YN-!d0B3wPg6L5#Sic&)Be_0^8bCL6**=c z#`3Pqetgmlav*6C>4(joop`EMW-ZDP<~mPa#x}jZ0GJr+Xd#vty#svKri8cC;F@`i zI24(vxR9~xZ@Tqi5kE$UyiLf9^vD0#XH9y2E|+rZ)|wg)VVCggzMtlm{JH+ge@=>B zi0JZ@l@I|gqo-N|UE7ZRtjLY2Ej%PI$B3bTHvM%A|5nR}x!VpE6ylli{Hd{QBxnVQo5*5->K2Fu2<nt*DJ-xw{M@kp+E&8Q;%iTwbl&6jZ(D`c=a?thGl>5S%mg7@H9Td zdM+j9a&|bcRpe=B_X+-k_A8;ohh-!pm=`dCLj>x})bnB&+)wNXBzd=cnD{_dh?sGASHFoc&-K zt}r!xg1_KvW@Gz;i;K`}Vb_Iz(m4?hbV#JeVjWjWR?njFdb(`FWj}9X-3+i>TDlFs z7Uh*FM*mBusm&=}%C>@DZq`ec7wGt*CCxaCEmg3~(ZK=oT}TK%d`AsHuIE=Rzc`knfRpoq6A{V5g=NZxW3ZT|Qwse8O0(jxrjzrIE9?e8Z+ zR}y^L1$UgRrkYkK<8{SgYMA(Uj8=K;hd~$oA3%g{_NZ_>wAqyS@cI>zXGm6EEo;En z^?vIwA2v6w3x}XL{W%s}TnC5<7cN}b(P+tW4e|yZ2lgq6%{Z&{7g);_+B9T zfO3`c$7$Je-cWYd*~3Ag&^G~NaMj_t-h3~gI{8J-DwjSb#n*!$yGw!u;(p%>WCO~I zrE43&VpUZYcx@58?VC5C&y#i}YL#;vy&24+_5BwYXl<`vmvje)#h?cHCMkWnmFVBT zV(A8QK_juCcy9|*k&#JbLC-gQ=?l~lwmiho<3E48oGAd$W5F84u;yk-AeO><$jc(U zUP{X(xhy?=f`9-1eNdiGPELTRfktxRzV}$pw^%sM9f#e}VUgAK%oQVyl0;w=oHFBr7Xf3CRi>Mdbg!bl<<{`TZZS`_)%&@%dcWd7bBRyw^c@ zp-W8Wn?J+Ra!N@Fm35^tB{lV~f;oV#taZp=sm}672@9C##S0!CCCCp33hj=kw3}O4 zsKm(Uw|w{j_ZI>J>{tu1Zc>`!V=H~V=GXqbg*}C=Idle+Ou&}Uf<&uhRZfq0~ z6uiIv*5-Ls)J4U`U=^7Hwo+5yzk4^k#~QC6hYYzd*O4RP+q#)9Oca61K-deEE3uOH z$#67eW**wN@6^2*U8ZDq1>yo#PVKQ%`n!-Kw?mO=avnt+pw&#m@(1iCD=SOL4FJNu zf64;D!9U^%x^T#uxay=rw(R5ORfr_#;Qeg!*1V?*QZ$Nh38nMR$7ZKF{?1b9&7%WE zGX@HAaF8JIfsZ8^l_J!^A{TBNqu@JtIQmKV;eHhM?T{96zic;mqqlLVm&nCHG?Y~A1Z3}yYVwau9R#| zw-9;aIqS>uB00Hgz_~?k-5nO0H8B~P{_gIAlbn3;i9{aI)~`)g^5 zh*knyEGP(I+?-IK^xHf$P%}AL-rU>_vD8jQ&-Fip*TRQio2YZ&`M`oO3QoTY5`U@( z1bX2Yvc8hJUe&k>^$gjcxc*&C7Mp~rk?*j8n`>C?^ngy}$dQ`)RfImwlQ+pi4WgdVab#+Z$-SIJVpyAH@dPYWGBX<>o-ZZe7j$}Kk+7vK>1 zfRM!L)~!a14;erxF6ih``o8u?yc(DgMaI*V2;|toWoBzj7y29cmg4DKx5T9dpG!j~ zqwJ}y+%VprVsJB+;K1VE0>%FE4-NK$d(zsJz8wK zYrlS)loS@WMY>9H|8~)$FX6~%>9DC`0hBpSKfRowYh)xREuGdrE(Z9QiOEXj zN!jX8Rpqh)XqhM#;rAW!0j2`X3$AJbbN6oBSYwE7Zyw#7n$h;TRa?)vz8!26{gs% z)>l~bWR$eDXVuhTxOwZkcopussdY&fF>9S%3!26pr{YpbegTlad82JT0A&IoNN4BY zi<8~(-wi$6%=Zee8qYPU{$2e^QS@z-e`;z@1enO@FiPeMtI7D(ODEyLoKINb&cZagbg$ECAE z_NpZyXZUTwMo>^tKuusAXNp{`ew)Bm>Kx1ZZ$rZs6}S6sQc_dy9<8#2K?t7YHGpRR zetx%KsmBg?aOGuQLqZJ7d1!82hWvN4a@WqU;=4Q$QBrDnBVP|bT=-Hh>FL#cTmJLM z>sRsM8Fh78_us+`wy5?M8X#uLFe+D9(l6X~;ikR0lod*x4$uFb8joBoOoaN=bGGi- zD9Nc}p$M#xycakCu>QM45rmddI6;E>$>dT>d*zA4Tfup?k2^r43AYOny#^Qzporm* zvjF*yB7aW+EMz`wsqm#h0hqh8;`(_|u(&_q(+ki5mu_;39TgR|uMVI=K%z3*j{5pS z=efN{k3tM)a)ZVz@sz~U{Csbb<26rD+367b3D%VD z&(}2}AAr;;3n^Q6O2?gJaD3k8MW$LoX>=?IrG%T!dOSx%b8Kpvo3j)Hx-QE3p{?oEJ#f_5V2~AdnG91+a z%mEi-lf$V5Gd?g(Hi3dSZ$zkbou)sdUQ#>_TpooKZ^K@*7Cbw%JBngV9{67(%NrXV zJvWW7U~2$6sIgh>=WV57Tv=@F*uW8Pf?^EVcf5W{PoN*3dkYJTph5Fvj@TkKhJ^3e zn29ueCX{tZvqBszqw0kVVd^QU`WPb?;vG>%*^mK{kP}!2a}?LF1Y^= z3~YY&k?%kIqbOc62h3WE*BoJdtu(e}l?yM$hyX(uAK$1=N2WZn zFQde1TJO7zxo+f-?+VzV(G6`sq<;GJ7yMUI<9%;lG=Epz$c#ZWX91UE-dB^E|0mD?gx? zyX^t0A2nV)?d<~tf4@cF5X#d=u`uBv)o07TfuZct)V53nZV_OD1Uud}uPkH#%jSyp zXkLxIXi5za=?;9ln*UU7Ux10)zMXE~fq8!W#TM+PuBGgZ z?wkG~&1%R5F=sd{sNK#8yxl7Mu!+Y4(>bw~2Q7PBZ~9ftx>?7wz>vCHa}go>_tHi8#-U6Z$$JYY3R;_&dZA(}lYK^R0oL9&10k zNb@}b-iLESdnQp;K^$o;423^gna_s?(`*MPr;k&*2|H@e%ZqT;R97F5(eZs1&$jg2 zSeNmQTl{`l2HzAETuSdkbpi1^9zOhu^9GqhV$on0PWT`DIz4@cvTbs)Lwci4*`${Z z!DF|fTY6EEUMTNQMIoaywO=PRRnD8JJp1HncegM{^)N$wPmeO?^XiL7-rIEwM^Nsq zFM0m+0xrK#&wSO%zV1{q9w%`B#=4P0$GIqdrueArgs6&bRrxDEczJap^B zR)GVQKI$o9JZCl2)Khkj8LAj`eEo?76O|KM99UN>D&!N}V3P0X@5hsQJzq~tDu8Rw zKiHOk<7o7&vSU?Ko|>4r$*OQpOAFiPPIOhQtki!j9wQG-Y^SD%YK7ca`p2d!9;z49 zAoTRlFER*4`3rF2TiET}w^0-y%G0)Ig$a~x@F-rb@zQ-O5({4>1VVMO^W7d`WVE!j zb6vMX-vgy@Y@~|x4&y0sCNSBIJ&No&2{pNIqSNPb zstUgnEO%USiQu51iK!_-1zdhFr{*bs@>ZYTDDP|7b@Hsvfv3UFi9_3beX_o##R#dm z^76M)yk1^X3*^2)#iptsbih5Sef%YNRWDsm%VM;Z(`z*>sxBCmE+!k{3swtVe)!uP$)x%qS zue8je3^{pnOSLfgC!vP_z8f{Q4^VZy5$-M9RKTZ1pr198!OBs?q@+uak?C+M@tnS_ zl+=WTGdCwEQUS6+jsu0t;rMhZm_(r6+|m+G;g8DRKu+)owjQL}6V-2n$X7qXrmOi? zj1HmtJBz$)S?)1Cc!wuHdkO!XFQv!n#0j!$VbpW@K(WJGcT!0Si>Klvg4K5L4-2rC z-y}}bM@PW4YQa;K`SN9m`%zh08(}8&tj0-lbFz2%za7Xwd0DNtjE$L@ALQSaD?7-% zg;@S)pIY~dYg@(*vDuPw(ko@%!>%G*T~jk$J>}2pd`qoAaUuQvgCn^2?$wDbbr`1? zTr$ho%hZ3XSf1ZIot4)Eqv0GPBA{yWLKqp*TTe}Z$S2Po1x%t7>7RF(?&IL#dgnzW zg2MENhXWpkd4k3unadJ*m&~QHipZD}B5U3S+MFw3b57xcM!}g|k8lqI_cu|97 zWT?joK5hC2#eRSZ(M@Ca) zR$EI;6j0E+5a}d0cz+1hI$XWF?Sri2#IC$MKOBZbSr1y>=X^LhNysA@)cBq+bZH4*x_{7BCfd0m@0TqW-EaCA@OgwHX>@E!%985$nhW$d) z($b(-hg!n}?jKw+6h*)kHPp}goyme6u)eA1#_VpDn&G%w=7_%04#|n_k4}Gckp+H+ zAD)zSGT|`#I%KCnb+vQnP8=Uty%)vLmY%q*b~aA>0A&@@2$7M5E%3~~FvCova!(mH z|EZ7p&y!B5l091X8*}MVSfWa?-<-L5<9I4l@Yq2*S3sza)l-HgegF+w2F0^Q;kMoO zoQR9*dZ=y?C5~R}*)woMA+@H@FTX;$q#GGwK*7InUoxb8rKK{wyyi$FK{Hm2h;9^^ z6unO+n5lb~kk{@GjsH`b>UZ7%lwdW&v5jXrtCJ&~6ep=*BP@2I(Ns&7gUQMJBF$^B z+1xqG|F-d!eFxj#N7O8jaGT%c<()o)#0X~49OTv8d*=h~29N{69E}0N#c6-> zS{fwr@%6=bLPNb@XkmUHp<1?Stc;9K&@xuXx#zisvR99k*`_r{Z3n{~v#r(@3T^17A_bo_z@0fiKYzu`9tR(? zczA=*HnNEt(9%AHgVKl37z+z<{;tfpT0foq+5Z+qcQahK}z-F(3f0WY;tA| z_4T%bK)#O}>~C&ww+H7p&v@bcApo~TP{R6oJC+GmDDlm#j{8$ctUiK>P z_ay~7w5kZ4sH>~P%HE;?p@a_JCv-*v0{qBdICSVN9oeBnnUEqOz$#7~y*rRhh*rGU z3TpYGU)jse&6NoZSQjxez*Eoz;77Q+u0RCBqX(4)jOew;trg(a8bFf-{2Q;^)^--3 zS2E3gx;r&x9XyP0iw`l0Lg+J~sD>|k*{67K{oB2HseF(`m5-wehqRpwQYPRXKm-e3 zE>L8uZQK4Lvm!Mr#W3M;GG@(?`&JGP${`#U{U&56&@xH4w10Z*dfn=Mb$}1$46p&RB#;oJip1;u?aL+j~0y0ChDPIXRI+i^3e1SZt02;N|U2 zZ$KCq0iV@|?Z!%hZ7()F{KW_v!>w1xu({`iF1oG}oxXCrPNYG(C$N9m6YmBE5gD^Z zbSb=grbyRr$Vn?GxCL4O_=<{3P-@eyPT>dt;g=f4W0eaz*H=m1jP8X=FWx|Bh2*yD zVk}%W#=-zSz%BD>v9q!wY~6zCU3H(7V1r&BW5fEF6iR%4Fv9VbA3 z4i1R08eep!BkBL3NmXaJFKp|Sx7pJmW;V9in3xfXU~_;>MsR;|TWelE1Hzn|t~%_zW0^mfuM;B;^!tIzYODCUJrJUCD->>!(j60yxH z+`zvgiP*&2v58f{a06{%+4WwrC|QE1Aqv`)bY#K9M>5=2nygzdT^ir|F}df-wy<@c zj}B6?Q*K^Nw6+3?Br#H!jN5n6J}7j2*5|5LTd^+MVUQasdU3~z4borN>PuSXjp}j< z>f!T0Z%y8NF`yDR^0NPxOhJPBJ$rq}J83fZ(Z`CIFYt<59JI9g#}QFcu>M*-xO_;- zenn)z@<3WH@5T9Mmn5fGO7vi*RNn@bs8w%X`?pZL;un@^*LR zQdiBZ3E!7_yYL)ywA?WQOeCIuy!mhai?1(h@eV4|lOFf09S;xX!|C&OSNbO92*Lc#`ZYz8=oW(cK-z_4j@DiH}16S)wYT=F#tR1Px4EUST~7)rLs2ds}FH^11ecmuqXsC@h#U4 zGv-=8HhmqedNc3EqP>J1J@GpKHdi#rZ(PHT%Sc>I{112k-zT8)Hz;*{(SndN{O4-_ zKi~F${@gROQt5@R~G4m-OCogJX z>nt5X969rcG>Q%H)sj$5ERL0M{rIMHOO$2U$K6fR>#y|2^~Y7i4oLRz4ORp>!u#mT%hN3$fYy;t@%}09JC4eSs)ZM3q>oSAi3Ui~lGwP*5_pm!%X20ds-(JaeDlK1|zOj`HTNS5v zv0;FTgA`k1&Mh9*#HB(Orrp2pQ;9sQX!*(ZmW1Hh7|NCn7|Dj5PLE;3>ydN`s&_io zOfX#y4a!-qbC<5-=gr2qt|SkpJ)EQ2J8t@I_I+jH zmzH)C3MCujZlHvcq4KGiFX5!5u5R7k2fvN8R|uZ!I9}YJ(LRn#LgpPrvK;JBU+TbJfLa zWIc}!GW4yaqoWG}1rQdND8#`mFcS}{aFtm-UTYUq*vOdtASg`iL67J=bJ^jIP34Z0%}hN_fQe1m z$XgM$zK251jRp*qDNNMli%TjCu7G)!ln5uL+~2u}AYVKw*1iO6uKHgWeSU3;(U7nG zp}nlI-rkVc7tZA&j_A_kL&a53FO&*4PAs~j!3Ft%ngcQw9wX(ncPr}CPXr|Svz-|3 z-*fwSb%fpGe0e@42`craNQ|*r(|c>i1|<+Spsvwl!P0i0EAV*(f;dT>w0+Tuh=Kws|g**bVeIKP3a8z@T2-(Wp zWRx`KAbRI}eLdJMq=a*F-ljw8x^vH-1AB^l(73X((WC$wzn8CJ0CET*C!+pf1*)r~ z7&)u1zJ2?4R2CqgfMiAJMzR6ZVrSpyr!ibv1>8(ROj{Z2C25^EX5uIY`Q$DWdf98& zsAy>~hSEOpzw6L(gMSI+5~zV+#Pl^W4vuF?b#-*J;HtC81?CUUYos~A2KeSU!vRnU z3q3K30xO1ZdOBOF@eNc)%5Ikbxs&zR8{+U{iMX?0zkZ=&l>=!J^0)*tYr;Kc#kMjB zua!5wD-l~$p#Z`UJ}pWv!q9{P5nH)n_W2C9r_JhxeHEJ1?QBvDpxas15o)>f+Vdi~ zu89F+zyV-g0*k8Xf=C}QO{l{#%S?VukX{kNd4x({fetBOS5h8mwWabHZFMX~KMfTE z8f!oU@DXc=t}pf8nCW{vj|d)fCJRJYfhW@_7(=kf00=m!;YEdov)~7Srlbpbto`g4 zN8$1-fkA6}dK%)LvoedCSFiGO5d*4__i-9yk@VT&YZ*Yumhlnhp>RU3SorDHeY+=t z|Jg-Ee8>q7he1Fa<`BY-2Re5ff}(32zbirAg^vJ}k{cwWtaXH?tQSlW(E0VX!F4u9 z3V6e>A={R$5{e3IF$Fqc@AE%@zGS`2_<9m5XI02x(4!I@OyeN-;`{gSV@)B|E+va^ z^DGD2LsZ}@r%&Hz-M-DlHIkd(HDaV%)xK^;eGvwilGUG$>kDVsU+k6Jx9=O?gDP5; zJgYYF^iv&ia45j$1BgjPLgKeK1v~Pk&J|#T0dre!QXK&MF&;HGIZxJY#Kn#6{rq)+xAA>y{v-0$@W;{G(cBw=% zBywOZ2|l(c%$9BqzvbwN8Md9r9VoyT@E`#sGl% zbVg6v6AneNijKrNh2M#nFtG$LG-6b?`Ft54??FJyrAw(c4^wZVDNQHPGlwt5N zFtGSOGm-o^Z>j*sXQZa?d>CtW{d&@%)Y`4>!y-5Ah<%st#4!ZC~S z)THOnOZQn5eKVuKk4f-0Ll=v% zJ5n)(v_*Y{h$LjRVslbj+6Sv6KL$!K(fQ%g1x$*-B)((EqMbgsO-UjzMNml_BVN3| z-rY|^LIOJo6)y}Zc%_K+6k~n>q#t@EOeo~^L&h}dS%C4;!xDFuCze#-M~nzOPv|xl zZXE`C4^qc**{RqA9!Xp=V4E1;8E`+fLp-`k4)#r7A0LTefrAIN3hJ~ZaaZtzi7!K3 zhhSGiAf>R3wi|ciOJRP#BeoLZX#0%+^*(b%=RnprHu{cIirpB%h)<5=k{`aOv=R_S zC@HbMfu|4-BgPcsbH5N=F+j@-bWfwB_XI$oIWaR6C}mr8f~qqg^eTv=dxX?%i$By2 zXpmF2)A#y;^P5A+aMCC`YR(HE1(p#-rpzO^I$N!R=NWHy_wDR2K;6;5^Z!KSgBX(V zxVY^f^TRpFs>VG>ZM3h24R(1ZdDxhb#P~cTL#QQt{5m%s#`9a=2Fc23VO;rb>1Tbp9 z5WvN#StzSe@Ra@jN~J&tHn3##t&Y7yCGc{7iOM($@`i9(R?qp;%6{tYrK$sHsd)nd zzdFqV+h2ay3eEHj8d&EbjU{jw3yV`H%fRcWz&{J*?q%=gf?mKoLkKD+jil7f#$CgO zf&&d+)7cqq1%=JwhxGDZ=H|AWW><8yAfDAu_1Dbcp*;O13M0AplKqhZIj^=mmUvK;VBi9s+^@gDeC|wW$OA<}D6W zM-2{Oz>cW2G;1)fxN$504jPP6tspTAN1&=+gPu~U%FhUmHq}`2L~E0a(!5xMv2jA| z-xJP1+egflK|e~IEpWE?d#$fIgwQsv!mfq04NVMSDL5#J~VnWso=fbBQipeP{LzkR;WyQo8Sy-rg&g$#4 zQu8O}l4lwelhb02ct#yPJz5_c5>hcQopyQ?F90SOja~t*br~=guBc+8FU6}f<;r>T zZ_6CeXcJgUhjRDKnUkLG?$V3B-@m`S;D*6k&T*L4fHv(&zh(|@1FY-7-?;n`K38gZ z_Eyo{{Jbdh18k?L9uTGqe9JVj@QB`~|JfNwB6G$D;kXL!nTLJ>>I$rvd%*d@CGW}F zoH`QZU(q2DU{dqYw%(JPoRm7fYjQD!`s9fd6++kW%Vs;F^;wX)mtreP5>cyMf#(WC zPPb{_O_5VSd-mR9kUug{%WcEcUR+czJ0F>x@VIL?nTdr3xwgc)M=d#m{f;q9YpK17 z?c?zwOK13dM5!c=vv|s=tD*Y@ii~CugYpm;{6Xqu^?&y@&`k#%A_NWtV~2|5ij~#v z0n-NV7zqb~kM4@0KjbeS)?_5}9&=H=Q(g{3XMT@$mJ8ei1$ybY@+VBTCF(Gz9U`aT z-02j2dz-_US?d;8g#)8Ngfq??3Po$ecEiBZV&S4^M z9DznPS65%gOya@33z>o4gTZ(G1&NL4UMZJNW{_cY6S>E{Ur1ZqxzqPG@p4;v&iAv| zb(5$p74ioL^g@rKHhvL69V&Qu#WC3@)Ie}l`+x1Bhe{VhFArgwkNt+q2b#;kKnjC1 z)HioT>5fV~zW1#wuco{E*3FyrD-rwm?;mIPLrDyRbpy2p(yw#m_MMfXa4E_wp_?gA zCC(vNS8~Cu`l_jEDVk$nUGD2w?xUO%YMA{o=MJ8Ow%s9b<33-I&fc$yj-QlLZ> zoxcXXA|7G2eeJMiG9EG%+;g2;_57Xgy_zJ$BG3L?x#)Gfu`@G6(31G%h{xq0#40K* zMYP^F=Y4q}= z1ZO%28f^S6xvzq){7L^%_X(PY%G zKjI3JKH)GPky*B)(l-KfF(*f)?xa7Ww47(ZC>-qmzgm$#%a*TN6W`-4i5;A5Y7_EX z-ZwV#T5cgDYwcr3=tM#%{yxMjQZ0;g5oHfBZG1rBhrjBryknh203wHs>#m~jsCkI& zGQP9Q%FkVK1$mwXk}*6WF2C`w6G1_S#)zCmN%8#o=77A{^(iU9T8{_5boJ1s;O{}n z1ltI1458bs2S|)JUaRnHem*rL19MKpV*Yepx>35=b&2_q=r5%n3JXL zzfp6+SnU5Jkr7$p1_ohTC`G#DqO#1WmVtZ z{doIye41YV1dJN9SO0(-^dm452ye>~tM5k_JZ!bJlY>J}QgUmwgqphgM;dNoddeMI z`8!0q0TOsuP?Q{Gyr-U`s;1_LYG?|%3?=xttaWXV;`#Z;wL)nztQLdB#l*!$sYz2_ zeqV!qpLB9@VsQo0T2&#s49nPi;4-n)jU00+Iuu(Z6U;}f16)GfG*3d*UKMZl;tb5S zgj(5IrcdgBc5OjcGkWu$-J{?|;47E1{{~xHQX#2?xOn%~d-*AsP#`7D7TckgRHKcT0qF0v~M;{X$^ z)`8p%y`!Qc$@e4`Esc+r=Xv-l20@(@}36FGMOk4!A)yBt_ySKsLt_$+bx;_Vj)*_MEHmklY z6VkMU2o)nQl2%kxqh4hw_a)~k+I0483uq&QA_uUf;40e}?H-)EjD7q1^@A<*sBmA5 zz29~YXuvaz{rDYO8Ce%f5o-zj6~7car)F@_DmooF{2|jscQe6}v=Zvnwz2Kh84E)i z8FTDbGqTnF{IFrSO0m|}0)nBS`1AYs>5?M6ng{>Cy$5YCNbeU7X4@z!Pphe|R?>RP z=MKSMW`_D3WED2ZyqIrYP|SY#@+IE6($DS3TZ*oH|4!;nAO&FouN1iiR5P(yaus>s zd;M@0M5*n&t4wbYj_w}mR5!8hVjxLLi9AG{X(J&|o+!6y(I+HaRF>u9IdWtH9Y{G! z?HW9j*F>HyxOyPSHTG(<5Mjr_5B3#oy5gZ+T*F}wh%N@Af;x7$4`w3ED=R{}IewA7 z)?#vU<*4H8xa7Z<4t7=+e)!kZk+n68@64^y^`~!jq&UW8&#ENOHzcuLEGi`2SLc&^ z^c}{|1QzB=2dOz<1VC56UAW!XcRtwWdW4@ zQNtJR#~w$->Ou+vhlBUP2HCJ6q{$$YUJGSXkT~C8xwp$rY!45x)@2K-hEe}M-Qr(! z(mm+ClzC1M1Es^NO2T7pjrSwOHg+*bCDHKrFJBWT-sKSTyX%)XmmlbS9DZ8eAZ?4s9;q2(QOIcM@eP$QhPpLg>OOwkNPw~ytS{W5N7yynUnew=OPrv57Dm<#(v zE9uv)(Hxz^!lx4Jkx?pxS@#ytA2atSI-?oq1Z%fiSMzmCjZisJQSM3c|1Q?PAlAFe zaHpUEATn}7FXo&1F+EJYSKA>ckyN8hvv$MBT%FHfOX4~Es%04gk<3eV4`xN|tOwah=7%ATg0-Tap z+A8H56l(ai4->~4ep~AX7k|WruZGNrTNBYb}+v23Q9Ln{UW(XJw%#Ux_#o&yX=6}}? zui?jxiyzOu=6NR7p52#SR^vIRqzmXWu3KMbP1FC*a+niw9{}SXHo0jln^>7^93eq{JAeR}A56vs zoy+>dLiOpxGc!mvpO+=L67kKyra;o#DM8P5N5G95Ld1Vem7qR)6-q9NPvl_V`hO>1 zOiW9o_84kL@}>^;pGzjMhd=u>?Y>X-l^-RJA6;(G{S79pZfZHbU_jBRP}He-t@kGh z(j7&qbLGjend*o1BHw|6%goq#(?79@doEvE5~cRfZoFl- zTw;V@QEmi48~bCK=Mv?oUB@fz7FX;C=x*5y`V=n5@xQF8(Vzf4e|U(tv{n)}aYUcInzgsaBt2)|Z^mj^EY4@!w^;CgG=kV?kw_l3Uy zzgM5L8Gf-GhjZUQr_0zL&T_ zW+pe?{={7u>y4==!p;a*O!V!UVBPN?_#5)i7*bf`j!i&C$Xa*h1LauEv9jaGoNs$# z%*Pk6I)T8*3K7FEGPbdVmI3mDsqme=laQsxMs zo632*6M8<5#kEzO`mSuou>FVwY6^tESJ3P)yJ(l8}-rq@5~lHGy)+L8_l^ zydrU_?*OPN=p62n)+;~+$ePK@2VLcu%hO#|=S_1m-*g_5X1=9N*^x=X%Lz5rqJx2` z?jQ4(q)y}fz#D&Gb&l&qqDyxzHFP%taZ}I>N7M;shObwPE$rA7m(;utLv6{O`u5d& zvsDQPTl5l?@x&A|u(^4*s9^{K0|fBc`u3wt)Ib@*MM7s4l1_(dZr$C14-XSh%&E+9 znhy;-?J~qnwr<}Z*K2{Y_*yo|-7&O86oVn{9N zg2nFLvFiIJ&((S+m7Mt~gw;2h+!n*M4R-GBy^X^6i_=5DecJZmSK{S%^k}>WTYWfp z?cP0u+^4_2qcbydA|eUrhnoLR5|`Nc(b-31S8HnZ=O8C7emekD*kA4YelpCAQ(BZB z8F^z`TOtm}7t~LOrS+3e@XogirF3&GtQD^_9G(1=jb;m~CH>IHk1y)#x+v*on>RAL zpTG`O$n}$391AVgJQTDIcBXGRJ=^D#Y|hQp)R1x23=SF@q=gQ=eQM|uy=q(hTy!Xp znx*heaM1-WjgPVymkN2tngfh&ybkB}J){S61?buVA%Ykoqo;$^%L-E3yn=$3^{?+S z+sYHcvRbEX3L7?-Olyc2sX(+8mH3XCO9BnK<4WJ>R)`*F+cqANT91pIN>1^VyL?!C zc0~?juqnm9yLH#ze?HLFC`|1^=Lt(ZU@!Ux!s8lbsJpCjVQKkw0_+C>lA%03Xi(Jg z>e=&b)AB2?Xh&}c$>fG`XPj+xiQC<6w{qhXE*(1v*sw6tCFJfv3_t*QxSRyXcIcH0 z#B-w5?fv~8!|!NvdtefS4F+M-e}UO5#KOVOOpNo?G&s~@rrT9lw;yA5V8b4D)hNG* z-U*E`;8YMJOF=Dv05l&jQHeA-dwl#a&L4#z zwo7RXn{FRif-f0>VOWJl?p+S{1@8N6h(D?Tt#+^>ZhVR_Dv2xt4POO zJY*|l_@gRbbWdIht+Zp6c6;f5*D&hg7JsB7BJkhg1HUG!vHjb)4K)ewx3;Ec*REZ6 zav61(^RjcML(^$51Y7;%mE*<~c2WCnF{&JqWL5!jF1v$B{sTB3BC}Hw>D8FdFjKz% zm(W<|oYgyzd{~U)KnvxuvDxyLX{VDmL?wGmO1Zw< z`9;4}aA-f-)hNarR^CEnL!pL1{;&{0mJ+i+b>;dhOfbqILI*jB1P@fN4hx+_kYVFbOt< zYJ1pNUYt?dI)ivX$p6_IA&*?au#6_JV&jT;DC)}`<+5;|dJWe9lHq^_50Q(-XRZ{z zc<5qNr-6$7TppN+OOG@2vSN#11fQ9nh6DdBrnx~W5n`_U;P1Jsk1u#hF}yt2te^f~ zkrIA>WM|+h!dt%z8Z#5pYZpj5L9Zb(H+UGAx*QHp=1L#|*BJv)s5K=s?4`$--{iJjxi z3mQ0<{Fl=z`^xX%R_ihZpZJYtd1{#$-{ra_J;`AgH&)wX(NK3uNx3X20hq#E*Qh}H zYEs7I;X;skAl5F|1;3`VGY>QIbvnp7;`L> zoEi)RRn9O0q48XGMlKy>*CQY>KYvEb@3ZD1k93~8&bM}Y+F$LdwK3!dz}w{}q|c|U zcQ;MXFmN8T=}rG;5BZw$((3v$rqQxeVO}W?A&1`(2IHj(Tb};;NZo+GCESPF7`8xH zSB%`i9E^t)uq({W92)oa9>1U&tV7i~Iy@{YDcLYzf(M(r!Cbcsf#+w=%t>RF;e#fk z*0t7tGx#8^Q&yJL4R)a}>O$$hFxahj!K@!pq4M*2w($1Ql{2+*fP2wSWBcByJ=u<> znxVI~Wfcbu#jUiqy2?4n#=!vz#+Dnx)R)Dg@fA&18pvpYHQ-$WZNZ<2JNx}xBK%kv zkKZl^2FxIG##RNu6?r&tUV}$Y*r6GeoMx!kZY_qOl)sRj+bff7*(ZWWioiM+m?QIz zYMYCSq!jC+wnmQuA^%@u_8by3kyqZ@u2xt7w8`T1%ohhG$*-Z1c>um95S1hYmG0-~ zFXKMLOu&v&nt>di63|DW;duG-^mv)}+q0H->+cP3sFaJUJdRmeydv_XE7NG^69?RR~JuHQO1)q!0s;p_W|< zaK*%}`bXSEdQ=QM*zzt#$LruuA=p7%f&m)NDk|H;#g871mGy81(*P|7)F1JSnTDmV zuoWoKAsPRGCv(HfNkVPK+p&mD2ke_TiSVpeyfo5XZvBME<1n>7XqOD#+*AE=a9?=N zAfNzKxdQ?NVQnGu?mn~ZCm;-JT3QV1O@L+!#v9020xk|HJ!FT7S|C>X7EUB!Ip;?Y zx8zvkHp55@G!r<(PI~(Iu$IF@8aJ^&p|2qftr1URVoGfKrBd3$J5?V(I5iB#Ho`Lg z*70sNMVN9Kh6X{LC0|Q#cXzmekOI`#>tL1!ml_ggPI;z$qdKM_+kP-L!Wb9qTL@Ib3@!|gZB4lWX6DaKIm%$u zY@M33gTy=>X=ijRbB(%5YhhXh^i%a}0Mq4te0)%25w}D6FQ%h0?%A`9N2juC_tz=i zSDsEzOGDLxkn&^5vIlPbM+Q=(3N@XePpodGT{!3$g8WwO zx*G*x4pgytRFGd;1)6QsWce}tx!=0VRq-ZREaaJl`M zo|b_LzA4Upjl2ozZJoc}2u$h2{`Il7LwF=m?buW)mU( zHZ+u;FD5FA@8ChUJ$sOy1Xc-!hK8(!#OXzCO-&6hmEi*s#646znYlr=O1HqVB;yMI5B)S{ZGv^9RGrGlBU7-Ebcgpc)4SpjoJ}C(aNcJ9U>S}qfw^JVJH=h-`uJapg?6xnB zp5ZlqUEF*Cgyn2Y#AWeWaJ~8ZJa}`c#g23>$YQI_OM+$Wzgz7}TxaeBC~Y8oQlLX! ziKY>btfcenclXC}`jvo+vX#fVkLghTc~`TI!GkCJtAx6YT*#+G2QEU^aiLUr zm&oD6JKjmWuFp(O?Zt0VPq}7gRp_}UC1{&^zC0)ACM<;7sf*YPL9i3QT64-y3&Bv0 z2$6@u1FsijnythT?A{MwZ5>twkbHGh5z04FCW#pD4bo#L|m zz_)Q+^r|C(vtIAjKIWd22one-hEhL6fs8D4VFqP?)NMPy{VsRj$#)28zCV9{2E_%w z4Nn#dI7%)^fB+)zd^Ui%l%BW0^?Pi}i7{!IgcjfO23H;=2Jv?ax!($i9+_@OCKf0d zq`dYZrK_Z|%c`7gL;9A)HtiRJX$X%V?QmQM9gXQ{{kfJ8D~;p()%h3y{Q2|D`RiSd z_1|@9YA)K@Wf#e0ynlrP*v4i6>t1esUQP}`CqOohIGFc7eWKLGsdeepsetyWgIrw5 zE4X25T4g2z$;8Wxn2foC{2$)Nz&$p5CA;o)Ud0?nk~H(fR8q%|LHcMse7ufL`N(I< z!-qG|xWv~$UJAGUG-VH_*_8jCEdMwbG;;WOE^EW)>0_AV+T7H{ z><yzY&pblmk~?R5-S@YGD-rnh?Sf8^XBC!#p$+&_MP=CV`DU?~o<7?N+Z`>=+2N z<|{|D0`5!U&<9C->-^t4Hfly_@x}!lb?i6A`K$cI1B=bcq;MYJR(WG$5q%#fBR2}G zVHR@#`4bHg3TbL-!6J=b3f4ui;|3+pk1VzV2K7yb01-O9jw{b>PM@Z1na9pY7_oWP zBXOi_YiY$ICms0_kQihCm6q1;qkZkcb@I-!I=kfc?ty#?aYy|%H%DGw&+jHCjkL>L z4UtBletU1;dHOaFZz~=B$Kb7JI7FXck(xc5ESi_JeoJKGaM-xnz5{A0CZF@3lyPp| zsYdyL!n%Ttl4&RVJKC&~KrT6J(D@PIFO47^Bx%~ zgxY0iBX9}{E$2qO73;?4C1cgk?TS@T8JtP!c(DNGkmAA}!uQ``bp)nvN~Sw?!I6P!YVtFs z$=|QMUQrDd|0s1l+w{QCyH#BgsV@v^l}Q=oZ<*~o;o-4{q1N#R?&nXt`wl^S?$7O; z6Nm0sSXl7>;_ByXnXjHbWR)bL{qEcqK*ORTz1OplPR!WV4U%lR)gjt8btfngK9OU) z+N*rt&8-+)+V$%YWaH%6YI%YVnO()xfzFmG4(B2f0v7Ky z==tY*(>Z~FG@HjKo{^~(7jl6N-Od%wvl7a~<<$v==Ag?Mo2wU(GCElAepjS-;Q(0p z`+^9HvqUKiXXQrn9QU<&Jhjjm|KNosP3^ntHwhs;wc_HxFoP8A@m97@5R_(6z!slx zqusQL?Sb+M1lZaGu@?S_w9k) z><=-=?OBU>f#!E(nd*DeExwD?WtPGy^{D(68&23v^%k^P9SKU1kd)Nb*DryEm#5CZ zk!vem@9o|n_4HbkM^B!;&}kG}lC-VJJ@i}fm`hW|90#TwE5EsCc^|UXb~=vO`ZXQF07D}L#bGD{i>sGuHWS$?d)Bd=Z(DC!p7%PR)IK;^ zj#;$})9jsg60Df=yK5V!nnEH`nBu!VR{f%(q37!FIh?nCzZ&uZ03dDu(?`bEN~#% zqhaMy;{3UaxmA!`&{9)ZyfA{G0p~#YYR#^Amxr~cwp+zcvh$t77UPBdCo%<{Y|||( zQfDXR{I}DSE*NL)AWwZaH90J>X1d$SeH(OIYzkPCaazG4USpA~Fu4`W*hFOQL?-yo z|Fy4>7|3#+Cu!Mwhv$T7q4e?}m5Qr@3!DhQH?32iGNMsR`-kHputjC385{HkKd$7f{4K{ zwRi7smAH2HmOz!Ik$X99U^T?1Qq~i{18`7c9v}HMf5H<6?%F?@~ywEk3>iJFsC!^_F3%UJl6^&1o(-l^v!N74N_Tn+KTOeKcT zKvrZNzH4yO-KM5pusbjkLI%D2-4pV=o~O<^_gNjeI`Q94<5Ab1P}z^8h+*<@b=C8@ z^<`lp@AC`wt?*l=v}3M8V-61YqNYbR;vZMSZ2xoJZ%poyT*q*vbX&3k=(&-TSY|uq zvvOLtXi59J$NQZ78Ofw~5-4xUR=*=3R8H5v#zVj3%$oLLY-p~u> zkv1axEa5G9^`dChWXd8$v75@Hc)??8V;?-rJ>9 zX}2H(47!`^n9_SYSftePT?86-I-r- z_z-*ton7hyTAtIPM-V>=Gz6L?Vq^_1Ew}xH4zDu+Q*mp3?t%`h2!gTUxkmliy!TAc z%&+RjMThf*YifwdH6&a)7??{88xb8U+;#J`BJedp3!KqB4h*~WFJvBYm7-Yd3@1*= zM`l6pK*s_UpCgu_R=~FW*JE8vEJV6LNP*cxem$_hF zhl!`Ep_-Ty7nIOuMZ^q#c96WO&-t0lOqcvA_R}r9t3)LRfH;nf@UX@dx&6v8%nW2B zIcZYmn{c^43U;Y1k8M7)m=)`D5V<66ZO2a*Z(UZr`uGIL7`b^#(7q6Z#V?hl^-1#2 zGrzHv$_i7^bALH;<#cGJs!iqEn1oYAp!osy)Z^i$+Y?R=WGesywN z!gKiu(D9-oBAle}U_sGo0YZiA!MWd|bQ8o^dD!1!Hc7J#dYL*JLUyl~o|>GCk}PKO z>CGfM$NaeD*X2Ae-07k`9xodA`@QF@x@e|bhG5<*j)PktJ$r^2LBU3mxKGhF;?gUu z>uHZCq~2BFBP*n9z8ur4;IIK{|D?$xtRc^FQkzdnEF<|AP1i4H>0qZ!Y=x(JNMzrf z=J9bl6x}2SV9u<8UN;h@{3H8&HoWm`q!E_p=5SodAq6bBZWz0XdDZ(5A5Ki~vu6=~ zWkBz-MZDGdz_d>%iA5!hXwD^k3yE!fg=w~B=O(zRHVv99uRS4+MUMkXf6!hV=AY6t z$U5SXjWMgDajqSAfK??mD~qnpJM-hLq+(__l~4R%_3KBNyVEZ{7OuS^f>7U6b}a`? ztgY`47ZO@;AI=I2Z=k@qylU%q@(H6*Tv7TJ-kOQ)w*gCazit>@6u`#_b7BG!(g@MXo~@!RktJyo+6G03qU^hjr5M}qdUby1JAc(jGkM>4p69vm>%JC$KfeX> zZ1|@vF*LL@t8-z-z1R2M+Ichn})uiEc zX20ZoEn#~~Cz-)BJR_$pTj`DpdJ1aR(myIi;<`C|U0MrQZg)D>Qj(D%@>R;cxSW;` zMGpK`+@-fc9ndP3Lxu(2_}CbRiie`0Fp{f@==K^5j<_f(c#Z({4lej$;@r0O14n|rsH;9;K(SluxdYd*~nz&jQRXdf;pP`pghY|u^0D#?v z(efAH89~Z}2SUm*)$sY<$thKVV{d1-nlAQoqqs2d3`XS1wLx`Opd;3vHX;dyRxpR< z9w^~}08hS1kac7eQoG=*$>f^3?}IDryZ-S7dc;z|nx0TP4HB4}Pyg>ZWRyp1d?FHi z7BQXg?k|9=*R~eMmG=s!TBP#+@r(FHiIO#*PrCBm+qdAvy8OEbhm@Sin*TyOqdiIa z+jhDL+QWvtIQe~AF$p4vqI6`~&!6*XC!D2vv(i?c+h^Xe0&pS!Rj(@=Q9KEZuI=x? z|154kb&!KxlK_!1crBr5VhjxoSj(nZ*+2V6-;VS#9yY9KjGfuAWCZ+-rHU7fB_9+D z?i%%uD?ehMrlF#$3aorN3_ipzNP$z_KWu5rU$JN{<`v>gLN7lNV=WtWB!$}1KH33kkNywN2?`HXJ{>1hYlS$ zM*1TF;3I2FezsfyN44r%Z+|~amE>EIkfgL@FuHDCfOI839bz)h?^4`vc7*!_ zOT^$Pxg#@C&2Yy;$mdJZ#TsDInkcbg8$ zZ|?GHq2*&wCvu%Ux$AM$f#jkuvw!NbXjWQQb`CsX>c7>qf?I6=5~^(P2pX9Og?uvf zsUIibg?@pesLXe6_IQVX_at!2cy{;bB&<*^ip8I~+X>`Qxo?O~d{calS`?$B)qFtB zG5aSVEvStEkm0-39E)?`9S98w<~Y&8kl`GRYhLrZ{LRYiyIXnBeO75QC?1H%5szecRC2UagDH4k%cEgGHOOHMbC^vCuL-I+2H*iu8+IF>E4K~4c8{X^N5u_i9z^yA zx5zF!T@#-|G@0PxMs;lZq@M4eF{&&|y2!@TnkxI};IFNKW^9H|gZMSc@*xOBl8Ik(l`W6IUa>g;go zcY|kP)E}m)&Xi_;<1j!cLURIG5_3Snsh7#rY*oZR&suhvp1v#JtLUJM9fe?*W?ZO8 zCkHc>Gg`9?Rps$*nZ8&?e#1Df73{WY*KmIFVqMi=5A@NIhAl5p`>tFE26p8QSs2HO zQUkp9Kb>MN~Y0f=hX-QNH z3Mh@EAYYvXIdE7&&Oje%1aVFxymVs@**Mwa<2|gXGN_O7Mp4SLpm~WnTnyUlez7+cRc!5@lUfc}%-y}+`q}ueh z#R$*#g3(!OaTs5P@ic&#wMbt?kty1yjp1Zh=;y&9XiEnM-oAbSz7T?(L7}cGe|SN8BOkoP7fjvGifZ|A8&+koN$7m+dlcw3zxEvN848& zpS+hT0URE+{w)HkLCHP?=(%TbaC~aUPtHhTxe0f7UB9(H)3B%{S+(t(LPSBSr>3#pzW~_9ck=H3Zs^5%KB?FAyNra)w_;{y2$3#> zzkt`NQ(2z}VSX&@I7rOU# zL~4EN_u*7X008e*(5FeHR@3r}?6aUxa4e+rZmiT#gjxGX_?phbd;o%h)Uo)FY!gxr zfQ$knAPi?W+jn-FI0s+PQn@7R7Vdy9-BKb@1FmBa;xc4@? zJ~>Fn(cR-_xJoM0}XMK<`Hoo;y z|80E9son|@W@AmlbhP9V=25P{xi~E+#EdRV5pbx1s{s-XwEenkDGmq3}4ZZP2_uTkla;W1WXh`MT%!NDi4hhUlrYKOb~ zW*NSx@J=p#LkHN|;~=)2DC?vvF_;794HZs%1Aj&{P=qVxXndI9H%zB11Ya~XWD#ax zaospD?>y2Aac}jd{cslXEOGn}%7)EDJ1m?xSOV|%^5%7)YQ3jpVx<cABOqf*-&SWmY& z9@5SlF|e}$3)L{u{OD2nFWLL+TtY(b5iR5gduJ7HdX(9h=V0+;(_tmMB=xTZVlFu8CbeOE}N33KjA@0zzJDYWNoZ z*N7FXI3^UxDva1IUSY1nSDhPP?1}atDp|6Vw&!=0rNipyzs;UL_6k%#-qq7i4kfF@ z4w8R^Z1P+r)}y?c8Az=;lr9YK==ROAKfdndLgGCkDl0$GqZh>`rc_ z-)=8Nh>~`2q?1oY;jrG;sVxFKl2op;S{d4~zCj;tu9B$|0;Z=f{TokFn&FnOn{F!- z55A++5`tC%E+CJ`ojCJA>Cs+%o1;0Js?~xy{ zZ!*NSA=dlKqMA>Y1z&)FU}3SmNX*Z3MV!)HqEW5c$0S6KO3Df^ zSCH}+`W&E^W0g-4A8*}8x;K~7aCxpL#MD|=bJ5rWwxlW3Z0n!&Eai<^JMMjoW3{QlQmwk{@+ zQ!7n*@4C@Xk}gWE-#h#kh4=7W?RlH8ep8V{yO)(FTA$1A_#6;R;)cA;3L0SbnPqya zj8iO1Fm&$lVg!|0c2#C^LprpN>RCP1i`R)~k>5TYJv{D~;y-f8(lV)PVJQN#1M7CQ z3B8xz@l{TPBo<8eIN?m-xed9$!P@PJRa`eHTjW(&vI9lURH@7)>66ysalx#iI|1BB zib>xnCf|k6DBLtb3qP=8;(fUfr_SySBRI(d^lrfgT)%5gEBWMQZX`d^3?|l3<9wCLHi#J+Z~lIX@b5Pg@L1OF&VGDwi3mKO;uVS* zJ}=E~ljVRy*M7u-Vk%`Cab6JCqgEoS-iAqnQvCG}2i_=CDlF?TxS7XbGdr!0maX5f zp)zZoEf$-cFwJj6;;-#kW4`;G(1`}yo?qYlX|LFtFq7;+F`Uh6#$p!a^ zyLs1Elq?jVtflWb^0xKU)a6FwK0S)(*2&<3^%YyFC~E3eyN3%jJHuaW%NK5UxYwU= zhl~7bJsxJA6~*4z{wnp(Cz>o@+DNj?$Wj$qEsu_;-Ep5W_!W@#PRPoxIXsVTP`WSJ zxZ3_ztrY1pE3u2aB&4Mx*!%~7U76;Z19|rwZI~j;Vl&5I-FbvlETTH)M~FqA)wJ{c zvK5m>mj|vz(Bbs6;Cyu`FOU4|wNSt$ji#EvS2eB1LSRUFg>}TVcAJsO3gfiD#VWG4g(=)yd-aKP;wq?eU15V0tfnJ-m_fp*o0ne&g{z$nJBsSrRG? z+05LA(|H(5L!`7za@nnfDP8(o7G1`scyaw)z>7~8N@$ZWdCTP)9YQJX_M$rvjP4bj z|A=Fc;~F(et2nRKvZo8))|&Zpt&mujl$Us1pL`{-e#l_lm)CjNMcXmodp%FEB1cbx zHW6Ff_iGObJKi2QUp#cJfI$cx1uk~QIJbZ~_G&2s3RNtO(z!*PQk(re-Yq5myM?*G z{{1tav(f>?Pu$yl+X;6msg0|)V1HIH9XK|WsjxJ+EmPvT_LAL;UzEC1{R! Y=MFcICm*DEk>$xlrR+D#GC1P*e`SQA6#xJL literal 0 HcmV?d00001 diff --git a/dependency-injection/docs/autowired-type-demo-classdiagram.png b/dependency-injection/docs/autowired-type-demo-classdiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..5f3f3415566893568d451f5ba4f7028e9b256a14 GIT binary patch literal 23197 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 \ No newline at end of file diff --git a/dependency-injection/docs/inject-demo-classdiagram.png b/dependency-injection/docs/inject-demo-classdiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..9996fdc733f23d2ced4d5587a2d0cbe4b7d552bc GIT binary patch literal 38729 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 \ No newline at end of file diff --git a/dependency-injection/docs/inject-name-demo-classdiagram.png b/dependency-injection/docs/inject-name-demo-classdiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..96a6a3425e0e6fe8ec6982cbf0470a692163abfa GIT binary patch literal 23358 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
    eZ{>Oqf&*F697h`wmT+%?vO9Ye&oHg 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 OmzYtk$ajt1BL4^N?liCf literal 0 HcmV?d00001 diff --git a/dependency-injection/docs/inject-name-demo-classdiagram.xml b/dependency-injection/docs/inject-name-demo-classdiagram.xml new file mode 100644 index 0000000000..5a8bb9f8c4 --- /dev/null +++ b/dependency-injection/docs/inject-name-demo-classdiagram.xml @@ -0,0 +1 @@ +7VhZbxs3EP41AtqHFDqydvOoy20KJwgiF2meDHp3pGXC5ahcyrLy6zPkDrWnYQVe5yGQIAjit8Njvm8OiYPJPHv4y4ht+g4TUIPxMHkYTBaD8fjP8YQ+HXAogCh6UwAbI5MCGpXASn4DBoeM7mQCec3QIiort3UwRq0htjVMGIP7utkaVX3XrdiEHUtgFQvVRj/JxKbBrYsS/xvkJg07jy7YvzsRf90Y3GnebzCerP2reJyJsBY7mqciwX0FmiyJVoNIK7tv2cMclKM20FbMu3rk6fHcBjSf7YkJ4Rz2EHyHhKjgIRqb4ga1UMsSnXn/wK0wpFFqM0VfR/SVNjWH/xj3g89u8Efkh8nUKeNW3YK+SaUu0CtJJyqmfAFrDxwNYmeRoPIE14hb3qc4szvoo24zlOPOxGxFYx9IwmyArS6PlFMkA2ZARyYTA0pYeV9fXXBMbY52Ja/0hantppm3vhdqx4teSVDJ7PBeZPBWf6EYXkCGLS3yvcyU0I70Cs1r1DYo5MZCyQ2RuYjJezAE3IOxkqJ5yg+sY24Wp1Il1+KAO+d9bilUw2iWopHfaFkR9qDHxrIUFPZVi5WbyYoZyMnmQyDezSyga5E7wNnEqJTY5vLueOCMJJB6htZixkbBUxcNc1RIbhABIXmC5M4x4CLzmOhtOUNVKiZwSQqRvy/ze3LJOqWV3H7Dds+Rn6thRf5XNNSkfbIASoYEdEzHmhI4NXfSGmEOlQfNqCAKvGZlROTW4FcIvGn0EbOuUMlQiBQFa7dCd5zkWxFLvbn2NovXJfKRWXHQPpUWVoS7M+2pCbhcpfXWyqd4KhM6u68VVlhRSO903qLU1lMZzehN5M5dfYjIrzmNScEwprczN3aOmvwTNI+mAcXVHlxsnRYSXtF2SHAQhIL+VBAEu+cEwetWELSEVbKZ6oWwoQf55P9hVTPSwtdtlvHG19FXfvma1JO21A5qSqjEHagPmEsr0a1vCtuGtD9BvYgZfEo9TvzniBd1iEcuNHP49t2/q5vb2fL27ft/lvOb5eJ2jsZQdVec3itriN1zRr9YTFycWNb7yGheohIUn8FONdoUzCl1/Nzde+zuUWjUob+P2rX9+LO71uC5Oz8nEvzvyFaD94XynPc95b2X80c6eafafeQ995NzJ+9NvY5O3qleD52c/6i3OrnFIkd/+/2csT9F845O/WIZO+LTVVT/CP/vJHWzExT2Pe9RHh1V7rLC9cVGyz5Fas5hp2sPXXDU7IIRp0yF5UB8jeQe/uWO2rcc4RbmF2E3umywe9FRt16K3fYlwi/G7njYYHfY0dP7YZeG5R2rf1a5x54svwM= \ No newline at end of file diff --git a/dependency-injection/docs/inject-qualifier-demo-classdiagram.png b/dependency-injection/docs/inject-qualifier-demo-classdiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1ffe6453cbec44b8961f222bd034c65e5c06ba35 GIT binary patch literal 37170 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 Q(7=BRGOE(ArA&kVFOC`r#{d8T literal 0 HcmV?d00001 diff --git a/dependency-injection/docs/inject-qualifier-demo-classdiagram.xml b/dependency-injection/docs/inject-qualifier-demo-classdiagram.xml new file mode 100644 index 0000000000..ec122afe71 --- /dev/null +++ b/dependency-injection/docs/inject-qualifier-demo-classdiagram.xml @@ -0,0 +1 @@ +7Vptb+I4EP41le4+bEUIUPZjeenenrqn3tLT3X6qTGIS7zox5zil7K/fcTLTvHbhFOAkBEKAx87EM88zL7G4cqfRywfN1uEn5XN51e/5L1fu7KrfH/dd+LSCbS4Y9VAQaOHnIqcQLMR3jsIeSlPh86Sy0CgljVhXhZ6KY+6ZioxprTbVZSslq3dds4DuWAgWHpNN6d/CNyGZNSrkv3ERhHRnZ/Q+n1ky71ugVRrj/a767ip75dMRI11oaBIyX21KIncObtVKgWb7K3qZcmldS27Lr7t7Y/Z135rHuLcdF9A+zJZs5z64AodKm1AFKmZyXkgnmX3caujBKDSRhJ8O/ISb6u0/KM8GX+zgepgN/VuLjNW65vFjKOJceidgR/klX7kxW2QDS40CUbGDe6XWeJ+mlWh4olLtoR0wznjDdMBx1U0ushaWLkPPfOAq4rBlWKC5ZEY8V8nAkFPB67rCr/ADXdvuZtzLM5MpKr0TXPp/pkyKleD6Y/wVaDzjkWrAkWxEJFls/V7y9ErFhkCyY9ATgD9nHniEaxA8c20EEPoWJ4x13sQLhfTv2Val1iOJAbbSaBIqLb6DWkb3gGltEA1gfnnFwl6JoGmewJoHAsNemYvuWWIFdo2npGTrRCxfNxwBLCKeKGNUhIvIUkuIqZIKzAAHUPz8BHVrK8fU8waiNIt0x7REw00R4+4NysJKfKOwCwcwA5Y48M5mSL5iqQToISZ8Hnuws1sQ3+qlMJrpbWmiP5IWJ188w8/A/gQFIxZZYONlkn2xiPs1XdUVP1EMBpR0N4gILs5oUpAwMVp94wRVrDKSrkrooYjIKfnKaminZrJmnoiD+2zNbFBIPiMOVrQJheELkNs9baD02AwB+lYySyyh8MGiLEMZZljONkuttRKxybAbTuANaE5tVhqCXVMYA2loDG+7XJupisE+BtfBZRyovOGWzi0spODezUKkHZWRXbQbDLqzDlWUWNcAVop6dsmBpcqX5Zv/jGoEWGTVAmF8zLL3u0x9BWq3CbUV1SGUbMnlg0qEEcrq1/naGrQnQI+Q2oXeuDt4DhLlDKvzsFmdHYTi9OUZN1MJEjCjB6VZltLp06e/Fo9Pk/nTxz9+n08f57OnRep5PElWqZTbX37NU/ezArWX5Lln+HUt4WPs6XZFo4vltwtNMBpLNGmtppcG7ngN3IgenKiDQ1hL8DujFvjfH6CBQ6bVGrisLuWRvzAaQu4S+/vGPsVTl8apFW1a1wVtLN+Xxulg6A3Rg7vQO0DjhKcxjYJuVB6jVKsvEXtkzAnfU0Ssg23cobvl6xuoMqWO2bnuuWMSPHAtYKe2ZGNf/dpIL6WyNfaYXbRDh6OlNhq5f/oumjZT7o9iZUKuL23Siduk4bjaJrmDZhz2e20nXSTsRITmceelU+r2lLQ/A95ulVoBP0jibR5tXnqljvi1NEut+B3ilKntjPDSLf0fUdvSLh0vapvPs5/5v6mAorYHxFnpe9OR1le2ubHlsVa598Eaw9gCe4BiOKgXw2Zotbakh6iEzafIM/XxsObj8Qmd3Hzao1b5TLzr0vEVpYnmoSc58tDOJR3n69xhzbkt6eFozm0+MZ0bc2u516FgPYV3m48h50ZdSqlE3eHRvAvD4l9J2Vzpn1/u/Ac= \ No newline at end of file diff --git a/dependency-injection/docs/resource-demo-classdiagram.png b/dependency-injection/docs/resource-demo-classdiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..1f0a41a19e921af046deb26274c06872d89339a6 GIT binary patch literal 46095 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 literal 0 HcmV?d00001 diff --git a/dependency-injection/docs/resource-field-demo-classdiagram.png b/dependency-injection/docs/resource-field-demo-classdiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0d6207d09a6e6623281e605d26431d1a869f6e28 GIT binary patch literal 17692 zcmeIabySpH_%@1&I)F5YbPS;=Ac%A`q#!voBHba~NDmDHQc?p742^Uu(xG$;C?Sn> z$Jyi0_gm|H=ll1p^Urb3V$HnI^XzBGz3=%eUvsXDC6Ph_S7dbKejqigSHg^boPjd?NT61fZ z{2zpiP=}w2)$+*FY|jr6;Dr~v)!Ftaj0Wq{G7z19-X*~BpS&j4ydPR~w@*>_BvNw! zPTD!^ozX$O<>|TDg@A@vL{H5B>*9~FNil2_cDi`qrI~K^}VYZCH>l_tWec}k! z;q0H+Q#ZXa!u;9I0vyFIDaTz!NYxu?RjzH?vvMw;ku3*0RZ<;F8TKfVJ}AjQkj4_V zbUc!hNUEQ{yOY?|R?TKi)!vL<$<=0+zVmc`x+L^1UYzqoW$7m~5sp=6J@4GB!<6UY zh1IiEYffx*Ld}2JTJCR-it=JcyM8Utnvi8kNEw~Sa9+| zR;;yEJrG(!=ARZ@;B2sLru$A}PuG+;WkHUA`-??OgZF^#8T-<$6{0)8QXXaa2pN4H z`p9zw8KiCQ+xui}JO@`aG=6(M>hN|}|JB&@8+fqCY|o>UylI_|=2}F!#AUWKeJ{^& z5@M|i4?4QK6|;bYU9UIPFG0#71He3hV9sji&Itqy!XYa66W{# zS0~2_xW~@);ho~-mn0pwZdOmIYbGLT&B(e#KVpXdK)Hs!7_FaLlC9OR5$b+`NrH8P zs=>d}@HAc!%fr?!{~=tj;7hT=L>>IwCEj+D_nnF*?PsNL<)W~TNBvW@<1=WFoL5sF zt7)6on|w_^%csWi?br%p#2PQ0BVLEjwmX>F{hWMk;sV2_WQJI%hgefohVwOuz)lc}WNT~7&a?Ba_$U7$T|C?f9@ zYE&>?)ugWIx;pbP9APdvW11edT|)l3+3WELUc0yIm|S9~db*X~cOR2D`H1q_J$&Sf zkwC=P0+dqVyLNomg_}kF)1CW4toNy$*Hu_u?f&>Ey}h<^cOG`;(&ka^*2@k1#Wuxolp~_LlZh-gY;Yk+1aW$5Wtxee8t>xwsc+dd%k@ z4ez>qLE(~;B%b;yCRS)g;%+wG-Q8-(-uWpEL;bHha5$FXCCB{XqX}G}z$V0TpGk#U^PlclCL{mMQIX+eRDx!#RU^ zb%~k`F3t`zxJcE0ZRz+!1fvYYVk+c1eXw<}^_t`CjDVAi{SgKRJ%&6?Lc`
    qwa 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 literal 0 HcmV?d00001 diff --git a/dependency-injection/docs/resource-field-demo-classdiagram.xml b/dependency-injection/docs/resource-field-demo-classdiagram.xml new file mode 100644 index 0000000000..44c742f2bc --- /dev/null +++ b/dependency-injection/docs/resource-field-demo-classdiagram.xml @@ -0,0 +1 @@ +7Vhtb+I4EP41SHcftgICtP1YoN1bqXtalZ7u7lPlJiZx1/HkHANlf/3OOGOSEPpyonfaOxUhFD8ejz3zzItDL5rljx+tKLLPkEjdG/aTx1407w2HZ8MIfwnYVsB4fF4BqVVJBQ1qYKG+SQb7jK5UIsuWoAPQThVtMAZjZOxamLAWNm2xJej2roVIw441sIiF7qK/q8RlwaxJjf8iVZqFnQcTtu9exF9TCyvD+/WG0dJ/qulcBF1saJmJBDYNKLpEt1oA1ExP+eNManJtcFu17uqJ2d25rTR8tucX4BQtWAu9YtN7w4nGpdMCH1J6uFJSJzeyhJWN5SfzgP5WYOYyhyCK6nfSbJbbBleWG5VrYXA0zVyuERzg4xKMW7AQjYVWqcHnGM8tLQJraZ1CQi54wkGBaJwpnVyLLazIutKht8NomoFV31CtCHvgtHUcW6PzlsSCViLcR9TKEmW+BJfRygq6FiUBJBOD1qIo1f3uwLmwqTJTcA5yFgqWXimtZ6ABzUAHBP6Da5rcMF1kq+TU8RBz9VFCLp3dokiY5bDhtBpxmm3qGI1GLJI14/OUBQXnRbrTXMcGPnB4HA4VVtEIlQ+U4XIpVtqhzQheIPAg1uJEwYlH9oMBzfRU1YFQOgtfZXCXAR8oy4YHGQoBouWSNBwOj7IQsTLptZeZj2rkhn1B0CZTTi4QpzNtsHwhBqhvqX0iZipJJKqcWnDCiYpxorcAZZz333iKX3TzrH8y7o3RrhmOkbgwxi+JWzcDg/YJXIfLJIbTRlJIHYiEkIcvR0KgngvOS9RHXLKOYX50oEjsEavVfoZXxIbq6XP+b7OaIxe0Q6Dxllief/DqW1RHXaoJ2qdQi3upv0CpqIIhZivZPWr/BfbOxq9j7+x48ninFnloQr/QaFko6xfGkKvQK3eff1vc3l19+nV+N69T+6efq+ReA6p9T+p/KizOX1nPx4wdExennbh4tnL/GG0cL2A/SBvvkHqgsz/Zxk/77T4+CNfBBvGDyaF6wCF1DPHcON6reTNtX6DTJ8uTaRteC15ib8SN9KhbGJ+uwZZM8N2Fh2hoBikYoS9rFD2HLySSNJDfGrSigXb7B+N+8CcNsOLRMLmgVynSWkhzmykqoIhSYvCSB+nclnNTrBxQ1d2d4Bo8wbRPdWY66PMZg3b5ftS6cWL+p/J5IqzU2L3Wbe1Hubn7YnQj/1opLCmv6H++8DzZZSgiyVlUnPbq5msaIacNdb03KEXjvVeKwaQbzIdiOVSso5zcfaXoRvd/2rtR6NTh3te9tQdHvrlzu7f2/5lzJ6fszRC6I1bx9t7FYf2fjJ9r/O8VXX4H \ No newline at end of file diff --git a/dependency-injection/docs/resource-method-byname-demo-classdiagram.png b/dependency-injection/docs/resource-method-byname-demo-classdiagram.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cd0c0fcb8a0d1d3275da9875be05663b4db51a GIT binary patch literal 29579 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�{vW65F0TH+<3m9n|HDlsaDg-wA85FD=#cIrU65>iWRL@;ivPjmI{Z-} z!iiJ(dkISN5~BShT>V~3;Nab1fUx(y4B(r6B2I(@`8zYAb%VTk9=!`O4PS_9NRpzKys0b29sme_3hbi=ppXtn{aiBuT{q-#y`|??6$=S32pG!WoijXn|A>l7P1Csf=#VrUy)3kBg25BA_ z1u@SxhktooS^{@p7Uac*j9E=i$Oyj2xI@>3u?TY|F^nkD@J0?_L$i6_u6DeM4DTL-2x{nh)Pj$8Az@k&?3 zc#bSS{xWcBZG$f2mjh2~&QN~a;gHi?s=WZ>!jR8~gyi3!WVoXD^2=Wpx~qpu`qCmE z6bOdYM9zPKRw;AHhzO$HfZ)Y%YA$0T`%U<=yC>u*1#rC^EZ%C%e7%h!ieYf2cjTyWAmsh$B!_|8IL43J!(0 zhPlYbAsB7dgC|596Qw#kUiZ+gRZpvV?AA2a2U1d^Q|-q!6=0y+TMpWHUIN$TjN`m} zN-?uW`BycOI2OIsqZ2<=>}?>lSMSa>@u7+fCvli9)$%L_P;Ubrv(6)y|RYj>cNG-6QYOa_e zaNeeYZ*T*-!tMO<6!hXWZaCx)`&t4}>ZsOpd$lg~SJX|s(Ez<;eV~-Wk?MJKt{~$J z^g6zg{bI=z7!hg|0VL3G0reX6pZ8qHGcu0cv}fP}q+sfnT&?yEJk)rP)k)Q$D(rBq zmmc<}_z;F4XKDbw+93F;1MXMGJt>&UpZr%0?4|%7kcD{HFDHtTxT^m>nmPNy^5U!I{B-eFN%ye1S%d|7(ANhe(u$UXBntWeA)SOaqMqHl5rT;xX|YaNqlJ&^9vQ z6vi%Khw_f?g^+bImYx|*>GM=f7$a_(+y^$fKFhA;(*Vu2zw}kGXzly(^BZt7Vpn@# zg#yRLlwY$m3#EW#if#JQ+ty6>VllZR?=c9=kd)VwfYl_Yy?H*hn<_q;$kzekSB*IKF;F5T5xGfg8p|L;I4y;%-4T_vkhnC=UL4HPhC4S8~`m_2aXw< z0Vg2Cbwjzufib`1)5P41z#2~XvDA8yvLzE3_;t_Dv%MYasJwcqCXaLMQD8xPb!FfT zUnp$%wybS)RVQ%6>MCR4Y&mG=n`IMd&Azv={G>#0C+A5Vt>6s+z*txb9KZ23 zE&M7DTCe{Tya)m)8VTC=u(Xr^ZpKn8=%4gogmmd)DnD;Tmn6ynH+e@TJQv?5HMF9Y7Vdy0^F}L>&FD1Xd$UdE*d;wmjJV^DKK1Db*|p80IDq6 zp`s^(fKjaDTjSBD%gO7hB+>>mdlu09SC3qs4_y}k36wAMfK^$Pk2=^IPgH>2ine(9W39~xLQc6%S3|%<_ue)GhWSHef&RgqwK33 zSU~B362+w>?I|}VU6`Qaln9DUP<*Ze=73<|n7^z*y3`IPI!(xd>59t&1I`@a%zWAH nbN^QX8+A}gkS;FHKlWbYbAsL~JG=rO&BoyA>gTe~DWM4f06-Nq literal 0 HcmV?d00001 diff --git a/dependency-injection/docs/resource-method-demo-classdiagram.xml b/dependency-injection/docs/resource-method-demo-classdiagram.xml new file mode 100644 index 0000000000..94b39279fc --- /dev/null +++ b/dependency-injection/docs/resource-method-demo-classdiagram.xml @@ -0,0 +1 @@ +3Vhbb+I6EP41SN0HECGQbh8boNuutkerltXZ84QMcRL3OHFqHAr99R0749y4qCpdqV0eQvx5PJ755mJDxx0nm2+SZPGtCCjvDPrBpuNOOoPB14ELTw1sC2A0uiiASLKggJwKuGfPFME+ojkL6KohqITgimVNcCnSlC5VAyNSiqemWCh4c9eMRHbHCrhfEr6L/ssCFVu3vAq/piyK7c6Oh/4tyPL/SIo8xf06Azc0n2I6IVYXOrqKSSCeapA7BVqlEKBZvyWbMeWaWktbse7qwGxpt6Qp2nZ8ATq0UlvrOg2ACRwKqWIRiZTwaYX6xj2qFfRhFKuEw6sDr7Cn3P5G3Az+04PeyAyDSx0YrTWj6SxmaYFeMTCoWPJAldpiMpBcCYAqC34IkeE+hc3a0INeI7QSuVyiFKakIjKiKDUqGYdEpiKhYDKISMqJYuumdoIpFZVyFa3wgsweCAtGe014jlrv6GPOJOR4m39FN2BdnVaQYs9kYQQ0TZlgqTLWjPzOaAII4SwCOidL8J9KANZUKgbpfIkTCQsCEztOFpT7ZZKOBRcgD/vaNLXsag0Uy7lZbGhJlcN13k0+7TKKivo9DAK2he6wGL6acNT8UzNQqe2CeE2r01IgwnAFEW/HqzTvVSFEw2sR7Aw8riOVNeLnPea6dv0E0kyn+CXM9rMNPA210AE03lU6mfXcsDanQ9/FWOo5DGepE94i/DY7LyxwS6FKgjtapPtN+gBhYiKd0ERYWfCvFC/Xa90NBKTAnSYWg1QfMrDpH3B8yKw3EcJpCFIlI23dXX2Y0JDkXEHDAM1a8oGsSY+JnkHe2QMLaIwkECw/Xaz0l5VZZSTd6yhnKe3GeDpoM52ezpXWVjVn5re/7mdzfzq/+ef7dDybTuZjISWEkEPOl14V+zXtPNGGsy/F5FpAlh/faR+tO8CJ5hwh+6j/BQYlPqk4PavnxlvdbHXmdlM1NVz23iKBfQFSITfnXGhONj8UqcJDzYEOZsZXJGEQXXdyTfmaaq3Nln+wB++ccQd7rWPbM3ZFF4dP1X3G7SNmQ2PWnSN4yoFnDtaP2i0PtI2d9vhhm+En7N+vNflTl5xna8xeRIa7Ned4e2ru4h1K7nyn5Owd+MS7JVzEMXv0ghb3+wMErXXJ0mhmbuxwyXsXdodavsbuBTaZGrm25dW5tdgp3OKPu7+XW8/emW3men+MXBhWP2+Li3j1F4I7fQE= \ No newline at end of file diff --git a/dependency-injection/pom.xml b/dependency-injection/pom.xml new file mode 100644 index 0000000000..46f57e512e --- /dev/null +++ b/dependency-injection/pom.xml @@ -0,0 +1,81 @@ + + + 4.0.0 + + com.baeldung + dependency-injection + 0.0.1-SNAPSHOT + war + + @Resource vs @Inject vs @Autowired + Accompanying the demonstration of the use of the annotations related to injection mechanisms, namely @Resource, @Inject, and @Autowired + + + + junit + junit + 4.11 + test + + + org.mockito + mockito-all + 1.10.19 + + + org.springframework + spring-test + 4.2.6.RELEASE + + + org.springframework + spring-core + 4.2.6.RELEASE + + + org.springframework + spring-beans + 4.2.6.RELEASE + + + org.springframework + spring-context + 4.2.6.RELEASE + + + javax.inject + javax.inject + 1 + + + + + + + maven-compiler-plugin + + 1.6 + 1.6 + + + + org.apache.maven.plugins + maven-surefire-plugin + + + **/*Demo.java + + + + + + + + + java.net + https://maven.java.net/content/repositories/releases/ + + + diff --git a/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredDemo.java b/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredDemo.java new file mode 100644 index 0000000000..c71365097f --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredDemo.java @@ -0,0 +1,27 @@ +package com.baeldung.autowired; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.dependency.ArbitraryDependency; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Autowired-Type.xml"}) +public class FieldAutowiredDemo { + + @Autowired + private ArbitraryDependency fieldDependency; + + @Test + public void fieldDependency_MUST_BE_AUTOWIRED_Correctly() { + assertNotNull(fieldDependency); + assertEquals("Arbitrary Dependency", fieldDependency.toString()); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameDemo.java b/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameDemo.java new file mode 100644 index 0000000000..c11ed5286a --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/autowired/FieldAutowiredNameDemo.java @@ -0,0 +1,27 @@ +package com.baeldung.autowired; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.dependency.ArbitraryDependency; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Autowired-Name.xml"}) +public class FieldAutowiredNameDemo { + + @Autowired + private ArbitraryDependency autowiredFieldDependency; + + @Test + public void autowiredFieldDependency_MUST_BE_AUTOWIRED_Correctly() { + assertNotNull(autowiredFieldDependency); + assertEquals("Arbitrary Dependency", autowiredFieldDependency.toString()); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredDemo.java b/dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredDemo.java new file mode 100644 index 0000000000..5afce6ab6a --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/autowired/FieldQualifierAutowiredDemo.java @@ -0,0 +1,39 @@ +package com.baeldung.autowired; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.dependency.ArbitraryDependency; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Autowired-Qualifier.xml"}) +public class FieldQualifierAutowiredDemo { + + @Autowired + @Qualifier("autowiredFieldDependency") + private ArbitraryDependency fieldDependency1; + + @Autowired + @Qualifier("anotherAutowiredFieldDependency") + private ArbitraryDependency fieldDependency2; + + @Test + public void fieldDependency1_MUST_BE_AUTOWIRED_Correctly() { + assertNotNull(fieldDependency1); + assertEquals("Arbitrary Dependency", fieldDependency1.toString()); + } + + @Test + public void fieldDependency2_MUST_BE_AUTOWIRED_Correctly() { + assertNotNull(fieldDependency2); + assertEquals("Another Arbitrary Dependency", fieldDependency2.toString()); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/dependency/AnotherArbitraryDependency.java b/dependency-injection/src/test/java/com/baeldung/dependency/AnotherArbitraryDependency.java new file mode 100644 index 0000000000..27ba03f6e8 --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/dependency/AnotherArbitraryDependency.java @@ -0,0 +1,10 @@ +package com.baeldung.dependency; + +public class AnotherArbitraryDependency extends ArbitraryDependency { + + private final String label = "Another Arbitrary Dependency"; + + public String toString() { + return label; + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/dependency/ArbitraryDependency.java b/dependency-injection/src/test/java/com/baeldung/dependency/ArbitraryDependency.java new file mode 100644 index 0000000000..bab289777c --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/dependency/ArbitraryDependency.java @@ -0,0 +1,10 @@ +package com.baeldung.dependency; + +public class ArbitraryDependency { + + private final String label = "Arbitrary Dependency"; + + public String toString() { + return label; + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java b/dependency-injection/src/test/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java new file mode 100644 index 0000000000..1f59500ec5 --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/dependency/YetAnotherArbitraryDependency.java @@ -0,0 +1,10 @@ +package com.baeldung.dependency; + +public class YetAnotherArbitraryDependency extends ArbitraryDependency { + + private final String label = "Yet Another Arbitrary Dependency"; + + public String toString() { + return label; + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectDemo.java b/dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectDemo.java new file mode 100644 index 0000000000..a670ee8313 --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/inject/FieldByNameInjectDemo.java @@ -0,0 +1,30 @@ +package com.baeldung.inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Inject; +import javax.inject.Named; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.dependency.ArbitraryDependency; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Inject-Name.xml"}) +public class FieldByNameInjectDemo { + + @Inject + @Named("yetAnotherFieldInjectDependency") + private ArbitraryDependency yetAnotherFieldInjectDependency; + + @Test + public void yetAnotherFieldInjectDependency_MUST_BE_INJECTED_Correctly() { + assertNotNull(yetAnotherFieldInjectDependency); + assertEquals("Yet Another Arbitrary Dependency", yetAnotherFieldInjectDependency.toString()); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/inject/FieldInjectDemo.java b/dependency-injection/src/test/java/com/baeldung/inject/FieldInjectDemo.java new file mode 100644 index 0000000000..df40e516ba --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/inject/FieldInjectDemo.java @@ -0,0 +1,27 @@ +package com.baeldung.inject; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.dependency.ArbitraryDependency; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Inject-Type.xml"}) +public class FieldInjectDemo { + + @Inject + private ArbitraryDependency inject1Dependency; + + @Test + public void fieldDependency_MUST_BE_INJECTED_Successfully() { + assertNotNull(inject1Dependency); + assertEquals("Arbitrary Dependency", inject1Dependency.toString()); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectDemo.java b/dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectDemo.java new file mode 100644 index 0000000000..3cc9b643c7 --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/inject/FieldQualifierInjectDemo.java @@ -0,0 +1,40 @@ +package com.baeldung.inject; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import com.baeldung.dependency.ArbitraryDependency; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Inject-Qualifier.xml"}) +public class FieldQualifierInjectDemo { + + @Inject + @Qualifier("defaultFile") + private ArbitraryDependency defaultDependency; + + @Inject + @Qualifier("namedFile") + private ArbitraryDependency namedDependency; + + @Test + public void defaultDependency_MUST_BE_INJECTED_Successfully() { + assertNotNull(defaultDependency); + assertEquals("Arbitrary Dependency", defaultDependency.toString()); + } + + @Test + public void namedDependency_MUST_BE_INJECTED_Correctly() { + assertNotNull(defaultDependency); + assertEquals("Another Arbitrary Dependency", namedDependency.toString()); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionDemo.java b/dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionDemo.java new file mode 100644 index 0000000000..fbb378d672 --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionDemo.java @@ -0,0 +1,25 @@ +package com.baeldung.resource; +import static org.junit.Assert.assertNotNull; + +import java.io.File; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Resource-NameType.xml"}) +public class FieldResourceInjectionDemo { + + @Resource(name="namedFile") + private File defaultFile; + + @Test + public void plainResourceAnnotation_MUST_FIND_DefaultFile() { + assertNotNull(defaultFile); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceDemo.java b/dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceDemo.java new file mode 100644 index 0000000000..fcca34dc2f --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/resource/MethodByQualifierResourceDemo.java @@ -0,0 +1,43 @@ +package com.baeldung.resource; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.File; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Resource-Qualifier.xml"}) +public class MethodByQualifierResourceDemo { + + private File arbDependency; + private File anotherArbDependency; + + @Test + public void dependencies_MUST_BE_INJECTED_Correctly() { + assertNotNull(arbDependency); + assertEquals("namedFile.txt", arbDependency.getName()); + assertNotNull(anotherArbDependency); + assertEquals("defaultFile.txt", anotherArbDependency.getName()); + } + + @Resource + @Qualifier("namedFile") + public void setArbDependency(File arbDependency) { + this.arbDependency = arbDependency; + } + + @Resource + @Qualifier("defaultFile") + public void setAnotherArbDependency(File anotherArbDependency) { + this.anotherArbDependency = anotherArbDependency; + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceDemo.java b/dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceDemo.java new file mode 100644 index 0000000000..af6a805bd9 --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/resource/MethodByTypeResourceDemo.java @@ -0,0 +1,30 @@ +package com.baeldung.resource; + +import static org.junit.Assert.assertNotNull; + +import java.io.File; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Resource-NameType.xml"}) +public class MethodByTypeResourceDemo { + + private File defaultFile; + + @Resource + protected void setDefaultFile(File defaultFile) { + this.defaultFile = defaultFile; + } + + @Test + public void defaultFile_MUST_BE_INJECTED_Correctly() { + assertNotNull(defaultFile); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionDemo.java b/dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionDemo.java new file mode 100644 index 0000000000..d746fd4d85 --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/resource/MethodResourceInjectionDemo.java @@ -0,0 +1,29 @@ +package com.baeldung.resource; +import static org.junit.Assert.assertNotNull; + +import java.io.File; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Resource-NameType.xml"}) +public class MethodResourceInjectionDemo { + + private File defaultFile; + + @Resource(name="namedFile") + protected void setDefaultFile(File defaultFile) { + this.defaultFile = defaultFile; + } + + @Test + public void defaultFile_MUST_BE_INJECTED_Correctly() { + assertNotNull(defaultFile); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/resource/NamedResourceTest.java b/dependency-injection/src/test/java/com/baeldung/resource/NamedResourceTest.java new file mode 100644 index 0000000000..8b218dfe98 --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/resource/NamedResourceTest.java @@ -0,0 +1,27 @@ +package com.baeldung.resource; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Resource-NameType.xml"}) +public class NamedResourceTest { + + @Resource(name="namedFile") + private File testFile; + + @Test + public void namedResource_MUST_FIND_SPECIFIED_File() { + assertNotNull(testFile); + assertTrue(testFile.getName().equals("namedFile.txt")); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionDemo.java b/dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionDemo.java new file mode 100644 index 0000000000..0aaa2085d5 --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionDemo.java @@ -0,0 +1,35 @@ +package com.baeldung.resource; +import static org.junit.Assert.assertNotNull; + +import java.io.File; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Resource-Qualifier.xml"}) +public class QualifierResourceInjectionDemo { + + @Resource + private File defaultFile; + + @Resource + @Qualifier("namedFile") + private File namedFile; + + @Test + public void defaultFile_MUST_BE_Valid() { + assertNotNull(defaultFile); + } + + @Test + public void namedFile_MUST_BE_Valid() { + assertNotNull(namedFile); + } +} diff --git a/dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionDemo.java b/dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionDemo.java new file mode 100644 index 0000000000..25dd5bb9ff --- /dev/null +++ b/dependency-injection/src/test/java/com/baeldung/resource/SetterResourceInjectionDemo.java @@ -0,0 +1,29 @@ +package com.baeldung.resource; +import static org.junit.Assert.assertNotNull; + +import java.io.File; + +import javax.annotation.Resource; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(locations={ + "/applicationContextTest-@Resource-NameType.xml"}) +public class SetterResourceInjectionDemo { + + private File defaultFile; + + @Resource + protected void setDefaultFile(File defaultFile) { + this.defaultFile = defaultFile; + } + + @Test + public void setter_MUST_INJECT_Resource() { + assertNotNull(defaultFile); + } +} diff --git a/dependency-injection/src/test/resources/applicationContextTest-@Autowired-Name.xml b/dependency-injection/src/test/resources/applicationContextTest-@Autowired-Name.xml new file mode 100644 index 0000000000..d7fe3abcb3 --- /dev/null +++ b/dependency-injection/src/test/resources/applicationContextTest-@Autowired-Name.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/dependency-injection/src/test/resources/applicationContextTest-@Autowired-Qualifier.xml b/dependency-injection/src/test/resources/applicationContextTest-@Autowired-Qualifier.xml new file mode 100644 index 0000000000..d7fe3abcb3 --- /dev/null +++ b/dependency-injection/src/test/resources/applicationContextTest-@Autowired-Qualifier.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/dependency-injection/src/test/resources/applicationContextTest-@Autowired-Type.xml b/dependency-injection/src/test/resources/applicationContextTest-@Autowired-Type.xml new file mode 100644 index 0000000000..c65b85ccf4 --- /dev/null +++ b/dependency-injection/src/test/resources/applicationContextTest-@Autowired-Type.xml @@ -0,0 +1,10 @@ + + + + diff --git a/dependency-injection/src/test/resources/applicationContextTest-@Inject-Name.xml b/dependency-injection/src/test/resources/applicationContextTest-@Inject-Name.xml new file mode 100644 index 0000000000..610e8687a7 --- /dev/null +++ b/dependency-injection/src/test/resources/applicationContextTest-@Inject-Name.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/dependency-injection/src/test/resources/applicationContextTest-@Inject-Qualifier.xml b/dependency-injection/src/test/resources/applicationContextTest-@Inject-Qualifier.xml new file mode 100644 index 0000000000..627ec37914 --- /dev/null +++ b/dependency-injection/src/test/resources/applicationContextTest-@Inject-Qualifier.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/dependency-injection/src/test/resources/applicationContextTest-@Inject-Type.xml b/dependency-injection/src/test/resources/applicationContextTest-@Inject-Type.xml new file mode 100644 index 0000000000..405164e603 --- /dev/null +++ b/dependency-injection/src/test/resources/applicationContextTest-@Inject-Type.xml @@ -0,0 +1,10 @@ + + + + diff --git a/dependency-injection/src/test/resources/applicationContextTest-@Resource-NameType.xml b/dependency-injection/src/test/resources/applicationContextTest-@Resource-NameType.xml new file mode 100644 index 0000000000..82cbe97157 --- /dev/null +++ b/dependency-injection/src/test/resources/applicationContextTest-@Resource-NameType.xml @@ -0,0 +1,12 @@ + + + + + + diff --git a/dependency-injection/src/test/resources/applicationContextTest-@Resource-Qualifier.xml b/dependency-injection/src/test/resources/applicationContextTest-@Resource-Qualifier.xml new file mode 100644 index 0000000000..1680a6f66a --- /dev/null +++ b/dependency-injection/src/test/resources/applicationContextTest-@Resource-Qualifier.xml @@ -0,0 +1,16 @@ + + + + + + + + + + From 8d6526c62ed8e9386c1354929100b7466430f231 Mon Sep 17 00:00:00 2001 From: Alex Theedom Date: Thu, 9 Jun 2016 22:25:41 +0100 Subject: [PATCH 069/283] Some minor changes to code logic and style --- core-java/pom.xml | 4 +- .../main/java/com/baeldung/enums/Pizza.java | 71 +++++++++---------- .../PizzaDeliverySystemConfiguration.java | 7 +- .../org/baeldung/java/enums/PizzaTest.java | 36 +++++----- 4 files changed, 56 insertions(+), 62 deletions(-) diff --git a/core-java/pom.xml b/core-java/pom.xml index 39cb79a86a..cb194a6d9f 100644 --- a/core-java/pom.xml +++ b/core-java/pom.xml @@ -126,8 +126,8 @@ maven-compiler-plugin ${maven-compiler-plugin.version} - 1.7 - 1.7 + 1.8 + 1.8 diff --git a/core-java/src/main/java/com/baeldung/enums/Pizza.java b/core-java/src/main/java/com/baeldung/enums/Pizza.java index b1c90b42cf..7742781081 100644 --- a/core-java/src/main/java/com/baeldung/enums/Pizza.java +++ b/core-java/src/main/java/com/baeldung/enums/Pizza.java @@ -3,37 +3,36 @@ 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.CollectionUtils; import org.apache.commons.collections15.Predicate; import java.io.IOException; -import java.util.ArrayList; import java.util.EnumMap; import java.util.EnumSet; import java.util.List; +import java.util.stream.Collectors; public class Pizza { - private static EnumSet undeliveredPizzaStatuses = - EnumSet.of(PizzaStatusEnum.ORDERED, PizzaStatusEnum.READY); + private static EnumSet undeliveredPizzaStatuses = + EnumSet.of(PizzaStatus.ORDERED, PizzaStatus.READY); - private PizzaStatusEnum status; + private PizzaStatus status; @JsonFormat(shape = JsonFormat.Shape.OBJECT) - public enum PizzaStatusEnum { - ORDERED (5){ + public enum PizzaStatus { + ORDERED(5) { @Override public boolean isOrdered() { return true; } }, - READY (2){ + READY(2) { @Override public boolean isReady() { return true; } }, - DELIVERED (0){ + DELIVERED(0) { @Override public boolean isDelivered() { return true; @@ -42,26 +41,33 @@ public class Pizza { private int timeToDelivery; - public boolean isOrdered() {return false;} + public boolean isOrdered() { + return false; + } - public boolean isReady() {return false;} + public boolean isReady() { + return false; + } + + public boolean isDelivered() { + return false; + } - public boolean isDelivered(){return false;} @JsonProperty("timeToDelivery") public int getTimeToDelivery() { return timeToDelivery; } - private PizzaStatusEnum (int timeToDelivery) { + PizzaStatus(int timeToDelivery) { this.timeToDelivery = timeToDelivery; } } - public PizzaStatusEnum getStatus() { + public PizzaStatus getStatus() { return status; } - public void setStatus(PizzaStatusEnum status) { + public void setStatus(PizzaStatus status) { this.status = status; } @@ -73,32 +79,23 @@ public class Pizza { System.out.println("Time to delivery is " + this.getStatus().getTimeToDelivery() + " days"); } - public static List getAllUndeliveredPizza(List input) { - List undelivered = input; - CollectionUtils.filter(undelivered, thatAreNotDelivered()); - return undelivered; + public static List getAllUndeliveredPizzas(List input) { + return input.stream().filter( + (s) -> undeliveredPizzaStatuses.contains(s.getStatus())) + .collect(Collectors.toList()); } - public static EnumMap> groupPizzaByStatus(List pizzaList) { - EnumMap> pzByStatus = new EnumMap>(PizzaStatusEnum.class); - for (Pizza pz : pizzaList) { - PizzaStatusEnum status = pz.getStatus(); - - if (pzByStatus.containsKey(status)) { - pzByStatus.get(status).add(pz); - } else { - List newPzList = new ArrayList(); - newPzList.add(pz); - pzByStatus.put(status, newPzList); - } - } - return pzByStatus; + public static EnumMap> + groupPizzaByStatus(List pzList) { + return pzList.stream().collect( + Collectors.groupingBy(Pizza::getStatus, + () -> new EnumMap<>(PizzaStatus.class), Collectors.toList())); } public void deliver() { if (isDeliverable()) { PizzaDeliverySystemConfiguration.getInstance().getDeliveryStrategy().deliver(this); - this.setStatus(PizzaStatusEnum.DELIVERED); + this.setStatus(PizzaStatus.DELIVERED); } } @@ -108,10 +105,6 @@ public class Pizza { } private static Predicate thatAreNotDelivered() { - return new Predicate() { - public boolean evaluate(Pizza entry) { - return undeliveredPizzaStatuses.contains(entry.getStatus()); - } - }; + return entry -> undeliveredPizzaStatuses.contains(entry.getStatus()); } } \ No newline at end of file diff --git a/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java b/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java index 9210945783..a276b3c000 100644 --- a/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java +++ b/core-java/src/main/java/com/baeldung/enums/PizzaDeliverySystemConfiguration.java @@ -1,9 +1,10 @@ package com.baeldung.enums; public enum PizzaDeliverySystemConfiguration { - INSTANCE ; - private PizzaDeliverySystemConfiguration() { - //Do the configuration initialization which + INSTANCE; + + PizzaDeliverySystemConfiguration() { + // Do the configuration initialization which // involves overriding defaults like delivery strategy } diff --git a/core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java b/core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java index 9f6a8feae5..a6814ee600 100644 --- a/core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java +++ b/core-java/src/test/java/org/baeldung/java/enums/PizzaTest.java @@ -15,66 +15,66 @@ public class PizzaTest { @Test public void givenPizaOrder_whenReady_thenDeliverable() { Pizza testPz = new Pizza(); - testPz.setStatus(Pizza.PizzaStatusEnum.READY); + testPz.setStatus(Pizza.PizzaStatus.READY); assertTrue(testPz.isDeliverable()); } @Test public void givenPizaOrders_whenRetrievingUnDeliveredPzs_thenCorrectlyRetrieved() { - List pzList = new ArrayList(); + List pzList = new ArrayList<>(); Pizza pz1 = new Pizza(); - pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); + pz1.setStatus(Pizza.PizzaStatus.DELIVERED); Pizza pz2 = new Pizza(); - pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); + pz2.setStatus(Pizza.PizzaStatus.ORDERED); Pizza pz3 = new Pizza(); - pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); + pz3.setStatus(Pizza.PizzaStatus.ORDERED); Pizza pz4 = new Pizza(); - pz4.setStatus(Pizza.PizzaStatusEnum.READY); + pz4.setStatus(Pizza.PizzaStatus.READY); pzList.add(pz1); pzList.add(pz2); pzList.add(pz3); pzList.add(pz4); - List undeliveredPzs = Pizza.getAllUndeliveredPizza(pzList); + List undeliveredPzs = Pizza.getAllUndeliveredPizzas(pzList); assertTrue(undeliveredPzs.size() == 3); } @Test public void givenPizaOrders_whenGroupByStatusCalled_thenCorrectlyGrouped() { - List pzList = new ArrayList(); + List pzList = new ArrayList<>(); Pizza pz1 = new Pizza(); - pz1.setStatus(Pizza.PizzaStatusEnum.DELIVERED); + pz1.setStatus(Pizza.PizzaStatus.DELIVERED); Pizza pz2 = new Pizza(); - pz2.setStatus(Pizza.PizzaStatusEnum.ORDERED); + pz2.setStatus(Pizza.PizzaStatus.ORDERED); Pizza pz3 = new Pizza(); - pz3.setStatus(Pizza.PizzaStatusEnum.ORDERED); + pz3.setStatus(Pizza.PizzaStatus.ORDERED); Pizza pz4 = new Pizza(); - pz4.setStatus(Pizza.PizzaStatusEnum.READY); + pz4.setStatus(Pizza.PizzaStatus.READY); pzList.add(pz1); pzList.add(pz2); pzList.add(pz3); pzList.add(pz4); - EnumMap> map = Pizza.groupPizzaByStatus(pzList); - assertTrue(map.get(Pizza.PizzaStatusEnum.DELIVERED).size() == 1); - assertTrue(map.get(Pizza.PizzaStatusEnum.ORDERED).size() == 2); - assertTrue(map.get(Pizza.PizzaStatusEnum.READY).size() == 1); + EnumMap> map = Pizza.groupPizzaByStatus(pzList); + assertTrue(map.get(Pizza.PizzaStatus.DELIVERED).size() == 1); + assertTrue(map.get(Pizza.PizzaStatus.ORDERED).size() == 2); + assertTrue(map.get(Pizza.PizzaStatus.READY).size() == 1); } @Test public void givenPizaOrder_whenDelivered_thenPizzaGetsDeliveredAndStatusChanges() { Pizza pz = new Pizza(); - pz.setStatus(Pizza.PizzaStatusEnum.READY); + pz.setStatus(Pizza.PizzaStatus.READY); pz.deliver(); - assertTrue(pz.getStatus() == Pizza.PizzaStatusEnum.DELIVERED); + assertTrue(pz.getStatus() == Pizza.PizzaStatus.DELIVERED); } } From 9835081ad303155befefbd441eb86a34132ad521 Mon Sep 17 00:00:00 2001 From: alexVengrovsk Date: Thu, 9 Jun 2016 23:31:30 +0300 Subject: [PATCH 070/283] Code for the article "Java 8 Stream API Tutorial" alextrentton@gmail.com Signed-off-by: --- .../java/com/baeldung/streamApi/Product.java | 51 ++++ .../baeldung/java8/Java8StreamApiTest.java | 269 ++++++++++++++++++ 2 files changed, 320 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/streamApi/Product.java create mode 100644 core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java diff --git a/core-java-8/src/main/java/com/baeldung/streamApi/Product.java b/core-java-8/src/main/java/com/baeldung/streamApi/Product.java new file mode 100644 index 0000000000..18f3a61904 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/streamApi/Product.java @@ -0,0 +1,51 @@ +package com.baeldung.streamApi; + +import java.util.List; +import java.util.Optional; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +/** + * Created by Alex Vengr + */ +public class Product { + + private int price; + + private String name; + + private boolean utilize; + + public Product(int price, String name) { + this(price); + this.name = name; + } + + public Product(int price) { + this.price = price; + } + + public Product() { + } + + public int getPrice() { + return price; + } + + public void setPrice(int price) { + this.price = price; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + public static Stream streamOf(List list) { + return (list == null || list.isEmpty()) ? Stream.empty() : list.stream(); + } +} diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java new file mode 100644 index 0000000000..a436b3e93f --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java @@ -0,0 +1,269 @@ +package com.baeldung.java8; + +import com.baeldung.streamApi.Product; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.Mockito; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.*; +import java.util.logging.Logger; +import java.util.regex.Pattern; +import java.util.stream.*; + +import static org.junit.Assert.*; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; + +/** + * Created by Alex Vengr + */ +public class Java8StreamApiTest { + + private long counter; + + private static Logger log = Logger.getAnonymousLogger(); + + private List productList; + + + @Before + public void init() { + productList = Arrays.asList(new Product(23, "potatoes"), + new Product(14, "orange"), new Product(13, "lemon"), + new Product(23, "bread"), new Product(13, "sugar")); + } + + @Test + public void checkPipeline_whenStreamOneElementShorter_thenCorrect() { + + List list = Arrays.asList("abc1", "abc2", "abc3"); + long size = list.stream().skip(1) + .map(element -> element.substring(0, 3)).count(); + assertEquals(list.size() - 1, size); + } + + @Test + public void checkOrder_whenChangeQuantityOfMethodCalls_thenCorrect() { + + List list = Arrays.asList("abc1", "abc2", "abc3"); + + counter = 0; + long sizeFirst = list.stream() + .skip(2).map(element -> { + wasCalled(); + return element.substring(0, 3); + }).count(); + assertEquals( 1, counter); + + counter = 0; + long sizeSecond = list.stream().map(element -> { + wasCalled(); + return element.substring(0, 3); + }).skip(2).count(); + assertEquals( 3, counter); + } + + @Test + public void createEmptyStream_whenEmpty_thenCorrect() { + + Stream streamEmpty = Stream.empty(); + assertEquals(0, streamEmpty.count()); + + List names = Collections.emptyList(); + Stream streamOf = Product.streamOf(names); + assertTrue(streamOf.count() == 0); + } + + @Test + public void createStream_whenCreated_thenCorrect() { + + Collection collection = Arrays.asList("a", "b", "c"); + Stream streamOfCollection = collection.stream(); + assertEquals(3, streamOfCollection.count()); + + Stream streamOfArray = Stream.of("a", "b", "c"); + assertEquals(3, streamOfArray.count()); + + String[] arr = new String[]{"a", "b", "c"}; + Stream streamOfArrayPart = Arrays.stream(arr, 1, 3); + assertEquals(2, streamOfArrayPart.count()); + + IntStream intStream = IntStream.range(1, 3); + LongStream longStream = LongStream.rangeClosed(1, 3); + Random random = new Random(); + DoubleStream doubleStream = random.doubles(3); + assertEquals(2, intStream.count()); + assertEquals(3, longStream.count()); + assertEquals(3, doubleStream.count()); + + IntStream streamOfChars = "abc".chars(); + IntStream str = "".chars(); + assertEquals(3, streamOfChars.count()); + + Stream streamOfString = Pattern.compile(", ").splitAsStream("a, b, c"); + assertEquals("a", streamOfString.findFirst().get()); + + Path path = getPath(); + Stream streamOfStrings = null; + try { + streamOfStrings = Files.lines(path, Charset.forName("UTF-8")); + } catch (IOException e) { + e.printStackTrace(); + } + assertEquals("a", streamOfStrings.findFirst().get()); + + Stream streamBuilder = Stream.builder().add("a").add("b").add("c").build(); + assertEquals(3, streamBuilder.count()); + + Stream streamGenerated = Stream.generate(() -> "element").limit(10); + assertEquals(10, streamGenerated.count()); + + Stream streamIterated = Stream.iterate(40, n -> n + 2).limit(20); + assertTrue(40 <= streamIterated.findAny().get()); + } + + @Test + public void runStreamPipeline_whenOrderIsRight_thenCorrect() { + + List list = Arrays.asList("abc1", "abc2", "abc3"); + Optional stream = list.stream() + .filter(element -> { + log.info("filter() was called"); + return element.contains("2"); + }).map(element -> { + log.info("map() was called"); + return element.toUpperCase(); + }).findFirst(); + } + + @Test + public void reduce_whenExpected_thenCorrect() { + + OptionalInt reduced = IntStream.range(1, 4).reduce((a, b) -> a + b); + assertEquals(6, reduced.getAsInt()); + + int reducedTwoParams = IntStream.range(1, 4).reduce(10, (a, b) -> a + b); + assertEquals(16, reducedTwoParams); + + int reducedThreeParams = Stream.of(1, 2, 3) + .reduce(10, (a, b) -> a + b, (a, b) -> { + log.info("combiner was called"); + return a + b; + }); + assertEquals(16, reducedThreeParams); + + int reducedThreeParamsParallel = Arrays.asList(1, 2, 3).parallelStream() + .reduce(10, (a, b) -> a + b, (a, b) -> { + log.info("combiner was called"); + return a + b; + }); + assertEquals(36, reducedThreeParamsParallel); + } + + @Test + public void collecting_whenAsExpected_thenCorrect() { + + List collectorCollection = productList.stream() + .map(Product::getName).collect(Collectors.toList()); + + assertTrue(collectorCollection instanceof List); + assertEquals(5, collectorCollection.size()); + + String listToString = productList.stream().map(Product::getName) + .collect(Collectors.joining(", ", "[", "]")); + + assertTrue(listToString.contains(",") && listToString.contains("[") && listToString.contains("]")); + + double averagePrice = productList.stream().collect(Collectors.averagingInt(Product::getPrice)); + assertTrue(17.2 == averagePrice); + + int summingPrice = productList.stream().collect(Collectors.summingInt(Product::getPrice)); + assertEquals(86, summingPrice); + + IntSummaryStatistics statistics = productList.stream() + .collect(Collectors.summarizingInt(Product::getPrice)); + assertEquals(23, statistics.getMax()); + + Map> collectorMapOfLists = productList.stream() + .collect(Collectors.groupingBy(Product::getPrice)); + assertEquals(3, collectorMapOfLists.keySet().size()); + + Map> mapPartioned = productList.stream() + .collect(Collectors.partitioningBy(element -> element.getPrice() > 15)); + assertEquals(2, mapPartioned.keySet().size()); + + } + + @Test(expected = UnsupportedOperationException.class) + public void collect_whenThrows_thenCorrect() { + Set unmodifiableSet = productList.stream() + .collect(Collectors.collectingAndThen(Collectors.toSet(), + Collections::unmodifiableSet)); + unmodifiableSet.add(new Product(4, "tea")); + } + + @Test + public void customCollector_whenResultContainsAllElementsFrSource_thenCorrect() { + Collector> toLinkedList = + Collector.of(LinkedList::new, LinkedList::add, + (first, second) -> { first.addAll(second); return first; }); + + LinkedList linkedListOfPersons = productList.stream().collect(toLinkedList); + assertTrue(linkedListOfPersons.containsAll(productList)); + } + + @Test + public void parallelStream_whenWorks_thenCorrect() { + Stream streamOfCollection = productList.parallelStream(); + boolean isParallel = streamOfCollection.isParallel(); + boolean haveBigPrice = streamOfCollection.map(product -> product.getPrice() * 12) + .anyMatch(price -> price > 200); + assertTrue(isParallel && haveBigPrice); + } + + @Test + public void parallel_whenIsParallel_thenCorrect() { + IntStream intStreamParallel = + IntStream.range(1, 150).parallel().map(element -> element * 34); + boolean isParallel = intStreamParallel.isParallel(); + assertTrue(isParallel); + } + + @Test + public void parallel_whenIsSequential_thenCorrect() { + IntStream intStreamParallel = + IntStream.range(1, 150).parallel().map(element -> element * 34); + IntStream intStreamSequential = intStreamParallel.sequential(); + boolean isParallel = intStreamParallel.isParallel(); + assertFalse(isParallel); + } + + private Path getPath() { + Path path = null; + try { + path = Files.createTempFile(null, ".txt"); + } catch (IOException e) { + e.printStackTrace(); + } + + try (BufferedWriter writer = Files.newBufferedWriter(path)) { + writer.write("a\nb\nc"); + } catch (IOException e) { + e.printStackTrace(); + } + return path; + } + + private void wasCalled() { + counter++; + } +} From 7ecd7ce02d412a495bc2bd79fece62aa315f7d2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Garci=CC=81a=20Lpez?= Date: Sun, 12 Jun 2016 21:28:49 +0200 Subject: [PATCH 071/283] Code and tests for the lombok introduction. --- lombok-intro/pom.xml | 151 ++++++++++++++++++ .../lombok/intro/ApiClientConfiguration.java | 22 +++ .../intro/ContactInformationSupport.java | 17 ++ .../lombok/intro/HasContactInformation.java | 16 ++ .../baeldung/lombok/intro/LoginResult.java | 25 +++ .../java/com/baeldung/lombok/intro/User.java | 43 +++++ .../com/baeldung/lombok/intro/UserEvent.java | 29 ++++ .../intro/ApiClientConfigurationTest.java | 43 +++++ .../lombok/intro/LoginResultTest.java | 59 +++++++ .../com/baeldung/lombok/intro/UserTest.java | 73 +++++++++ pom.xml | 2 + 11 files changed, 480 insertions(+) create mode 100644 lombok-intro/pom.xml create mode 100644 lombok-intro/src/main/java/com/baeldung/lombok/intro/ApiClientConfiguration.java create mode 100644 lombok-intro/src/main/java/com/baeldung/lombok/intro/ContactInformationSupport.java create mode 100644 lombok-intro/src/main/java/com/baeldung/lombok/intro/HasContactInformation.java create mode 100644 lombok-intro/src/main/java/com/baeldung/lombok/intro/LoginResult.java create mode 100644 lombok-intro/src/main/java/com/baeldung/lombok/intro/User.java create mode 100644 lombok-intro/src/main/java/com/baeldung/lombok/intro/UserEvent.java create mode 100644 lombok-intro/src/test/java/com/baeldung/lombok/intro/ApiClientConfigurationTest.java create mode 100644 lombok-intro/src/test/java/com/baeldung/lombok/intro/LoginResultTest.java create mode 100644 lombok-intro/src/test/java/com/baeldung/lombok/intro/UserTest.java diff --git a/lombok-intro/pom.xml b/lombok-intro/pom.xml new file mode 100644 index 0000000000..8204a0ee70 --- /dev/null +++ b/lombok-intro/pom.xml @@ -0,0 +1,151 @@ + + + + 4.0.0 + + lombok-intro + + com.baeldung + lombok-intro + 0.1-SNAPSHOT + + + + + org.projectlombok + lombok + + ${lombok.version} + provided + + + + org.hibernate.javax.persistence + hibernate-jpa-2.1-api + ${hibernate-jpa-2.1-api.version} + + + + + org.slf4j + slf4j-api + ${org.slf4j.version} + + + + ch.qos.logback + logback-core + ${logback.version} + runtime + + + + + + junit + junit + ${junit.version} + test + + + + + + + lombok-intro + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${maven.compiler.source} + ${maven.compiler.target} + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + org.projectlombok + lombok-maven-plugin + ${delombok-maven-plugin.version} + + + delombok + generate-sources + + delombok + + + ${project.basedir}/src/main/java + false + + skip + + false + + + + + + + + + + + + UTF-8 + + 1.8 + 1.8 + + + 1.16.8 + + + 1.0.0.Final + + + 1.7.13 + 1.1.3 + + + 4.12 + + + 3.5.1 + 2.19.1 + + + ${lombok.version}.0 + + + diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/ApiClientConfiguration.java b/lombok-intro/src/main/java/com/baeldung/lombok/intro/ApiClientConfiguration.java new file mode 100644 index 0000000000..74cc929d32 --- /dev/null +++ b/lombok-intro/src/main/java/com/baeldung/lombok/intro/ApiClientConfiguration.java @@ -0,0 +1,22 @@ +package com.baeldung.lombok.intro; + +import lombok.Builder; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Builder +@Slf4j +@Getter +public class ApiClientConfiguration { + + private String host; + private int port; + private boolean useHttps; + + private long connectTimeout; + private long readTimeout; + + private String username; + private String password; + +} diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/ContactInformationSupport.java b/lombok-intro/src/main/java/com/baeldung/lombok/intro/ContactInformationSupport.java new file mode 100644 index 0000000000..ea9c3d23f5 --- /dev/null +++ b/lombok-intro/src/main/java/com/baeldung/lombok/intro/ContactInformationSupport.java @@ -0,0 +1,17 @@ +package com.baeldung.lombok.intro; + +import lombok.Data; + +@Data +public class ContactInformationSupport implements HasContactInformation { + + private String firstName; + private String lastName; + private String phoneNr; + + @Override + public String getFullName() { + return getFirstName() + " " + getLastName(); + } + +} diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/HasContactInformation.java b/lombok-intro/src/main/java/com/baeldung/lombok/intro/HasContactInformation.java new file mode 100644 index 0000000000..9128df5fb0 --- /dev/null +++ b/lombok-intro/src/main/java/com/baeldung/lombok/intro/HasContactInformation.java @@ -0,0 +1,16 @@ +package com.baeldung.lombok.intro; + +public interface HasContactInformation { + + String getFirstName(); + void setFirstName(String firstName); + + String getFullName(); + + String getLastName(); + void setLastName(String lastName); + + String getPhoneNr(); + void setPhoneNr(String phoneNr); + +} diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/LoginResult.java b/lombok-intro/src/main/java/com/baeldung/lombok/intro/LoginResult.java new file mode 100644 index 0000000000..6e75696612 --- /dev/null +++ b/lombok-intro/src/main/java/com/baeldung/lombok/intro/LoginResult.java @@ -0,0 +1,25 @@ +package com.baeldung.lombok.intro; + +import java.net.URL; +import java.time.Duration; +import java.time.Instant; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.experimental.Accessors; + +@RequiredArgsConstructor +@Accessors(fluent = true) @Getter +@EqualsAndHashCode(of = {"authToken"}) +public class LoginResult { + + private final @NonNull Instant loginTs; + + private final @NonNull String authToken; + private final @NonNull Duration tokenValidity; + + private final @NonNull URL tokenRefreshUrl; + +} diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/User.java b/lombok-intro/src/main/java/com/baeldung/lombok/intro/User.java new file mode 100644 index 0000000000..d032d1f9e7 --- /dev/null +++ b/lombok-intro/src/main/java/com/baeldung/lombok/intro/User.java @@ -0,0 +1,43 @@ +package com.baeldung.lombok.intro; + +import java.io.Serializable; +import java.util.List; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.OneToMany; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Delegate; + +@Entity +@Getter @Setter @NoArgsConstructor // <--- THIS is it +@ToString(exclude = {"events"}) +public class User implements Serializable, HasContactInformation { + + private @Id @Setter(AccessLevel.PROTECTED) Long id; // will be set when persisting + + private String nickname; + + // Whichever other User-specific attributes + + @Delegate(types = {HasContactInformation.class}) + private final ContactInformationSupport contactInformation = new ContactInformationSupport(); + + // User itelf will implement all contact information by delegation + + @OneToMany(mappedBy = "user") + private List events; + + public User(String nickname, String firstName, String lastName, String phoneNr) { + this.nickname = nickname; + contactInformation.setFirstName(firstName); + contactInformation.setLastName(lastName); + contactInformation.setPhoneNr(phoneNr); + } + +} diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/UserEvent.java b/lombok-intro/src/main/java/com/baeldung/lombok/intro/UserEvent.java new file mode 100644 index 0000000000..6a13608664 --- /dev/null +++ b/lombok-intro/src/main/java/com/baeldung/lombok/intro/UserEvent.java @@ -0,0 +1,29 @@ +package com.baeldung.lombok.intro; + +import java.io.Serializable; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; + +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@NoArgsConstructor @Getter @Setter +public class UserEvent implements Serializable { + + // This class is just for sample purposes. + + private @Id @Setter(AccessLevel.PROTECTED) Long id; + + @ManyToOne + private User user; + + public UserEvent(User user) { + this.user = user; + } + +} diff --git a/lombok-intro/src/test/java/com/baeldung/lombok/intro/ApiClientConfigurationTest.java b/lombok-intro/src/test/java/com/baeldung/lombok/intro/ApiClientConfigurationTest.java new file mode 100644 index 0000000000..8283fc655e --- /dev/null +++ b/lombok-intro/src/test/java/com/baeldung/lombok/intro/ApiClientConfigurationTest.java @@ -0,0 +1,43 @@ +package com.baeldung.lombok.intro; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +import com.baeldung.lombok.intro.ApiClientConfiguration.ApiClientConfigurationBuilder; +import org.junit.Assert; +import org.junit.Test; + +public class ApiClientConfigurationTest { + + @Test + public void givenAnnotatedConfiguration_thenCanBeBuiltViaBuilder() { + ApiClientConfiguration config = + new ApiClientConfigurationBuilder() + .host("api.server.com") + .port(443) + .useHttps(true) + .connectTimeout(15_000L) + .readTimeout(5_000L) + .username("myusername") + .password("secret") + .build(); + + Assert.assertEquals(config.getHost(), "api.server.com"); + Assert.assertEquals(config.getPort(), 443); + Assert.assertEquals(config.isUseHttps(), true); + Assert.assertEquals(config.getConnectTimeout(), 15_000L); + Assert.assertEquals(config.getReadTimeout(), 5_000L); + Assert.assertEquals(config.getUsername(), "myusername"); + Assert.assertEquals(config.getPassword(), "secret"); + } + + @Test + public void givenAnnotatedConfiguration_thenHasLoggerInstance() throws NoSuchFieldException { + Field loggerInstance = ApiClientConfiguration.class.getDeclaredField("log"); + int modifiers = loggerInstance.getModifiers(); + Assert.assertTrue(Modifier.isPrivate(modifiers)); + Assert.assertTrue(Modifier.isStatic(modifiers)); + Assert.assertTrue(Modifier.isFinal(modifiers)); + } + +} diff --git a/lombok-intro/src/test/java/com/baeldung/lombok/intro/LoginResultTest.java b/lombok-intro/src/test/java/com/baeldung/lombok/intro/LoginResultTest.java new file mode 100644 index 0000000000..56878e4a03 --- /dev/null +++ b/lombok-intro/src/test/java/com/baeldung/lombok/intro/LoginResultTest.java @@ -0,0 +1,59 @@ +package com.baeldung.lombok.intro; + +import java.net.MalformedURLException; +import java.net.URL; +import java.time.Duration; +import java.time.Instant; + +import org.junit.Assert; +import org.junit.Test; + +public class LoginResultTest { + + @Test + public void givenAnnotatedLoginResult_thenHasConstructorForAllFinalFields() + throws MalformedURLException { + /* LoginResult loginResult = */ new LoginResult( + Instant.now(), + "apitoken", + Duration.ofHours(1), + new URL("https://api.product.com/token-refresh")); + } + + @Test + public void givenAnnotatedLoginResult_thenHasFluentGetters() + throws MalformedURLException { + Instant loginTs = Instant.now(); + LoginResult loginResult = new LoginResult( + loginTs, + "apitoken", + Duration.ofHours(1), + new URL("https://api.product.com/token-refresh")); + + Assert.assertEquals(loginResult.loginTs(), loginTs); + Assert.assertEquals(loginResult.authToken(), "apitoken"); + Assert.assertEquals(loginResult.tokenValidity(), Duration.ofHours(1)); + Assert.assertEquals(loginResult.tokenRefreshUrl(), new URL("https://api.product.com/token-refresh")); + } + + @Test + public void givenAnnotatedLoginResult_whenSameApiToken_thenEqualInstances() + throws MalformedURLException { + String theSameApiToken = "testapitoken"; + + LoginResult loginResult1 = new LoginResult( + Instant.now(), + theSameApiToken, + Duration.ofHours(1), + new URL("https://api.product.com/token-refresh")); + + LoginResult loginResult2 = new LoginResult( + Instant.now(), + theSameApiToken, + Duration.ofHours(2), + new URL("https://api.product.com/token-refresh-alt")); + + Assert.assertEquals(loginResult1, loginResult2); + } + +} diff --git a/lombok-intro/src/test/java/com/baeldung/lombok/intro/UserTest.java b/lombok-intro/src/test/java/com/baeldung/lombok/intro/UserTest.java new file mode 100644 index 0000000000..b3bf21478f --- /dev/null +++ b/lombok-intro/src/test/java/com/baeldung/lombok/intro/UserTest.java @@ -0,0 +1,73 @@ +package com.baeldung.lombok.intro; + +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Arrays; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +public class UserTest { + + @Test + public void givenAnnotatedUser_thenHasEmptyConstructor() { + /* User user = */ new User(); + } + + @Test + public void givenAnnotatedUser_thenHasGettersAndSetters() { + User user = new User("testnickname", "Test", "JUnit", "123456"); + + Assert.assertEquals("testnickname", user.getNickname()); + Assert.assertEquals("Test", user.getFirstName()); + Assert.assertEquals("JUnit", user.getLastName()); + Assert.assertEquals("123456", user.getPhoneNr()); + + user.setNickname("testnickname2"); + user.setFirstName("Test2"); + user.setLastName("JUnit2"); + user.setPhoneNr("654321"); + + Assert.assertEquals("testnickname2", user.getNickname()); + Assert.assertEquals("Test2", user.getFirstName()); + Assert.assertEquals("JUnit2", user.getLastName()); + Assert.assertEquals("654321", user.getPhoneNr()); + } + + @Test + public void givenAnnotatedUser_thenHasProtectedSetId() throws NoSuchMethodException { + Method setIdMethod = User.class.getDeclaredMethod("setId", Long.class); + int modifiers = setIdMethod.getModifiers(); + Assert.assertTrue(Modifier.isProtected(modifiers)); + } + + @Test + public void givenAnnotatedUser_thenImplementsHasContactInformation() { + User user = new User("testnickname3", "Test3", "JUnit3", "987654"); + Assert.assertTrue(user instanceof HasContactInformation); + + Assert.assertEquals("Test3", user.getFirstName()); + Assert.assertEquals("JUnit3", user.getLastName()); + Assert.assertEquals("987654", user.getPhoneNr()); + Assert.assertEquals("Test3 JUnit3", user.getFullName()); + + user.setFirstName("Test4"); + user.setLastName("JUnit4"); + user.setPhoneNr("456789"); + + Assert.assertEquals("Test4", user.getFirstName()); + Assert.assertEquals("JUnit4", user.getLastName()); + Assert.assertEquals("456789", user.getPhoneNr()); + Assert.assertEquals("Test4 JUnit4", user.getFullName()); + } + + @Test + public void givenAnnotatedUser_whenHasEvents_thenToStringDumpsNoEvents() { + User user = new User("testnickname", "Test", "JUnit", "123456"); + List events = Arrays.asList(new UserEvent(user), new UserEvent(user)); + user.setEvents(events); + Assert.assertFalse(user.toString().contains("events")); + } + +} diff --git a/pom.xml b/pom.xml index ce7dfca62f..9abd2d9376 100644 --- a/pom.xml +++ b/pom.xml @@ -67,6 +67,8 @@ spring-zuul jsf xml + + lombok-intro From 3c0a53ea044d0341342c177cdd011640b8666e89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Garci=CC=81a=20Lpez?= Date: Sun, 12 Jun 2016 22:33:45 +0200 Subject: [PATCH 072/283] Rename lombok-intro to just lombok. --- {lombok-intro => lombok}/pom.xml | 6 +++--- .../com/baeldung/lombok/intro/ApiClientConfiguration.java | 0 .../baeldung/lombok/intro/ContactInformationSupport.java | 0 .../com/baeldung/lombok/intro/HasContactInformation.java | 0 .../main/java/com/baeldung/lombok/intro/LoginResult.java | 0 .../src/main/java/com/baeldung/lombok/intro/User.java | 0 .../src/main/java/com/baeldung/lombok/intro/UserEvent.java | 0 .../baeldung/lombok/intro/ApiClientConfigurationTest.java | 0 .../java/com/baeldung/lombok/intro/LoginResultTest.java | 0 .../src/test/java/com/baeldung/lombok/intro/UserTest.java | 0 pom.xml | 2 +- 11 files changed, 4 insertions(+), 4 deletions(-) rename {lombok-intro => lombok}/pom.xml (97%) rename {lombok-intro => lombok}/src/main/java/com/baeldung/lombok/intro/ApiClientConfiguration.java (100%) rename {lombok-intro => lombok}/src/main/java/com/baeldung/lombok/intro/ContactInformationSupport.java (100%) rename {lombok-intro => lombok}/src/main/java/com/baeldung/lombok/intro/HasContactInformation.java (100%) rename {lombok-intro => lombok}/src/main/java/com/baeldung/lombok/intro/LoginResult.java (100%) rename {lombok-intro => lombok}/src/main/java/com/baeldung/lombok/intro/User.java (100%) rename {lombok-intro => lombok}/src/main/java/com/baeldung/lombok/intro/UserEvent.java (100%) rename {lombok-intro => lombok}/src/test/java/com/baeldung/lombok/intro/ApiClientConfigurationTest.java (100%) rename {lombok-intro => lombok}/src/test/java/com/baeldung/lombok/intro/LoginResultTest.java (100%) rename {lombok-intro => lombok}/src/test/java/com/baeldung/lombok/intro/UserTest.java (100%) diff --git a/lombok-intro/pom.xml b/lombok/pom.xml similarity index 97% rename from lombok-intro/pom.xml rename to lombok/pom.xml index 8204a0ee70..b816642165 100644 --- a/lombok-intro/pom.xml +++ b/lombok/pom.xml @@ -6,10 +6,10 @@ 4.0.0 - lombok-intro + lombok com.baeldung - lombok-intro + lombok 0.1-SNAPSHOT @@ -56,7 +56,7 @@ - lombok-intro + lombok src/main/resources diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/ApiClientConfiguration.java b/lombok/src/main/java/com/baeldung/lombok/intro/ApiClientConfiguration.java similarity index 100% rename from lombok-intro/src/main/java/com/baeldung/lombok/intro/ApiClientConfiguration.java rename to lombok/src/main/java/com/baeldung/lombok/intro/ApiClientConfiguration.java diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/ContactInformationSupport.java b/lombok/src/main/java/com/baeldung/lombok/intro/ContactInformationSupport.java similarity index 100% rename from lombok-intro/src/main/java/com/baeldung/lombok/intro/ContactInformationSupport.java rename to lombok/src/main/java/com/baeldung/lombok/intro/ContactInformationSupport.java diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/HasContactInformation.java b/lombok/src/main/java/com/baeldung/lombok/intro/HasContactInformation.java similarity index 100% rename from lombok-intro/src/main/java/com/baeldung/lombok/intro/HasContactInformation.java rename to lombok/src/main/java/com/baeldung/lombok/intro/HasContactInformation.java diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/LoginResult.java b/lombok/src/main/java/com/baeldung/lombok/intro/LoginResult.java similarity index 100% rename from lombok-intro/src/main/java/com/baeldung/lombok/intro/LoginResult.java rename to lombok/src/main/java/com/baeldung/lombok/intro/LoginResult.java diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/User.java b/lombok/src/main/java/com/baeldung/lombok/intro/User.java similarity index 100% rename from lombok-intro/src/main/java/com/baeldung/lombok/intro/User.java rename to lombok/src/main/java/com/baeldung/lombok/intro/User.java diff --git a/lombok-intro/src/main/java/com/baeldung/lombok/intro/UserEvent.java b/lombok/src/main/java/com/baeldung/lombok/intro/UserEvent.java similarity index 100% rename from lombok-intro/src/main/java/com/baeldung/lombok/intro/UserEvent.java rename to lombok/src/main/java/com/baeldung/lombok/intro/UserEvent.java diff --git a/lombok-intro/src/test/java/com/baeldung/lombok/intro/ApiClientConfigurationTest.java b/lombok/src/test/java/com/baeldung/lombok/intro/ApiClientConfigurationTest.java similarity index 100% rename from lombok-intro/src/test/java/com/baeldung/lombok/intro/ApiClientConfigurationTest.java rename to lombok/src/test/java/com/baeldung/lombok/intro/ApiClientConfigurationTest.java diff --git a/lombok-intro/src/test/java/com/baeldung/lombok/intro/LoginResultTest.java b/lombok/src/test/java/com/baeldung/lombok/intro/LoginResultTest.java similarity index 100% rename from lombok-intro/src/test/java/com/baeldung/lombok/intro/LoginResultTest.java rename to lombok/src/test/java/com/baeldung/lombok/intro/LoginResultTest.java diff --git a/lombok-intro/src/test/java/com/baeldung/lombok/intro/UserTest.java b/lombok/src/test/java/com/baeldung/lombok/intro/UserTest.java similarity index 100% rename from lombok-intro/src/test/java/com/baeldung/lombok/intro/UserTest.java rename to lombok/src/test/java/com/baeldung/lombok/intro/UserTest.java diff --git a/pom.xml b/pom.xml index 9abd2d9376..4116c0aca7 100644 --- a/pom.xml +++ b/pom.xml @@ -68,7 +68,7 @@ jsf xml - lombok-intro + lombok From 31eaa0e16d68e7ed24920b4c012a9e1e86256cc8 Mon Sep 17 00:00:00 2001 From: eugenp Date: Sun, 12 Jun 2016 23:45:42 +0300 Subject: [PATCH 073/283] interesting httpclient digest auth example --- httpclient/.settings/org.eclipse.jdt.ui.prefs | 55 ------------------- 1 file changed, 55 deletions(-) delete mode 100644 httpclient/.settings/org.eclipse.jdt.ui.prefs diff --git a/httpclient/.settings/org.eclipse.jdt.ui.prefs b/httpclient/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 471e9b0d81..0000000000 --- a/httpclient/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,55 +0,0 @@ -#Sat Jan 21 23:04:06 EET 2012 -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=true -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=true -sp_cleanup.always_use_this_for_non_static_field_access=false -sp_cleanup.always_use_this_for_non_static_method_access=false -sp_cleanup.convert_to_enhanced_for_loop=true -sp_cleanup.correct_indentation=true -sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=true -sp_cleanup.make_local_variable_final=true -sp_cleanup.make_parameters_final=true -sp_cleanup.make_private_fields_final=false -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=true -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=false -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=true -sp_cleanup.qualify_static_method_accesses_with_declaring_class=false -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=true -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=false -sp_cleanup.remove_unused_imports=true -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=false -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=false -sp_cleanup.use_this_for_non_static_field_access=true -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=true -sp_cleanup.use_this_for_non_static_method_access=true -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=true From 14cd93227bf82bbc0b7402e3a48dd103b926dbc2 Mon Sep 17 00:00:00 2001 From: eugenp Date: Sun, 12 Jun 2016 23:45:58 +0300 Subject: [PATCH 074/283] interesting httpclient digest auth example --- .../org/baeldung/httpclient/SandboxTest.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java diff --git a/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java b/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java new file mode 100644 index 0000000000..23f3c6ac76 --- /dev/null +++ b/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java @@ -0,0 +1,86 @@ +package org.baeldung.httpclient; + +import java.io.IOException; + +import org.apache.http.Header; +import org.apache.http.HttpHost; +import org.apache.http.HttpResponse; +import org.apache.http.auth.AuthScope; +import org.apache.http.auth.AuthenticationException; +import org.apache.http.auth.MalformedChallengeException; +import org.apache.http.auth.UsernamePasswordCredentials; +import org.apache.http.client.AuthCache; +import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.CredentialsProvider; +import org.apache.http.client.methods.CloseableHttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.protocol.HttpClientContext; +import org.apache.http.impl.auth.DigestScheme; +import org.apache.http.impl.client.BasicAuthCache; +import org.apache.http.impl.client.BasicCredentialsProvider; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import org.junit.Test; + +public class SandboxTest { + + @Test + public final void whenInterestingDigestAuthScenario_then200OK() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { + final HttpHost targetHost = new HttpHost("httpbin.org", 80, "http"); + + // set up the credentials to run agains the server + final CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials("user", "passwd")); + + // We need a first run to get a 401 to seed the digest auth + + // Make a client using those creds + final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); + + // And make a call to the URL we are after + final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd"); + + // Create a context to use + final HttpClientContext context = HttpClientContext.create(); + + // Get a response from the sever (expect a 401!) + final HttpResponse authResponse = client.execute(targetHost, httpget, context); + + // Pull out the auth header that came back from the server + final Header challenge = authResponse.getHeaders("WWW-Authenticate")[0]; + + // Lets use a digest scheme to solve it + final DigestScheme digest = new DigestScheme(); + digest.processChallenge(challenge); + + // Make a header with the solution based upon user/password and what the digest got out of the initial 401 reponse + final Header solution = digest.authenticate(new UsernamePasswordCredentials("user", "passwd"), httpget, context); + + // Need an auth cache to use the new digest we made + final AuthCache authCache = new BasicAuthCache(); + authCache.put(targetHost, digest); + + // Add the authCache and thus solved digest to the context + context.setAuthCache(authCache); + + // Pimp up our http get with the solved header made by the digest + httpget.addHeader(solution); + + // use it! + System.out.println("Executing request " + httpget.getRequestLine() + " to target " + targetHost); + + for (int i = 0; i < 3; i++) { + final CloseableHttpResponse responseGood = client.execute(targetHost, httpget, context); + + try { + System.out.println("----------------------------------------"); + System.out.println(responseGood.getStatusLine()); + System.out.println(EntityUtils.toString(responseGood.getEntity())); + } finally { + responseGood.close(); + } + } + + } +} From 73471f6ec97c91e4d8f61e3853024c9395916345 Mon Sep 17 00:00:00 2001 From: Eugen Date: Mon, 13 Jun 2016 00:34:53 +0300 Subject: [PATCH 075/283] Update README.md --- spring-security-rest-full/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-security-rest-full/README.md b/spring-security-rest-full/README.md index f648c49244..72e8636df1 100644 --- a/spring-security-rest-full/README.md +++ b/spring-security-rest-full/README.md @@ -2,6 +2,8 @@ ## REST Example Project with Spring Security +### The Course + The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: - [Spring Security Expressions - hasRole Example](http://www.baeldung.com/spring-security-expressions-basic) From a5bde90d402d13723f1a744f1635c790b7dc7b9e Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 15 Jun 2016 06:57:43 +0200 Subject: [PATCH 076/283] java-streams-8-api - adding slf4j fixing indentation --- core-java-8/pom.xml | 6 ++ .../baeldung/java8/Java8StreamApiTest.java | 100 ++++++++---------- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/core-java-8/pom.xml b/core-java-8/pom.xml index 0e589ebf47..f99d85f564 100644 --- a/core-java-8/pom.xml +++ b/core-java-8/pom.xml @@ -41,6 +41,12 @@ 3.3.2 + + org.slf4j + slf4j-api + ${org.slf4j.version} + + diff --git a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java index a436b3e93f..37326c6d26 100644 --- a/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java +++ b/core-java-8/src/test/java/com/baeldung/java8/Java8StreamApiTest.java @@ -2,44 +2,35 @@ package com.baeldung.java8; import com.baeldung.streamApi.Product; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; -import org.mockito.Mock; -import org.mockito.Mockito; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.BufferedWriter; -import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.*; -import java.util.logging.Logger; import java.util.regex.Pattern; import java.util.stream.*; import static org.junit.Assert.*; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.mock; -/** - * Created by Alex Vengr - */ public class Java8StreamApiTest { private long counter; - private static Logger log = Logger.getAnonymousLogger(); + private static Logger log = LoggerFactory.getLogger(Java8StreamApiTest.class); private List productList; - @Before public void init() { - productList = Arrays.asList(new Product(23, "potatoes"), - new Product(14, "orange"), new Product(13, "lemon"), - new Product(23, "bread"), new Product(13, "sugar")); + productList = Arrays.asList( + new Product(23, "potatoes"), new Product(14, "orange"), + new Product(13, "lemon"), new Product(23, "bread"), + new Product(13, "sugar")); } @Test @@ -47,7 +38,7 @@ public class Java8StreamApiTest { List list = Arrays.asList("abc1", "abc2", "abc3"); long size = list.stream().skip(1) - .map(element -> element.substring(0, 3)).count(); + .map(element -> element.substring(0, 3)).count(); assertEquals(list.size() - 1, size); } @@ -58,18 +49,18 @@ public class Java8StreamApiTest { counter = 0; long sizeFirst = list.stream() - .skip(2).map(element -> { - wasCalled(); - return element.substring(0, 3); - }).count(); - assertEquals( 1, counter); + .skip(2).map(element -> { + wasCalled(); + return element.substring(0, 3); + }).count(); + assertEquals(1, counter); counter = 0; long sizeSecond = list.stream().map(element -> { wasCalled(); return element.substring(0, 3); }).skip(2).count(); - assertEquals( 3, counter); + assertEquals(3, counter); } @Test @@ -117,7 +108,7 @@ public class Java8StreamApiTest { try { streamOfStrings = Files.lines(path, Charset.forName("UTF-8")); } catch (IOException e) { - e.printStackTrace(); + log.error("Error creating streams from paths {}", path, e.getMessage(), e); } assertEquals("a", streamOfStrings.findFirst().get()); @@ -136,13 +127,13 @@ public class Java8StreamApiTest { List list = Arrays.asList("abc1", "abc2", "abc3"); Optional stream = list.stream() - .filter(element -> { - log.info("filter() was called"); - return element.contains("2"); - }).map(element -> { - log.info("map() was called"); - return element.toUpperCase(); - }).findFirst(); + .filter(element -> { + log.info("filter() was called"); + return element.contains("2"); + }).map(element -> { + log.info("map() was called"); + return element.toUpperCase(); + }).findFirst(); } @Test @@ -155,17 +146,17 @@ public class Java8StreamApiTest { assertEquals(16, reducedTwoParams); int reducedThreeParams = Stream.of(1, 2, 3) - .reduce(10, (a, b) -> a + b, (a, b) -> { - log.info("combiner was called"); - return a + b; - }); + .reduce(10, (a, b) -> a + b, (a, b) -> { + log.info("combiner was called"); + return a + b; + }); assertEquals(16, reducedThreeParams); int reducedThreeParamsParallel = Arrays.asList(1, 2, 3).parallelStream() - .reduce(10, (a, b) -> a + b, (a, b) -> { - log.info("combiner was called"); - return a + b; - }); + .reduce(10, (a, b) -> a + b, (a, b) -> { + log.info("combiner was called"); + return a + b; + }); assertEquals(36, reducedThreeParamsParallel); } @@ -173,13 +164,13 @@ public class Java8StreamApiTest { public void collecting_whenAsExpected_thenCorrect() { List collectorCollection = productList.stream() - .map(Product::getName).collect(Collectors.toList()); + .map(Product::getName).collect(Collectors.toList()); assertTrue(collectorCollection instanceof List); assertEquals(5, collectorCollection.size()); String listToString = productList.stream().map(Product::getName) - .collect(Collectors.joining(", ", "[", "]")); + .collect(Collectors.joining(", ", "[", "]")); assertTrue(listToString.contains(",") && listToString.contains("[") && listToString.contains("]")); @@ -190,15 +181,15 @@ public class Java8StreamApiTest { assertEquals(86, summingPrice); IntSummaryStatistics statistics = productList.stream() - .collect(Collectors.summarizingInt(Product::getPrice)); + .collect(Collectors.summarizingInt(Product::getPrice)); assertEquals(23, statistics.getMax()); Map> collectorMapOfLists = productList.stream() - .collect(Collectors.groupingBy(Product::getPrice)); + .collect(Collectors.groupingBy(Product::getPrice)); assertEquals(3, collectorMapOfLists.keySet().size()); Map> mapPartioned = productList.stream() - .collect(Collectors.partitioningBy(element -> element.getPrice() > 15)); + .collect(Collectors.partitioningBy(element -> element.getPrice() > 15)); assertEquals(2, mapPartioned.keySet().size()); } @@ -206,16 +197,19 @@ public class Java8StreamApiTest { @Test(expected = UnsupportedOperationException.class) public void collect_whenThrows_thenCorrect() { Set unmodifiableSet = productList.stream() - .collect(Collectors.collectingAndThen(Collectors.toSet(), - Collections::unmodifiableSet)); + .collect(Collectors.collectingAndThen(Collectors.toSet(), + Collections::unmodifiableSet)); unmodifiableSet.add(new Product(4, "tea")); } @Test public void customCollector_whenResultContainsAllElementsFrSource_thenCorrect() { Collector> toLinkedList = - Collector.of(LinkedList::new, LinkedList::add, - (first, second) -> { first.addAll(second); return first; }); + Collector.of(LinkedList::new, LinkedList::add, + (first, second) -> { + first.addAll(second); + return first; + }); LinkedList linkedListOfPersons = productList.stream().collect(toLinkedList); assertTrue(linkedListOfPersons.containsAll(productList)); @@ -226,14 +220,14 @@ public class Java8StreamApiTest { Stream streamOfCollection = productList.parallelStream(); boolean isParallel = streamOfCollection.isParallel(); boolean haveBigPrice = streamOfCollection.map(product -> product.getPrice() * 12) - .anyMatch(price -> price > 200); + .anyMatch(price -> price > 200); assertTrue(isParallel && haveBigPrice); } @Test public void parallel_whenIsParallel_thenCorrect() { IntStream intStreamParallel = - IntStream.range(1, 150).parallel().map(element -> element * 34); + IntStream.range(1, 150).parallel().map(element -> element * 34); boolean isParallel = intStreamParallel.isParallel(); assertTrue(isParallel); } @@ -241,7 +235,7 @@ public class Java8StreamApiTest { @Test public void parallel_whenIsSequential_thenCorrect() { IntStream intStreamParallel = - IntStream.range(1, 150).parallel().map(element -> element * 34); + IntStream.range(1, 150).parallel().map(element -> element * 34); IntStream intStreamSequential = intStreamParallel.sequential(); boolean isParallel = intStreamParallel.isParallel(); assertFalse(isParallel); @@ -252,13 +246,13 @@ public class Java8StreamApiTest { try { path = Files.createTempFile(null, ".txt"); } catch (IOException e) { - e.printStackTrace(); + log.error(e.getMessage()); } try (BufferedWriter writer = Files.newBufferedWriter(path)) { writer.write("a\nb\nc"); } catch (IOException e) { - e.printStackTrace(); + log.error(e.getMessage()); } return path; } From 70322e1a44c755cd7b06be2fffea8c880b8dc77b Mon Sep 17 00:00:00 2001 From: slavisa-baeldung Date: Wed, 15 Jun 2016 20:25:41 +0200 Subject: [PATCH 077/283] spring-mvc-matrix-variables - manually merging --- spring-mvc-java/pom.xml | 1 - .../main/java/com/baeldung/model/Company.java | 38 +++++++++ .../java/com/baeldung/model/Employee.java | 14 +++- .../baeldung/spring/web/config/WebConfig.java | 10 +++ .../web/controller/CompanyController.java | 56 +++++++++++++ .../web/controller/EmployeeController.java | 79 ++++++++++++++++--- .../main/webapp/WEB-INF/view/companyHome.jsp | 31 ++++++++ .../main/webapp/WEB-INF/view/companyView.jsp | 20 +++++ .../main/webapp/WEB-INF/view/employeeHome.jsp | 4 + .../main/webapp/WEB-INF/view/employeeView.jsp | 4 + 10 files changed, 242 insertions(+), 15 deletions(-) create mode 100644 spring-mvc-java/src/main/java/com/baeldung/model/Company.java create mode 100644 spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java create mode 100644 spring-mvc-java/src/main/webapp/WEB-INF/view/companyHome.jsp create mode 100644 spring-mvc-java/src/main/webapp/WEB-INF/view/companyView.jsp diff --git a/spring-mvc-java/pom.xml b/spring-mvc-java/pom.xml index e796099190..33d6306c5a 100644 --- a/spring-mvc-java/pom.xml +++ b/spring-mvc-java/pom.xml @@ -194,7 +194,6 @@ cargo-maven2-plugin ${cargo-maven2-plugin.version} - true jetty8x embedded diff --git a/spring-mvc-java/src/main/java/com/baeldung/model/Company.java b/spring-mvc-java/src/main/java/com/baeldung/model/Company.java new file mode 100644 index 0000000000..558507268a --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/model/Company.java @@ -0,0 +1,38 @@ +package com.baeldung.model; + +public class Company { + + private long id; + private String name; + + public Company() { + super(); + } + + public Company(final long id, final String name) { + this.id = id; + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public long getId() { + return id; + } + + public void setId(final long id) { + this.id = id; + } + + @Override + public String toString() { + return "Company [id=" + id + ", name=" + name + "]"; + } + +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/model/Employee.java b/spring-mvc-java/src/main/java/com/baeldung/model/Employee.java index d0f6b724eb..fb0a452219 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/model/Employee.java +++ b/spring-mvc-java/src/main/java/com/baeldung/model/Employee.java @@ -8,15 +8,17 @@ public class Employee { private long id; private String name; private String contactNumber; + private String workingArea; public Employee() { super(); } - public Employee(final long id, final String name, final String contactNumber) { + public Employee(final long id, final String name, final String contactNumber, final String workingArea) { this.id = id; this.name = name; this.contactNumber = contactNumber; + this.workingArea = workingArea; } public String getName() { @@ -43,9 +45,17 @@ public class Employee { this.contactNumber = contactNumber; } + public String getWorkingArea() { + return workingArea; + } + + public void setWorkingArea(final String workingArea) { + this.workingArea = workingArea; + } + @Override public String toString() { - return "Employee [id=" + id + ", name=" + name + ", contactNumber=" + contactNumber + "]"; + return "Employee [id=" + id + ", name=" + name + ", contactNumber=" + contactNumber + ", workingArea=" + workingArea + "]"; } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebConfig.java b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebConfig.java index ba7f35fd65..663b9cc4d2 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebConfig.java +++ b/spring-mvc-java/src/main/java/com/baeldung/spring/web/config/WebConfig.java @@ -13,12 +13,14 @@ import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.multipart.commons.CommonsMultipartResolver; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.PathMatchConfigurer; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.InternalResourceViewResolver; import org.springframework.web.servlet.view.JstlView; import org.springframework.web.servlet.view.ResourceBundleViewResolver; import org.springframework.web.servlet.view.XmlViewResolver; +import org.springframework.web.util.UrlPathHelper; @Configuration @EnableWebMvc @@ -96,4 +98,12 @@ public class WebConfig extends WebMvcConfigurerAdapter { return list; } + + @Override + public void configurePathMatch(final PathMatchConfigurer configurer) { + final UrlPathHelper urlPathHelper = new UrlPathHelper(); + urlPathHelper.setRemoveSemicolonContent(false); + + configurer.setUrlPathHelper(urlPathHelper); + } } diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java new file mode 100644 index 0000000000..8228eafd5c --- /dev/null +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/CompanyController.java @@ -0,0 +1,56 @@ +package com.baeldung.web.controller; + +import com.baeldung.model.Company; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.ui.ModelMap; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.ModelAndView; + +import java.util.HashMap; +import java.util.Map; + +@Controller +public class CompanyController { + + Map companyMap = new HashMap<>(); + + @RequestMapping(value = "/company", method = RequestMethod.GET) + public ModelAndView showForm() { + return new ModelAndView("companyHome", "company", new Company()); + } + + @RequestMapping(value = "/company/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) + public @ResponseBody Company getCompanyById(@PathVariable final long Id) { + return companyMap.get(Id); + } + + @RequestMapping(value = "/addCompany", method = RequestMethod.POST) + public String submit(@ModelAttribute("company") final Company company, final BindingResult result, final ModelMap model) { + if (result.hasErrors()) { + return "error"; + } + model.addAttribute("name", company.getName()); + model.addAttribute("id", company.getId()); + + companyMap.put(company.getId(), company); + + return "companyView"; + } + + @RequestMapping(value = "/companyEmployee/{company}/employeeData/{employee}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getEmployeeDataFromCompany(@MatrixVariable(pathVar = "employee") final Map matrixVars) { + return new ResponseEntity<>(matrixVars, HttpStatus.OK); + } + + @RequestMapping(value = "/companyData/{company}/employeeData/{employee}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getCompanyName(@MatrixVariable(value = "name", pathVar = "company") final String name) { + final Map result = new HashMap(); + result.put("name", name); + return new ResponseEntity<>(result, HttpStatus.OK); + } +} diff --git a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java b/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java index 2166c00873..fd5fa6bc27 100644 --- a/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java +++ b/spring-mvc-java/src/main/java/com/baeldung/web/controller/EmployeeController.java @@ -1,35 +1,40 @@ package com.baeldung.web.controller; -import java.util.HashMap; -import java.util.Map; - +import com.baeldung.model.Employee; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.ControllerAdvice; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; -import com.baeldung.model.Employee; +import java.util.*; +@SessionAttributes("employees") @Controller @ControllerAdvice public class EmployeeController { Map employeeMap = new HashMap<>(); + @ModelAttribute("employees") + public void initEmployees() { + employeeMap.put(1L, new Employee(1L, "John", "223334411", "rh")); + employeeMap.put(2L, new Employee(2L, "Peter", "22001543", "informatics")); + employeeMap.put(3L, new Employee(3L, "Mike", "223334411", "admin")); + } + @RequestMapping(value = "/employee", method = RequestMethod.GET) public ModelAndView showForm() { return new ModelAndView("employeeHome", "employee", new Employee()); } - @RequestMapping(value = "/employee/{Id}", produces = { "application/json", "application/xml" }, method = RequestMethod.GET) - public @ResponseBody Employee getEmployeeById(@PathVariable final long Id) { + @RequestMapping(value = "/employee/{Id}", produces = {"application/json", "application/xml"}, method = RequestMethod.GET) + public + @ResponseBody + Employee getEmployeeById(@PathVariable final long Id) { return employeeMap.get(Id); } @@ -40,6 +45,7 @@ public class EmployeeController { } model.addAttribute("name", employee.getName()); model.addAttribute("contactNumber", employee.getContactNumber()); + model.addAttribute("workingArea", employee.getWorkingArea()); model.addAttribute("id", employee.getId()); employeeMap.put(employee.getId(), employee); @@ -52,4 +58,53 @@ public class EmployeeController { model.addAttribute("msg", "Welcome to the Netherlands!"); } + @RequestMapping(value = "/employees/{name}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getEmployeeByNameAndBeginContactNumber(@PathVariable final String name, @MatrixVariable final String beginContactNumber) { + final List employeesList = new ArrayList(); + for (final Map.Entry employeeEntry : employeeMap.entrySet()) { + final Employee employee = employeeEntry.getValue(); + if (employee.getName().equalsIgnoreCase(name) && employee.getContactNumber().startsWith(beginContactNumber)) { + employeesList.add(employee); + } + } + return new ResponseEntity<>(employeesList, HttpStatus.OK); + } + + @RequestMapping(value = "/employeesContacts/{contactNumber}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getEmployeeBycontactNumber(@MatrixVariable(required = true) final String contactNumber) { + final List employeesList = new ArrayList(); + for (final Map.Entry employeeEntry : employeeMap.entrySet()) { + final Employee employee = employeeEntry.getValue(); + if (employee.getContactNumber().equalsIgnoreCase(contactNumber)) { + employeesList.add(employee); + } + } + return new ResponseEntity<>(employeesList, HttpStatus.OK); + } + + @RequestMapping(value = "employeeData/{employee}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getEmployeeData(@MatrixVariable final Map matrixVars) { + return new ResponseEntity<>(matrixVars, HttpStatus.OK); + } + + @RequestMapping(value = "employeeArea/{workingArea}", method = RequestMethod.GET) + @ResponseBody + public ResponseEntity> getEmployeeByWorkingArea(@MatrixVariable final Map> matrixVars) { + final List employeesList = new ArrayList(); + final LinkedList workingArea = matrixVars.get("workingArea"); + for (final Map.Entry employeeEntry : employeeMap.entrySet()) { + final Employee employee = employeeEntry.getValue(); + for (final String area : workingArea) { + if (employee.getWorkingArea().equalsIgnoreCase(area)) { + employeesList.add(employee); + break; + } + } + } + return new ResponseEntity<>(employeesList, HttpStatus.OK); + } + } diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/companyHome.jsp b/spring-mvc-java/src/main/webapp/WEB-INF/view/companyHome.jsp new file mode 100644 index 0000000000..38ef8d12ee --- /dev/null +++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/companyHome.jsp @@ -0,0 +1,31 @@ +<%@ page language="java" contentType="text/html; charset=ISO-8859-1" + pageEncoding="ISO-8859-1" %> +<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %> + + + + Form Example - Register a Company + + +

    Welcome, Enter The Company Details

    + + +
Name :
+ + + + + + + + + + + +
Name
Id
+ + + + + \ No newline at end of file diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/companyView.jsp b/spring-mvc-java/src/main/webapp/WEB-INF/view/companyView.jsp new file mode 100644 index 0000000000..8f34059b0a --- /dev/null +++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/companyView.jsp @@ -0,0 +1,20 @@ +<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> + + + Spring MVC Form Handling + + + +

Submitted Company Information

+ + + + + + + + + +
Name :${name}
ID :${id}
+ + \ No newline at end of file diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeHome.jsp b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeHome.jsp index c000bea39f..8a32fd12b6 100644 --- a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeHome.jsp +++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeHome.jsp @@ -22,6 +22,10 @@ Contact Number + + Working Area + + diff --git a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp index 9a9b879a35..627a9d9ddb 100644 --- a/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp +++ b/spring-mvc-java/src/main/webapp/WEB-INF/view/employeeView.jsp @@ -20,6 +20,10 @@ Contact Number : ${contactNumber} + + Working Area : + ${workingArea} + \ No newline at end of file From 22cebf3b39eca1eb5b0d8fdad29824ad5aea8c4f Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 17 Jun 2016 13:52:14 +0200 Subject: [PATCH 078/283] cleanup --- spring-security-rest-digest-auth/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/spring-security-rest-digest-auth/pom.xml b/spring-security-rest-digest-auth/pom.xml index 406c52e7e1..bfb4a7223a 100644 --- a/spring-security-rest-digest-auth/pom.xml +++ b/spring-security-rest-digest-auth/pom.xml @@ -83,6 +83,12 @@ ${org.springframework.version} + + org.springframework + spring-web + ${org.springframework.version} + + From b72f3199831a0bc09c275f1eec0839822df0c2b5 Mon Sep 17 00:00:00 2001 From: DOHA Date: Fri, 17 Jun 2016 13:52:46 +0200 Subject: [PATCH 079/283] httpclient digest examples --- .../org/baeldung/httpclient/SandboxTest.java | 64 ++++++++++++++++++- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java b/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java index 23f3c6ac76..eb3084f941 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java @@ -11,15 +11,18 @@ import org.apache.http.auth.MalformedChallengeException; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.AuthCache; import org.apache.http.client.ClientProtocolException; +import org.apache.http.client.CookieStore; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.impl.auth.DigestScheme; import org.apache.http.impl.client.BasicAuthCache; +import org.apache.http.impl.client.BasicCookieStore; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; +import org.apache.http.impl.cookie.BasicClientCookie; import org.apache.http.util.EntityUtils; import org.junit.Test; @@ -33,10 +36,17 @@ public class SandboxTest { final CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials("user", "passwd")); + // This endpoint need fake cookie to work properly + final CookieStore cookieStore = new BasicCookieStore(); + final BasicClientCookie cookie = new BasicClientCookie("fake", "fake_value"); + cookie.setDomain("httpbin.org"); + cookie.setPath("/"); + cookieStore.addCookie(cookie); + // We need a first run to get a 401 to seed the digest auth // Make a client using those creds - final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); + final CloseableHttpClient client = HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultCredentialsProvider(credsProvider).build(); // And make a call to the URL we are after final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd"); @@ -60,7 +70,7 @@ public class SandboxTest { // Need an auth cache to use the new digest we made final AuthCache authCache = new BasicAuthCache(); authCache.put(targetHost, digest); - + // Add the authCache and thus solved digest to the context context.setAuthCache(authCache); @@ -81,6 +91,56 @@ public class SandboxTest { responseGood.close(); } } + client.close(); + } + // This test needs module spring-security-rest-digest-auth to be running + @Test + public final void whenWeKnowDigestParameters_thenNo401Status() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { + final HttpHost targetHost = new HttpHost("localhost", 8080, "http"); + + final CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user1", "user1Pass")); + + final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); + + final HttpGet httpget = new HttpGet("http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"); + + final HttpClientContext context = HttpClientContext.create(); + // == make it preemptive + final AuthCache authCache = new BasicAuthCache(); + final DigestScheme digestAuth = new DigestScheme(); + digestAuth.overrideParamter("realm", "Custom Realm Name"); + digestAuth.overrideParamter("nonce", "nonce value goes here"); + authCache.put(targetHost, digestAuth); + context.setAuthCache(authCache); + // == end + System.out.println("Executing The Request knowing the digest parameters ==== "); + final HttpResponse authResponse = client.execute(targetHost, httpget, context); + System.out.println(authResponse.toString()); + client.close(); + } + + // This test needs module spring-security-rest-digest-auth to be running + @Test + public final void whenDoNotKnowParameters_thenOnlyOne401() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { + final HttpClientContext context = HttpClientContext.create(); + final HttpHost targetHost = new HttpHost("localhost", 8080, "http"); + final CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user1", "user1Pass")); + final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); + + final HttpGet httpget = new HttpGet("http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"); + System.out.println("Executing The Request NOT knowing the digest parameters ==== "); + final HttpResponse tempResponse = client.execute(targetHost, httpget, context); + System.out.println(tempResponse.toString()); + + for (int i = 0; i < 3; i++) { + System.out.println("No more Challenges or 401"); + final CloseableHttpResponse authResponse = client.execute(targetHost, httpget, context); + System.out.println(authResponse.toString()); + authResponse.close(); + } + client.close(); } } From 604e79d4264b2170716205145693bbfe94be1ed6 Mon Sep 17 00:00:00 2001 From: DOHA Date: Sat, 18 Jun 2016 00:52:28 +0200 Subject: [PATCH 080/283] modify httpclient digest test --- .../org/baeldung/httpclient/SandboxTest.java | 65 +++++++++++++++---- 1 file changed, 53 insertions(+), 12 deletions(-) diff --git a/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java b/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java index eb3084f941..514611d1f9 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java @@ -1,5 +1,7 @@ package org.baeldung.httpclient; +import static org.junit.Assert.assertEquals; + import java.io.IOException; import org.apache.http.Header; @@ -24,29 +26,25 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.cookie.BasicClientCookie; import org.apache.http.util.EntityUtils; +import org.junit.Ignore; import org.junit.Test; public class SandboxTest { + // original example + @Ignore @Test - public final void whenInterestingDigestAuthScenario_then200OK() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { + public final void whenInterestingDigestAuthScenario_then401UnAuthorized() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { final HttpHost targetHost = new HttpHost("httpbin.org", 80, "http"); // set up the credentials to run agains the server final CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials("user", "passwd")); - // This endpoint need fake cookie to work properly - final CookieStore cookieStore = new BasicCookieStore(); - final BasicClientCookie cookie = new BasicClientCookie("fake", "fake_value"); - cookie.setDomain("httpbin.org"); - cookie.setPath("/"); - cookieStore.addCookie(cookie); - // We need a first run to get a 401 to seed the digest auth // Make a client using those creds - final CloseableHttpClient client = HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultCredentialsProvider(credsProvider).build(); + final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); // And make a call to the URL we are after final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd"); @@ -91,6 +89,49 @@ public class SandboxTest { responseGood.close(); } } + } + + @Test + public final void whenInterestingDigestAuthScenario_then200OK() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { + final HttpHost targetHost = new HttpHost("httpbin.org", 80, "http"); + + // set up the credentials to run agains the server + final CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials("user", "passwd")); + + // This endpoint need fake cookie to work properly + final CookieStore cookieStore = new BasicCookieStore(); + final BasicClientCookie cookie = new BasicClientCookie("fake", "fake_value"); + cookie.setDomain("httpbin.org"); + cookie.setPath("/"); + cookieStore.addCookie(cookie); + + // Make a client using those creds + final CloseableHttpClient client = HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultCredentialsProvider(credsProvider).build(); + + // And make a call to the URL we are after + final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd"); + + // Create a context to use + final HttpClientContext context = HttpClientContext.create(); + + // Get a response from the sever (401 implicitly) + final HttpResponse authResponse = client.execute(targetHost, httpget, context); + assertEquals(200, authResponse.getStatusLine().getStatusCode()); + + // HttpClient will use cached digest parameters for future requests + System.out.println("Executing request " + httpget.getRequestLine() + " to target " + targetHost); + + for (int i = 0; i < 3; i++) { + final CloseableHttpResponse responseGood = client.execute(targetHost, httpget, context); + + try { + System.out.println("----------------------------------------"); + assertEquals(200, responseGood.getStatusLine().getStatusCode()); + } finally { + responseGood.close(); + } + } client.close(); } @@ -117,7 +158,7 @@ public class SandboxTest { // == end System.out.println("Executing The Request knowing the digest parameters ==== "); final HttpResponse authResponse = client.execute(targetHost, httpget, context); - System.out.println(authResponse.toString()); + assertEquals(200, authResponse.getStatusLine().getStatusCode()); client.close(); } @@ -133,12 +174,12 @@ public class SandboxTest { final HttpGet httpget = new HttpGet("http://localhost:8080/spring-security-rest-digest-auth/api/foos/1"); System.out.println("Executing The Request NOT knowing the digest parameters ==== "); final HttpResponse tempResponse = client.execute(targetHost, httpget, context); - System.out.println(tempResponse.toString()); + assertEquals(200, tempResponse.getStatusLine().getStatusCode()); for (int i = 0; i < 3; i++) { System.out.println("No more Challenges or 401"); final CloseableHttpResponse authResponse = client.execute(targetHost, httpget, context); - System.out.println(authResponse.toString()); + assertEquals(200, authResponse.getStatusLine().getStatusCode()); authResponse.close(); } client.close(); From 9a915901af244200f119a1f4b36bb4b743c4be06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 18 Jun 2016 19:22:30 +0200 Subject: [PATCH 081/283] Add mock-comparisons module (#453) * Add new module for mocks comparison. * Add sources for testing. * Changes on testCase. * Enter some tests for mockito. * More tests for Mockito. * Even more tests. * Add the rest of the mocking libraries. * Javadoc on test. * Test bare bones for EasyMock. * Fist kind of test and setup. * Add tests using EasyMock with a change on LoginService. * Create LoginControllerTest.java * Test setup * [JMockit] No method called test. * [JMockit] Two methods called test. * [JMockit] One method called test. * [JMockit] Exception mock test * [JMockit] Mocked object to pass around test. * [JMockit] Custom matcher test. * [JMockit] Partial mocking test. * [JMockit] Fix with IDE. * Not stubs. Mocks. MOCKS!!! * Remove unnecesary import. --- mock-comparisons/README.md | 7 + mock-comparisons/pom.xml | 105 +++++++++++++ .../mocks/testCase/LoginController.java | 29 ++++ .../org/baeldung/mocks/testCase/LoginDao.java | 9 ++ .../baeldung/mocks/testCase/LoginService.java | 33 ++++ .../org/baeldung/mocks/testCase/UserForm.java | 15 ++ .../mocks/easymock/LoginControllerTest.java | 147 +++++++++++++++++ .../mocks/jmockit/LoginControllerTest.java | 148 ++++++++++++++++++ .../mocks/mockito/LoginControllerTest.java | 129 +++++++++++++++ pom.xml | 1 + 10 files changed, 623 insertions(+) create mode 100644 mock-comparisons/README.md create mode 100644 mock-comparisons/pom.xml create mode 100644 mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java create mode 100644 mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java create mode 100644 mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java create mode 100644 mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java create mode 100644 mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java create mode 100644 mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java create mode 100644 mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java diff --git a/mock-comparisons/README.md b/mock-comparisons/README.md new file mode 100644 index 0000000000..7795487b77 --- /dev/null +++ b/mock-comparisons/README.md @@ -0,0 +1,7 @@ +========= + +## Mock comparison realated tutorials + + +### Relevant Articles: +- [Mockito vs EasyMock vs JMockit](http://www.baeldung.com/mockito-vs-easymock-vs-jmockit) diff --git a/mock-comparisons/pom.xml b/mock-comparisons/pom.xml new file mode 100644 index 0000000000..c7a6dcb09d --- /dev/null +++ b/mock-comparisons/pom.xml @@ -0,0 +1,105 @@ + + 4.0.0 + org.baeldung + mock-comparisons + 0.1-SNAPSHOT + + mockito + + + + + + + + + + + junit + junit + ${junit.version} + test + + + + org.mockito + mockito-core + ${mockito.version} + test + + + + org.easymock + easymock + ${easymock.version} + test + + + + org.jmockit + jmockit + ${jmockit.version} + test + + + + + + mock-comparisons + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.7 + 1.7 + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + + + + + + + + + + + 4.12 + 1.10.19 + 3.4 + 1.24 + + + 3.3 + 2.6 + 2.18.1 + 2.7 + 1.4.14 + + + + \ No newline at end of file diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java new file mode 100644 index 0000000000..2e25332db8 --- /dev/null +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java @@ -0,0 +1,29 @@ +package org.baeldung.mocks.testCase; + +public class LoginController { + + public LoginService loginService; + + public String login(UserForm userForm){ + if(null == userForm){ + return "ERROR"; + }else{ + boolean logged; + + try { + logged = loginService.login(userForm); + } catch (Exception e) { + return "ERROR"; + } + + if(logged){ + loginService.setCurrentUser(userForm.getUsername()); + return "OK"; + }else{ + return "KO"; + } + } + } + + // standard setters and getters +} diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java new file mode 100644 index 0000000000..4641fc1889 --- /dev/null +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java @@ -0,0 +1,9 @@ +package org.baeldung.mocks.testCase; + +public class LoginDao { + + public int login(UserForm userForm){ + //actual call to a third party library + return 0; + } +} diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java new file mode 100644 index 0000000000..2a20159393 --- /dev/null +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java @@ -0,0 +1,33 @@ +package org.baeldung.mocks.testCase; + +public class LoginService { + + private LoginDao loginDao; + + private String currentUser; + + public boolean login(UserForm userForm) { + assert null != userForm; + + int loginResults = loginDao.login(userForm); + + switch (loginResults){ + case 1: + return true; + default: + return false; + } + } + + public void setCurrentUser(String username) { + if(null != username){ + this.currentUser = username; + } + } + + public void setLoginDao(LoginDao loginDao) { + this.loginDao = loginDao; + } + + // standard setters and getters +} diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java new file mode 100644 index 0000000000..d6ee444909 --- /dev/null +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java @@ -0,0 +1,15 @@ +package org.baeldung.mocks.testCase; + +public class UserForm { + + // public access modifiers as only for testing + + public String password; + + public String username; + + public String getUsername(){ + return username; + } + +} diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java new file mode 100644 index 0000000000..b80c28804a --- /dev/null +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java @@ -0,0 +1,147 @@ +package org.baeldung.mocks.easymock; + +import org.baeldung.mocks.testCase.LoginController; +import org.baeldung.mocks.testCase.LoginDao; +import org.baeldung.mocks.testCase.LoginService; +import org.baeldung.mocks.testCase.UserForm; +import org.easymock.*; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + *

Test for LoginController using EasyMock.

+ * Created by Alvaro on 12/06/2016. + */ +@RunWith(EasyMockRunner.class) +public class LoginControllerTest { + + @Mock + private LoginDao loginDao; + + @Mock + private LoginService loginService; + + @TestSubject + private LoginController loginController = new LoginController(); + + @Test + public void assertThatNoMethodHasBeenCalled() { + EasyMock.replay(loginService); + loginController.login(null); + + // no method called + EasyMock.verify(loginService); + } + + @Test + public void assertTwoMethodsHaveBeenCalled() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + EasyMock.expect(loginService.login(userForm)).andReturn(true); + loginService.setCurrentUser("foo"); + EasyMock.replay(loginService); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + EasyMock.verify(loginService); + } + + @Test + public void assertOnlyOneMethodHasBeenCalled() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + EasyMock.expect(loginService.login(userForm)).andReturn(false); + EasyMock.replay(loginService); + + String login = loginController.login(userForm); + + Assert.assertEquals("KO", login); + EasyMock.verify(loginService); + } + + @Test + public void mockExceptionThrowing() { + UserForm userForm = new UserForm(); + EasyMock.expect(loginService.login(userForm)).andThrow(new IllegalArgumentException()); + EasyMock.replay(loginService); + + String login = loginController.login(userForm); + + Assert.assertEquals("ERROR", login); + EasyMock.verify(loginService); + } + + @Test + public void mockAnObjectToPassAround() { + UserForm userForm = EasyMock.mock(UserForm.class); + EasyMock.expect(userForm.getUsername()).andReturn("foo"); + EasyMock.expect(loginService.login(userForm)).andReturn(true); + loginService.setCurrentUser("foo"); + EasyMock.replay(userForm); + EasyMock.replay(loginService); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + EasyMock.verify(userForm); + EasyMock.verify(loginService); + } + + @Test + public void argumentMatching() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // default matcher + EasyMock.expect(loginService.login(EasyMock.isA(UserForm.class))).andReturn(true); + // complex matcher + loginService.setCurrentUser(specificArgumentMatching("foo")); + EasyMock.replay(loginService); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + EasyMock.verify(loginService); + } + + private static String specificArgumentMatching(final String expected) { + EasyMock.reportMatcher(new IArgumentMatcher() { + @Override + public boolean matches(Object argument) { + return argument instanceof String && ((String) argument).startsWith(expected); + } + + @Override + public void appendTo(StringBuffer buffer) { + //NOOP + } + }); + return null; + } + + @Test + public void partialMocking() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // use partial mock + LoginService loginServicePartial = EasyMock.partialMockBuilder(LoginService.class). + addMockedMethod("setCurrentUser").createMock(); + loginServicePartial.setCurrentUser("foo"); + // let service's login use implementation so let's mock DAO call + EasyMock.expect(loginDao.login(userForm)).andReturn(1); + + loginServicePartial.setLoginDao(loginDao); + loginController.loginService = loginServicePartial; + + EasyMock.replay(loginDao); + EasyMock.replay(loginServicePartial); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + // verify mocked call + EasyMock.verify(loginServicePartial); + EasyMock.verify(loginDao); + } +} diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java new file mode 100644 index 0000000000..d1c502ce55 --- /dev/null +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -0,0 +1,148 @@ +package org.baeldung.mocks.jmockit; + +import mockit.*; +import mockit.integration.junit4.JMockit; +import org.baeldung.mocks.testCase.LoginController; +import org.baeldung.mocks.testCase.LoginDao; +import org.baeldung.mocks.testCase.LoginService; +import org.baeldung.mocks.testCase.UserForm; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + *

Test for LoginController using JMockit.

+ * Created by Alvaro on 12/06/2016. + */ +@RunWith(JMockit.class) +public class LoginControllerTest { + + @Injectable + private LoginDao loginDao; + + @Injectable + private LoginService loginService; + + @Tested + private LoginController loginController; + + @Test + public void assertThatNoMethodHasBeenCalled() { + loginController.login(null); + // no method called + new FullVerifications(loginService) {}; + } + + @Test + public void assertTwoMethodsHaveBeenCalled() { + final UserForm userForm = new UserForm(); + userForm.username = "foo"; + new Expectations() {{ + loginService.login(userForm); result = true; + loginService.setCurrentUser("foo"); + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + new FullVerifications(loginService) {}; + } + + @Test + public void assertOnlyOneMethodHasBeenCalled() { + final UserForm userForm = new UserForm(); + userForm.username = "foo"; + new Expectations() {{ + loginService.login(userForm); result = false; + // no expectation for setCurrentUser + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("KO", login); + new FullVerifications(loginService) {}; + } + + @Test + public void mockExceptionThrowing() { + final UserForm userForm = new UserForm(); + new Expectations() {{ + loginService.login(userForm); result = new IllegalArgumentException(); + // no expectation for setCurrentUser + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("ERROR", login); + new FullVerifications(loginService) {}; + } + + @Test + public void mockAnObjectToPassAround(@Mocked final UserForm userForm) { + new Expectations() {{ + userForm.getUsername(); result = "foo"; + loginService.login(userForm); result = true; + loginService.setCurrentUser("foo"); + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + new FullVerifications(loginService) {}; + new FullVerifications(userForm) {}; + } + + @Test + public void argumentMatching() { + final UserForm userForm = new UserForm(); + userForm.username = "foo"; + // default matcher + new Expectations() {{ + loginService.login((UserForm) any); + result = true; + // complex matcher + loginService.setCurrentUser(withArgThat(new BaseMatcher() { + @Override + public boolean matches(Object item) { + return item instanceof String && ((String) item).startsWith("foo"); + } + + @Override + public void describeTo(Description description) { + //NOOP + } + })); + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + new FullVerifications(loginService) {}; + } + + @Test + public void partialMocking() { + // use partial mock + final LoginService partialLoginService = new LoginService(); + partialLoginService.setLoginDao(loginDao); + loginController.loginService = partialLoginService; + + final UserForm userForm = new UserForm(); + userForm.username = "foo"; + // let service's login use implementation so let's mock DAO call + new Expectations() {{ + loginDao.login(userForm); result = 1; + // no expectation for loginService.login + partialLoginService.setCurrentUser("foo"); + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + // verify mocked call + new FullVerifications(partialLoginService) {}; + new FullVerifications(loginDao) {}; + } +} diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java new file mode 100644 index 0000000000..841dd493e6 --- /dev/null +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java @@ -0,0 +1,129 @@ +package org.baeldung.mocks.mockito; + +import org.baeldung.mocks.testCase.LoginController; +import org.baeldung.mocks.testCase.LoginDao; +import org.baeldung.mocks.testCase.LoginService; +import org.baeldung.mocks.testCase.UserForm; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.*; + +/** + *

Test for LoginController using Mockito.

+ * Created by Alvaro on 12/06/2016. + */ +public class LoginControllerTest { + + @Mock + private LoginDao loginDao; + + @Spy + @InjectMocks + private LoginService spiedLoginService; + + @Mock + private LoginService loginService; + + @InjectMocks + private LoginController loginController; + + @Before + public void setUp() { + loginController = new LoginController(); + MockitoAnnotations.initMocks(this); + } + + @Test + public void assertThatNoMethodHasBeenCalled() { + loginController.login(null); + // no method called + Mockito.verifyZeroInteractions(loginService); + } + + @Test + public void assertTwoMethodsHaveBeenCalled() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + Mockito.when(loginService.login(userForm)).thenReturn(true); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + Mockito.verify(loginService).login(userForm); + Mockito.verify(loginService).setCurrentUser("foo"); + } + + @Test + public void assertOnlyOneMethodHasBeenCalled() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + Mockito.when(loginService.login(userForm)).thenReturn(false); + + String login = loginController.login(userForm); + + Assert.assertEquals("KO", login); + Mockito.verify(loginService).login(userForm); + Mockito.verifyNoMoreInteractions(loginService); + } + + @Test + public void mockExceptionThrowing() { + UserForm userForm = new UserForm(); + Mockito.when(loginService.login(userForm)).thenThrow(IllegalArgumentException.class); + + String login = loginController.login(userForm); + + Assert.assertEquals("ERROR", login); + Mockito.verify(loginService).login(userForm); + Mockito.verifyZeroInteractions(loginService); + } + + @Test + public void mockAnObjectToPassAround() { + UserForm userForm = Mockito.when(Mockito.mock(UserForm.class).getUsername()).thenReturn("foo").getMock(); + Mockito.when(loginService.login(userForm)).thenReturn(true); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + Mockito.verify(loginService).login(userForm); + Mockito.verify(loginService).setCurrentUser("foo"); + } + + @Test + public void argumentMatching() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // default matcher + Mockito.when(loginService.login(Mockito.any(UserForm.class))).thenReturn(true); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + Mockito.verify(loginService).login(userForm); + // complex matcher + Mockito.verify(loginService).setCurrentUser(Mockito.argThat(new ArgumentMatcher() { + @Override + public boolean matches(Object argument) { + return argument instanceof String && ((String) argument).startsWith("foo"); + } + })); + } + + @Test + public void partialMocking() { + // use partial mock + loginController.loginService = spiedLoginService; + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // let service's login use implementation so let's mock DAO call + Mockito.when(loginDao.login(userForm)).thenReturn(1); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + // verify mocked call + Mockito.verify(spiedLoginService).setCurrentUser("foo"); + } +} diff --git a/pom.xml b/pom.xml index 85861685ba..f16861cc68 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ jooq-spring json-path mockito + mock-comparisons jee7schedule querydsl From d9223b24fbb1709a9eb20545e2a67cf43ccd5563 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sat, 18 Jun 2016 20:21:17 +0200 Subject: [PATCH 082/283] Refactor mock-comparisons --- mock-comparisons/pom.xml | 47 +++++------------ .../mocks/testCase/LoginController.java | 10 ++-- .../org/baeldung/mocks/testCase/LoginDao.java | 2 +- .../baeldung/mocks/testCase/LoginService.java | 4 +- .../org/baeldung/mocks/testCase/UserForm.java | 2 +- .../mocks/easymock/LoginControllerTest.java | 6 +-- .../mocks/jmockit/LoginControllerTest.java | 51 +++++++++++-------- .../mocks/mockito/LoginControllerTest.java | 4 -- 8 files changed, 54 insertions(+), 72 deletions(-) diff --git a/mock-comparisons/pom.xml b/mock-comparisons/pom.xml index c7a6dcb09d..97e24c61cd 100644 --- a/mock-comparisons/pom.xml +++ b/mock-comparisons/pom.xml @@ -7,14 +7,18 @@ mockito + + 4.12 + 1.10.19 + 3.4 + 1.24 + + + 3.3 + 2.18.1 + + - - - - - - - junit junit @@ -61,8 +65,8 @@ maven-compiler-plugin ${maven-compiler-plugin.version} - 1.7 - 1.7 + 1.8 + 1.8 @@ -76,30 +80,5 @@
- - - - - - - - - - - - - 4.12 - 1.10.19 - 3.4 - 1.24 - - - 3.3 - 2.6 - 2.18.1 - 2.7 - 1.4.14 - - \ No newline at end of file diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java index 2e25332db8..914b0034d2 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java @@ -4,10 +4,10 @@ public class LoginController { public LoginService loginService; - public String login(UserForm userForm){ - if(null == userForm){ + public String login(UserForm userForm) { + if (null == userForm) { return "ERROR"; - }else{ + } else { boolean logged; try { @@ -16,10 +16,10 @@ public class LoginController { return "ERROR"; } - if(logged){ + if (logged) { loginService.setCurrentUser(userForm.getUsername()); return "OK"; - }else{ + } else { return "KO"; } } diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java index 4641fc1889..2cbff6c9d4 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java @@ -2,7 +2,7 @@ package org.baeldung.mocks.testCase; public class LoginDao { - public int login(UserForm userForm){ + public int login(UserForm userForm) { //actual call to a third party library return 0; } diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java index 2a20159393..d6a31a8047 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java @@ -11,7 +11,7 @@ public class LoginService { int loginResults = loginDao.login(userForm); - switch (loginResults){ + switch (loginResults) { case 1: return true; default: @@ -20,7 +20,7 @@ public class LoginService { } public void setCurrentUser(String username) { - if(null != username){ + if (null != username) { this.currentUser = username; } } diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java index d6ee444909..14136d0f31 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java @@ -8,7 +8,7 @@ public class UserForm { public String username; - public String getUsername(){ + public String getUsername() { return username; } diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java index b80c28804a..25d2b91ede 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java @@ -9,10 +9,6 @@ import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; -/** - *

Test for LoginController using EasyMock.

- * Created by Alvaro on 12/06/2016. - */ @RunWith(EasyMockRunner.class) public class LoginControllerTest { @@ -133,7 +129,7 @@ public class LoginControllerTest { loginServicePartial.setLoginDao(loginDao); loginController.loginService = loginServicePartial; - + EasyMock.replay(loginDao); EasyMock.replay(loginServicePartial); diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index d1c502ce55..621342fed2 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -12,10 +12,6 @@ import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; -/** - *

Test for LoginController using JMockit.

- * Created by Alvaro on 12/06/2016. - */ @RunWith(JMockit.class) public class LoginControllerTest { @@ -32,7 +28,8 @@ public class LoginControllerTest { public void assertThatNoMethodHasBeenCalled() { loginController.login(null); // no method called - new FullVerifications(loginService) {}; + new FullVerifications(loginService) { + }; } @Test @@ -40,14 +37,16 @@ public class LoginControllerTest { final UserForm userForm = new UserForm(); userForm.username = "foo"; new Expectations() {{ - loginService.login(userForm); result = true; + loginService.login(userForm); + result = true; loginService.setCurrentUser("foo"); }}; String login = loginController.login(userForm); Assert.assertEquals("OK", login); - new FullVerifications(loginService) {}; + new FullVerifications(loginService) { + }; } @Test @@ -55,43 +54,51 @@ public class LoginControllerTest { final UserForm userForm = new UserForm(); userForm.username = "foo"; new Expectations() {{ - loginService.login(userForm); result = false; + loginService.login(userForm); + result = false; // no expectation for setCurrentUser }}; String login = loginController.login(userForm); Assert.assertEquals("KO", login); - new FullVerifications(loginService) {}; + new FullVerifications(loginService) { + }; } @Test public void mockExceptionThrowing() { final UserForm userForm = new UserForm(); new Expectations() {{ - loginService.login(userForm); result = new IllegalArgumentException(); + loginService.login(userForm); + result = new IllegalArgumentException(); // no expectation for setCurrentUser }}; String login = loginController.login(userForm); Assert.assertEquals("ERROR", login); - new FullVerifications(loginService) {}; + new FullVerifications(loginService) { + }; } @Test public void mockAnObjectToPassAround(@Mocked final UserForm userForm) { new Expectations() {{ - userForm.getUsername(); result = "foo"; - loginService.login(userForm); result = true; + userForm.getUsername(); + result = "foo"; + loginService.login(userForm); + result = true; loginService.setCurrentUser("foo"); }}; - + String login = loginController.login(userForm); Assert.assertEquals("OK", login); - new FullVerifications(loginService) {}; - new FullVerifications(userForm) {}; + new FullVerifications(loginService) { + }; + new FullVerifications(userForm) { + }; } @Test @@ -119,7 +126,8 @@ public class LoginControllerTest { String login = loginController.login(userForm); Assert.assertEquals("OK", login); - new FullVerifications(loginService) {}; + new FullVerifications(loginService) { + }; } @Test @@ -133,7 +141,8 @@ public class LoginControllerTest { userForm.username = "foo"; // let service's login use implementation so let's mock DAO call new Expectations() {{ - loginDao.login(userForm); result = 1; + loginDao.login(userForm); + result = 1; // no expectation for loginService.login partialLoginService.setCurrentUser("foo"); }}; @@ -142,7 +151,9 @@ public class LoginControllerTest { Assert.assertEquals("OK", login); // verify mocked call - new FullVerifications(partialLoginService) {}; - new FullVerifications(loginDao) {}; + new FullVerifications(partialLoginService) { + }; + new FullVerifications(loginDao) { + }; } } diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java index 841dd493e6..59b28a2cb4 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java @@ -9,10 +9,6 @@ import org.junit.Before; import org.junit.Test; import org.mockito.*; -/** - *

Test for LoginController using Mockito.

- * Created by Alvaro on 12/06/2016. - */ public class LoginControllerTest { @Mock From 85ad446ccfb81b6289be24f4795aedd22e813554 Mon Sep 17 00:00:00 2001 From: nguyennamthai Date: Sun, 19 Jun 2016 02:57:35 +0700 Subject: [PATCH 083/283] First commit of protocol buffers. (#452) --- spring-protobuf/pom.xml | 43 + .../com/baeldung/protobuf/Application.java | 68 + .../baeldung/protobuf/BaeldungTraining.java | 2719 +++++++++++++++++ .../baeldung/protobuf/CourseController.java | 19 + .../baeldung/protobuf/CourseRepository.java | 17 + .../src/main/resources/baeldung.proto | 30 + .../baeldung/protobuf/ApplicationTest.java | 76 + 7 files changed, 2972 insertions(+) create mode 100644 spring-protobuf/pom.xml create mode 100644 spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java create mode 100644 spring-protobuf/src/main/java/com/baeldung/protobuf/BaeldungTraining.java create mode 100644 spring-protobuf/src/main/java/com/baeldung/protobuf/CourseController.java create mode 100644 spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java create mode 100644 spring-protobuf/src/main/resources/baeldung.proto create mode 100644 spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java diff --git a/spring-protobuf/pom.xml b/spring-protobuf/pom.xml new file mode 100644 index 0000000000..28338f26c3 --- /dev/null +++ b/spring-protobuf/pom.xml @@ -0,0 +1,43 @@ + + 4.0.0 + com.baeldung + spring-protobuf + 0.1-SNAPSHOT + spring-protobuf + + + org.springframework.boot + spring-boot-starter-parent + 1.2.4.RELEASE + + + + + com.google.protobuf + protobuf-java + 3.0.0-beta-3 + + + com.googlecode.protobuf-java-format + protobuf-java-format + 1.4 + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java new file mode 100644 index 0000000000..38a49367a3 --- /dev/null +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java @@ -0,0 +1,68 @@ +package com.baeldung.protobuf; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter; +import org.springframework.web.client.RestTemplate; + +import com.baeldung.protobuf.BaeldungTraining.Course; +import com.baeldung.protobuf.BaeldungTraining.Student; +import com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber; +import com.baeldung.protobuf.BaeldungTraining.Student.PhoneType; + +@SpringBootApplication +public class Application { + @Bean + RestTemplate restTemplate(ProtobufHttpMessageConverter hmc) { + return new RestTemplate(Arrays.asList(hmc)); + } + + @Bean + ProtobufHttpMessageConverter protobufHttpMessageConverter() { + return new ProtobufHttpMessageConverter(); + } + + @Bean + public CourseRepository createDummyCourses() { + Map dummy = new HashMap<>(); + + Course course1 = Course.newBuilder().setId(1).setCourseName("REST with Spring").addAllStudent(createDummyStudents()).build(); + Course course2 = Course.newBuilder().setId(2).setCourseName("Learn Spring Security").addAllStudent(new ArrayList()).build(); + + dummy.put(course1.getId(), course1); + dummy.put(course2.getId(), course2); + + return new CourseRepository(dummy); + } + + private List createDummyStudents() { + List studentList = new ArrayList<>(); + + PhoneNumber phone1 = createPhone("123456", PhoneType.MOBILE); + Student student1 = createStudent(1, "John", "Doe", "john.doe@baeldung.com", Arrays.asList(phone1)); + + PhoneNumber phone2 = createPhone("234567", PhoneType.LANDLINE); + Student student2 = createStudent(2, "Richard", "Roe", "richard.roe@baeldung.com", Arrays.asList(phone2)); + + PhoneNumber phone3_1 = createPhone("345678", PhoneType.MOBILE); + PhoneNumber phone3_2 = createPhone("456789", PhoneType.LANDLINE); + Student student3 = createStudent(3, "Jane", "Doe", "jane.doe@baeldung.com", Arrays.asList(phone3_1, phone3_2)); + + studentList.addAll(Arrays.asList(student1, student2, student3)); + return studentList; + } + + private Student createStudent(int id, String firstName, String lastName, String email, List phones) { + return Student.newBuilder().setId(id).setFirstName(firstName).setLastName(lastName).setEmail(email).addAllPhone(phones).build(); + } + + private PhoneNumber createPhone(String number, PhoneType type) { + return PhoneNumber.newBuilder().setNumber(number).setType(type).build(); + } +} \ No newline at end of file diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/BaeldungTraining.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/BaeldungTraining.java new file mode 100644 index 0000000000..3869ebfaeb --- /dev/null +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/BaeldungTraining.java @@ -0,0 +1,2719 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: resources/baeldung.proto + +package com.baeldung.protobuf; + +public final class BaeldungTraining { + private BaeldungTraining() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface CourseOrBuilder extends + // @@protoc_insertion_point(interface_extends:baeldung.Course) + com.google.protobuf.MessageOrBuilder { + + /** + * optional int32 id = 1; + */ + int getId(); + + /** + * optional string course_name = 2; + */ + java.lang.String getCourseName(); + /** + * optional string course_name = 2; + */ + com.google.protobuf.ByteString + getCourseNameBytes(); + + /** + * repeated .baeldung.Student student = 3; + */ + java.util.List + getStudentList(); + /** + * repeated .baeldung.Student student = 3; + */ + com.baeldung.protobuf.BaeldungTraining.Student getStudent(int index); + /** + * repeated .baeldung.Student student = 3; + */ + int getStudentCount(); + /** + * repeated .baeldung.Student student = 3; + */ + java.util.List + getStudentOrBuilderList(); + /** + * repeated .baeldung.Student student = 3; + */ + com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder getStudentOrBuilder( + int index); + } + /** + * Protobuf type {@code baeldung.Course} + */ + public static final class Course extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:baeldung.Course) + CourseOrBuilder { + // Use Course.newBuilder() to construct. + private Course(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private Course() { + id_ = 0; + courseName_ = ""; + student_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); + } + private Course( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + int mutable_bitField0_ = 0; + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + case 8: { + + id_ = input.readInt32(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + courseName_ = s; + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + student_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + student_.add(input.readMessage(com.baeldung.protobuf.BaeldungTraining.Student.parser(), extensionRegistry)); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + student_ = java.util.Collections.unmodifiableList(student_); + } + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.baeldung.protobuf.BaeldungTraining.Course.class, com.baeldung.protobuf.BaeldungTraining.Course.Builder.class); + } + + private int bitField0_; + public static final int ID_FIELD_NUMBER = 1; + private int id_; + /** + * optional int32 id = 1; + */ + public int getId() { + return id_; + } + + public static final int COURSE_NAME_FIELD_NUMBER = 2; + private volatile java.lang.Object courseName_; + /** + * optional string course_name = 2; + */ + public java.lang.String getCourseName() { + java.lang.Object ref = courseName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + courseName_ = s; + return s; + } + } + /** + * optional string course_name = 2; + */ + public com.google.protobuf.ByteString + getCourseNameBytes() { + java.lang.Object ref = courseName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + courseName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int STUDENT_FIELD_NUMBER = 3; + private java.util.List student_; + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List getStudentList() { + return student_; + } + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List + getStudentOrBuilderList() { + return student_; + } + /** + * repeated .baeldung.Student student = 3; + */ + public int getStudentCount() { + return student_.size(); + } + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student getStudent(int index) { + return student_.get(index); + } + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder getStudentOrBuilder( + int index) { + return student_.get(index); + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(1, id_); + } + if (!getCourseNameBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, courseName_); + } + for (int i = 0; i < student_.size(); i++) { + output.writeMessage(3, student_.get(i)); + } + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, id_); + } + if (!getCourseNameBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, courseName_); + } + for (int i = 0; i < student_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, student_.get(i)); + } + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Course parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + public static com.baeldung.protobuf.BaeldungTraining.Course parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.baeldung.protobuf.BaeldungTraining.Course prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code baeldung.Course} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:baeldung.Course) + com.baeldung.protobuf.BaeldungTraining.CourseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.baeldung.protobuf.BaeldungTraining.Course.class, com.baeldung.protobuf.BaeldungTraining.Course.Builder.class); + } + + // Construct using com.baeldung.protobuf.BaeldungTraining.Course.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getStudentFieldBuilder(); + } + } + public Builder clear() { + super.clear(); + id_ = 0; + + courseName_ = ""; + + if (studentBuilder_ == null) { + student_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + } else { + studentBuilder_.clear(); + } + return this; + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_descriptor; + } + + public com.baeldung.protobuf.BaeldungTraining.Course getDefaultInstanceForType() { + return com.baeldung.protobuf.BaeldungTraining.Course.getDefaultInstance(); + } + + public com.baeldung.protobuf.BaeldungTraining.Course build() { + com.baeldung.protobuf.BaeldungTraining.Course result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public com.baeldung.protobuf.BaeldungTraining.Course buildPartial() { + com.baeldung.protobuf.BaeldungTraining.Course result = new com.baeldung.protobuf.BaeldungTraining.Course(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + result.id_ = id_; + result.courseName_ = courseName_; + if (studentBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004)) { + student_ = java.util.Collections.unmodifiableList(student_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.student_ = student_; + } else { + result.student_ = studentBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.baeldung.protobuf.BaeldungTraining.Course) { + return mergeFrom((com.baeldung.protobuf.BaeldungTraining.Course)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.baeldung.protobuf.BaeldungTraining.Course other) { + if (other == com.baeldung.protobuf.BaeldungTraining.Course.getDefaultInstance()) return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (!other.getCourseName().isEmpty()) { + courseName_ = other.courseName_; + onChanged(); + } + if (studentBuilder_ == null) { + if (!other.student_.isEmpty()) { + if (student_.isEmpty()) { + student_ = other.student_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureStudentIsMutable(); + student_.addAll(other.student_); + } + onChanged(); + } + } else { + if (!other.student_.isEmpty()) { + if (studentBuilder_.isEmpty()) { + studentBuilder_.dispose(); + studentBuilder_ = null; + student_ = other.student_; + bitField0_ = (bitField0_ & ~0x00000004); + studentBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getStudentFieldBuilder() : null; + } else { + studentBuilder_.addAllMessages(other.student_); + } + } + } + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.baeldung.protobuf.BaeldungTraining.Course parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.baeldung.protobuf.BaeldungTraining.Course) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int id_ ; + /** + * optional int32 id = 1; + */ + public int getId() { + return id_; + } + /** + * optional int32 id = 1; + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * optional int32 id = 1; + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private java.lang.Object courseName_ = ""; + /** + * optional string course_name = 2; + */ + public java.lang.String getCourseName() { + java.lang.Object ref = courseName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + courseName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string course_name = 2; + */ + public com.google.protobuf.ByteString + getCourseNameBytes() { + java.lang.Object ref = courseName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + courseName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string course_name = 2; + */ + public Builder setCourseName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + courseName_ = value; + onChanged(); + return this; + } + /** + * optional string course_name = 2; + */ + public Builder clearCourseName() { + + courseName_ = getDefaultInstance().getCourseName(); + onChanged(); + return this; + } + /** + * optional string course_name = 2; + */ + public Builder setCourseNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + courseName_ = value; + onChanged(); + return this; + } + + private java.util.List student_ = + java.util.Collections.emptyList(); + private void ensureStudentIsMutable() { + if (!((bitField0_ & 0x00000004) == 0x00000004)) { + student_ = new java.util.ArrayList(student_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.baeldung.protobuf.BaeldungTraining.Student, com.baeldung.protobuf.BaeldungTraining.Student.Builder, com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder> studentBuilder_; + + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List getStudentList() { + if (studentBuilder_ == null) { + return java.util.Collections.unmodifiableList(student_); + } else { + return studentBuilder_.getMessageList(); + } + } + /** + * repeated .baeldung.Student student = 3; + */ + public int getStudentCount() { + if (studentBuilder_ == null) { + return student_.size(); + } else { + return studentBuilder_.getCount(); + } + } + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student getStudent(int index) { + if (studentBuilder_ == null) { + return student_.get(index); + } else { + return studentBuilder_.getMessage(index); + } + } + /** + * repeated .baeldung.Student student = 3; + */ + public Builder setStudent( + int index, com.baeldung.protobuf.BaeldungTraining.Student value) { + if (studentBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureStudentIsMutable(); + student_.set(index, value); + onChanged(); + } else { + studentBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .baeldung.Student student = 3; + */ + public Builder setStudent( + int index, com.baeldung.protobuf.BaeldungTraining.Student.Builder builderForValue) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + student_.set(index, builderForValue.build()); + onChanged(); + } else { + studentBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addStudent(com.baeldung.protobuf.BaeldungTraining.Student value) { + if (studentBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureStudentIsMutable(); + student_.add(value); + onChanged(); + } else { + studentBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addStudent( + int index, com.baeldung.protobuf.BaeldungTraining.Student value) { + if (studentBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureStudentIsMutable(); + student_.add(index, value); + onChanged(); + } else { + studentBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addStudent( + com.baeldung.protobuf.BaeldungTraining.Student.Builder builderForValue) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + student_.add(builderForValue.build()); + onChanged(); + } else { + studentBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addStudent( + int index, com.baeldung.protobuf.BaeldungTraining.Student.Builder builderForValue) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + student_.add(index, builderForValue.build()); + onChanged(); + } else { + studentBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addAllStudent( + java.lang.Iterable values) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, student_); + onChanged(); + } else { + studentBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .baeldung.Student student = 3; + */ + public Builder clearStudent() { + if (studentBuilder_ == null) { + student_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + studentBuilder_.clear(); + } + return this; + } + /** + * repeated .baeldung.Student student = 3; + */ + public Builder removeStudent(int index) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + student_.remove(index); + onChanged(); + } else { + studentBuilder_.remove(index); + } + return this; + } + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.Builder getStudentBuilder( + int index) { + return getStudentFieldBuilder().getBuilder(index); + } + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder getStudentOrBuilder( + int index) { + if (studentBuilder_ == null) { + return student_.get(index); } else { + return studentBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List + getStudentOrBuilderList() { + if (studentBuilder_ != null) { + return studentBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(student_); + } + } + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.Builder addStudentBuilder() { + return getStudentFieldBuilder().addBuilder( + com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance()); + } + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.Builder addStudentBuilder( + int index) { + return getStudentFieldBuilder().addBuilder( + index, com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance()); + } + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List + getStudentBuilderList() { + return getStudentFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.baeldung.protobuf.BaeldungTraining.Student, com.baeldung.protobuf.BaeldungTraining.Student.Builder, com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder> + getStudentFieldBuilder() { + if (studentBuilder_ == null) { + studentBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.baeldung.protobuf.BaeldungTraining.Student, com.baeldung.protobuf.BaeldungTraining.Student.Builder, com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder>( + student_, + ((bitField0_ & 0x00000004) == 0x00000004), + getParentForChildren(), + isClean()); + student_ = null; + } + return studentBuilder_; + } + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + + // @@protoc_insertion_point(builder_scope:baeldung.Course) + } + + // @@protoc_insertion_point(class_scope:baeldung.Course) + private static final com.baeldung.protobuf.BaeldungTraining.Course DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.baeldung.protobuf.BaeldungTraining.Course(); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + public Course parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Course(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + public com.baeldung.protobuf.BaeldungTraining.Course getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface StudentOrBuilder extends + // @@protoc_insertion_point(interface_extends:baeldung.Student) + com.google.protobuf.MessageOrBuilder { + + /** + * optional int32 id = 1; + */ + int getId(); + + /** + * optional string first_name = 2; + */ + java.lang.String getFirstName(); + /** + * optional string first_name = 2; + */ + com.google.protobuf.ByteString + getFirstNameBytes(); + + /** + * optional string last_name = 3; + */ + java.lang.String getLastName(); + /** + * optional string last_name = 3; + */ + com.google.protobuf.ByteString + getLastNameBytes(); + + /** + * optional string email = 4; + */ + java.lang.String getEmail(); + /** + * optional string email = 4; + */ + com.google.protobuf.ByteString + getEmailBytes(); + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + java.util.List + getPhoneList(); + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getPhone(int index); + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + int getPhoneCount(); + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + java.util.List + getPhoneOrBuilderList(); + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder getPhoneOrBuilder( + int index); + } + /** + * Protobuf type {@code baeldung.Student} + */ + public static final class Student extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:baeldung.Student) + StudentOrBuilder { + // Use Student.newBuilder() to construct. + private Student(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private Student() { + id_ = 0; + firstName_ = ""; + lastName_ = ""; + email_ = ""; + phone_ = java.util.Collections.emptyList(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); + } + private Student( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + int mutable_bitField0_ = 0; + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + case 8: { + + id_ = input.readInt32(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + firstName_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + lastName_ = s; + break; + } + case 34: { + java.lang.String s = input.readStringRequireUtf8(); + + email_ = s; + break; + } + case 42: { + if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) { + phone_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000010; + } + phone_.add(input.readMessage(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.parser(), extensionRegistry)); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) { + phone_ = java.util.Collections.unmodifiableList(phone_); + } + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.baeldung.protobuf.BaeldungTraining.Student.class, com.baeldung.protobuf.BaeldungTraining.Student.Builder.class); + } + + /** + * Protobuf enum {@code baeldung.Student.PhoneType} + */ + public enum PhoneType + implements com.google.protobuf.ProtocolMessageEnum { + /** + * MOBILE = 0; + */ + MOBILE(0), + /** + * LANDLINE = 1; + */ + LANDLINE(1), + UNRECOGNIZED(-1), + ; + + /** + * MOBILE = 0; + */ + public static final int MOBILE_VALUE = 0; + /** + * LANDLINE = 1; + */ + public static final int LANDLINE_VALUE = 1; + + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + + /** + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static PhoneType valueOf(int value) { + return forNumber(value); + } + + public static PhoneType forNumber(int value) { + switch (value) { + case 0: return MOBILE; + case 1: return LANDLINE; + default: return null; + } + } + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + PhoneType> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + public PhoneType findValueByNumber(int number) { + return PhoneType.forNumber(number); + } + }; + + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + return getDescriptor().getValues().get(ordinal()); + } + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.Student.getDescriptor().getEnumTypes().get(0); + } + + private static final PhoneType[] VALUES = values(); + + public static PhoneType valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } + + private final int value; + + private PhoneType(int value) { + this.value = value; + } + + // @@protoc_insertion_point(enum_scope:baeldung.Student.PhoneType) + } + + public interface PhoneNumberOrBuilder extends + // @@protoc_insertion_point(interface_extends:baeldung.Student.PhoneNumber) + com.google.protobuf.MessageOrBuilder { + + /** + * optional string number = 1; + */ + java.lang.String getNumber(); + /** + * optional string number = 1; + */ + com.google.protobuf.ByteString + getNumberBytes(); + + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + int getTypeValue(); + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + com.baeldung.protobuf.BaeldungTraining.Student.PhoneType getType(); + } + /** + * Protobuf type {@code baeldung.Student.PhoneNumber} + */ + public static final class PhoneNumber extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:baeldung.Student.PhoneNumber) + PhoneNumberOrBuilder { + // Use PhoneNumber.newBuilder() to construct. + private PhoneNumber(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } + private PhoneNumber() { + number_ = ""; + type_ = 0; + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); + } + private PhoneNumber( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + int mutable_bitField0_ = 0; + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + number_ = s; + break; + } + case 16: { + int rawValue = input.readEnum(); + + type_ = rawValue; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.class, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder.class); + } + + public static final int NUMBER_FIELD_NUMBER = 1; + private volatile java.lang.Object number_; + /** + * optional string number = 1; + */ + public java.lang.String getNumber() { + java.lang.Object ref = number_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + number_ = s; + return s; + } + } + /** + * optional string number = 1; + */ + public com.google.protobuf.ByteString + getNumberBytes() { + java.lang.Object ref = number_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + number_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TYPE_FIELD_NUMBER = 2; + private int type_; + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public int getTypeValue() { + return type_; + } + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneType getType() { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneType result = com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.forNumber(type_); + return result == null ? com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getNumberBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, number_); + } + if (type_ != com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.MOBILE.getNumber()) { + output.writeEnum(2, type_); + } + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getNumberBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, number_); + } + if (type_ != com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.MOBILE.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, type_); + } + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code baeldung.Student.PhoneNumber} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:baeldung.Student.PhoneNumber) + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.class, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder.class); + } + + // Construct using com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + public Builder clear() { + super.clear(); + number_ = ""; + + type_ = 0; + + return this; + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_descriptor; + } + + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getDefaultInstanceForType() { + return com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance(); + } + + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber build() { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber buildPartial() { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber result = new com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber(this); + result.number_ = number_; + result.type_ = type_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber) { + return mergeFrom((com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber other) { + if (other == com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance()) return this; + if (!other.getNumber().isEmpty()) { + number_ = other.number_; + onChanged(); + } + if (other.type_ != 0) { + setTypeValue(other.getTypeValue()); + } + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object number_ = ""; + /** + * optional string number = 1; + */ + public java.lang.String getNumber() { + java.lang.Object ref = number_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + number_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string number = 1; + */ + public com.google.protobuf.ByteString + getNumberBytes() { + java.lang.Object ref = number_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + number_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string number = 1; + */ + public Builder setNumber( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + number_ = value; + onChanged(); + return this; + } + /** + * optional string number = 1; + */ + public Builder clearNumber() { + + number_ = getDefaultInstance().getNumber(); + onChanged(); + return this; + } + /** + * optional string number = 1; + */ + public Builder setNumberBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + number_ = value; + onChanged(); + return this; + } + + private int type_ = 0; + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public int getTypeValue() { + return type_; + } + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public Builder setTypeValue(int value) { + type_ = value; + onChanged(); + return this; + } + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneType getType() { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneType result = com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.forNumber(type_); + return result == null ? com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.UNRECOGNIZED : result; + } + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public Builder setType(com.baeldung.protobuf.BaeldungTraining.Student.PhoneType value) { + if (value == null) { + throw new NullPointerException(); + } + + type_ = value.getNumber(); + onChanged(); + return this; + } + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public Builder clearType() { + + type_ = 0; + onChanged(); + return this; + } + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + + // @@protoc_insertion_point(builder_scope:baeldung.Student.PhoneNumber) + } + + // @@protoc_insertion_point(class_scope:baeldung.Student.PhoneNumber) + private static final com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber(); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + public PhoneNumber parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new PhoneNumber(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int bitField0_; + public static final int ID_FIELD_NUMBER = 1; + private int id_; + /** + * optional int32 id = 1; + */ + public int getId() { + return id_; + } + + public static final int FIRST_NAME_FIELD_NUMBER = 2; + private volatile java.lang.Object firstName_; + /** + * optional string first_name = 2; + */ + public java.lang.String getFirstName() { + java.lang.Object ref = firstName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + firstName_ = s; + return s; + } + } + /** + * optional string first_name = 2; + */ + public com.google.protobuf.ByteString + getFirstNameBytes() { + java.lang.Object ref = firstName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + firstName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int LAST_NAME_FIELD_NUMBER = 3; + private volatile java.lang.Object lastName_; + /** + * optional string last_name = 3; + */ + public java.lang.String getLastName() { + java.lang.Object ref = lastName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + lastName_ = s; + return s; + } + } + /** + * optional string last_name = 3; + */ + public com.google.protobuf.ByteString + getLastNameBytes() { + java.lang.Object ref = lastName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + lastName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int EMAIL_FIELD_NUMBER = 4; + private volatile java.lang.Object email_; + /** + * optional string email = 4; + */ + public java.lang.String getEmail() { + java.lang.Object ref = email_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + email_ = s; + return s; + } + } + /** + * optional string email = 4; + */ + public com.google.protobuf.ByteString + getEmailBytes() { + java.lang.Object ref = email_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + email_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PHONE_FIELD_NUMBER = 5; + private java.util.List phone_; + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List getPhoneList() { + return phone_; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List + getPhoneOrBuilderList() { + return phone_; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public int getPhoneCount() { + return phone_.size(); + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getPhone(int index) { + return phone_.get(index); + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder getPhoneOrBuilder( + int index) { + return phone_.get(index); + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(1, id_); + } + if (!getFirstNameBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, firstName_); + } + if (!getLastNameBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, lastName_); + } + if (!getEmailBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, email_); + } + for (int i = 0; i < phone_.size(); i++) { + output.writeMessage(5, phone_.get(i)); + } + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, id_); + } + if (!getFirstNameBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, firstName_); + } + if (!getLastNameBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, lastName_); + } + if (!getEmailBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, email_); + } + for (int i = 0; i < phone_.size(); i++) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(5, phone_.get(i)); + } + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Student parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input); + } + public static com.baeldung.protobuf.BaeldungTraining.Student parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input); + } + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessage + .parseWithIOException(PARSER, input, extensionRegistry); + } + + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(com.baeldung.protobuf.BaeldungTraining.Student prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code baeldung.Student} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:baeldung.Student) + com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_fieldAccessorTable + .ensureFieldAccessorsInitialized( + com.baeldung.protobuf.BaeldungTraining.Student.class, com.baeldung.protobuf.BaeldungTraining.Student.Builder.class); + } + + // Construct using com.baeldung.protobuf.BaeldungTraining.Student.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getPhoneFieldBuilder(); + } + } + public Builder clear() { + super.clear(); + id_ = 0; + + firstName_ = ""; + + lastName_ = ""; + + email_ = ""; + + if (phoneBuilder_ == null) { + phone_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + } else { + phoneBuilder_.clear(); + } + return this; + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_descriptor; + } + + public com.baeldung.protobuf.BaeldungTraining.Student getDefaultInstanceForType() { + return com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance(); + } + + public com.baeldung.protobuf.BaeldungTraining.Student build() { + com.baeldung.protobuf.BaeldungTraining.Student result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public com.baeldung.protobuf.BaeldungTraining.Student buildPartial() { + com.baeldung.protobuf.BaeldungTraining.Student result = new com.baeldung.protobuf.BaeldungTraining.Student(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + result.id_ = id_; + result.firstName_ = firstName_; + result.lastName_ = lastName_; + result.email_ = email_; + if (phoneBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { + phone_ = java.util.Collections.unmodifiableList(phone_); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.phone_ = phone_; + } else { + result.phone_ = phoneBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.baeldung.protobuf.BaeldungTraining.Student) { + return mergeFrom((com.baeldung.protobuf.BaeldungTraining.Student)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.baeldung.protobuf.BaeldungTraining.Student other) { + if (other == com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance()) return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (!other.getFirstName().isEmpty()) { + firstName_ = other.firstName_; + onChanged(); + } + if (!other.getLastName().isEmpty()) { + lastName_ = other.lastName_; + onChanged(); + } + if (!other.getEmail().isEmpty()) { + email_ = other.email_; + onChanged(); + } + if (phoneBuilder_ == null) { + if (!other.phone_.isEmpty()) { + if (phone_.isEmpty()) { + phone_ = other.phone_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensurePhoneIsMutable(); + phone_.addAll(other.phone_); + } + onChanged(); + } + } else { + if (!other.phone_.isEmpty()) { + if (phoneBuilder_.isEmpty()) { + phoneBuilder_.dispose(); + phoneBuilder_ = null; + phone_ = other.phone_; + bitField0_ = (bitField0_ & ~0x00000010); + phoneBuilder_ = + com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? + getPhoneFieldBuilder() : null; + } else { + phoneBuilder_.addAllMessages(other.phone_); + } + } + } + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + com.baeldung.protobuf.BaeldungTraining.Student parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.baeldung.protobuf.BaeldungTraining.Student) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private int id_ ; + /** + * optional int32 id = 1; + */ + public int getId() { + return id_; + } + /** + * optional int32 id = 1; + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + /** + * optional int32 id = 1; + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private java.lang.Object firstName_ = ""; + /** + * optional string first_name = 2; + */ + public java.lang.String getFirstName() { + java.lang.Object ref = firstName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + firstName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string first_name = 2; + */ + public com.google.protobuf.ByteString + getFirstNameBytes() { + java.lang.Object ref = firstName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + firstName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string first_name = 2; + */ + public Builder setFirstName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + firstName_ = value; + onChanged(); + return this; + } + /** + * optional string first_name = 2; + */ + public Builder clearFirstName() { + + firstName_ = getDefaultInstance().getFirstName(); + onChanged(); + return this; + } + /** + * optional string first_name = 2; + */ + public Builder setFirstNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + firstName_ = value; + onChanged(); + return this; + } + + private java.lang.Object lastName_ = ""; + /** + * optional string last_name = 3; + */ + public java.lang.String getLastName() { + java.lang.Object ref = lastName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + lastName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string last_name = 3; + */ + public com.google.protobuf.ByteString + getLastNameBytes() { + java.lang.Object ref = lastName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + lastName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string last_name = 3; + */ + public Builder setLastName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + lastName_ = value; + onChanged(); + return this; + } + /** + * optional string last_name = 3; + */ + public Builder clearLastName() { + + lastName_ = getDefaultInstance().getLastName(); + onChanged(); + return this; + } + /** + * optional string last_name = 3; + */ + public Builder setLastNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + lastName_ = value; + onChanged(); + return this; + } + + private java.lang.Object email_ = ""; + /** + * optional string email = 4; + */ + public java.lang.String getEmail() { + java.lang.Object ref = email_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + email_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * optional string email = 4; + */ + public com.google.protobuf.ByteString + getEmailBytes() { + java.lang.Object ref = email_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + email_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * optional string email = 4; + */ + public Builder setEmail( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + email_ = value; + onChanged(); + return this; + } + /** + * optional string email = 4; + */ + public Builder clearEmail() { + + email_ = getDefaultInstance().getEmail(); + onChanged(); + return this; + } + /** + * optional string email = 4; + */ + public Builder setEmailBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + email_ = value; + onChanged(); + return this; + } + + private java.util.List phone_ = + java.util.Collections.emptyList(); + private void ensurePhoneIsMutable() { + if (!((bitField0_ & 0x00000010) == 0x00000010)) { + phone_ = new java.util.ArrayList(phone_); + bitField0_ |= 0x00000010; + } + } + + private com.google.protobuf.RepeatedFieldBuilder< + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder> phoneBuilder_; + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List getPhoneList() { + if (phoneBuilder_ == null) { + return java.util.Collections.unmodifiableList(phone_); + } else { + return phoneBuilder_.getMessageList(); + } + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public int getPhoneCount() { + if (phoneBuilder_ == null) { + return phone_.size(); + } else { + return phoneBuilder_.getCount(); + } + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getPhone(int index) { + if (phoneBuilder_ == null) { + return phone_.get(index); + } else { + return phoneBuilder_.getMessage(index); + } + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder setPhone( + int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber value) { + if (phoneBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePhoneIsMutable(); + phone_.set(index, value); + onChanged(); + } else { + phoneBuilder_.setMessage(index, value); + } + return this; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder setPhone( + int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder builderForValue) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + phone_.set(index, builderForValue.build()); + onChanged(); + } else { + phoneBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addPhone(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber value) { + if (phoneBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePhoneIsMutable(); + phone_.add(value); + onChanged(); + } else { + phoneBuilder_.addMessage(value); + } + return this; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addPhone( + int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber value) { + if (phoneBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePhoneIsMutable(); + phone_.add(index, value); + onChanged(); + } else { + phoneBuilder_.addMessage(index, value); + } + return this; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addPhone( + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder builderForValue) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + phone_.add(builderForValue.build()); + onChanged(); + } else { + phoneBuilder_.addMessage(builderForValue.build()); + } + return this; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addPhone( + int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder builderForValue) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + phone_.add(index, builderForValue.build()); + onChanged(); + } else { + phoneBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addAllPhone( + java.lang.Iterable values) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll( + values, phone_); + onChanged(); + } else { + phoneBuilder_.addAllMessages(values); + } + return this; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder clearPhone() { + if (phoneBuilder_ == null) { + phone_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + } else { + phoneBuilder_.clear(); + } + return this; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder removePhone(int index) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + phone_.remove(index); + onChanged(); + } else { + phoneBuilder_.remove(index); + } + return this; + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder getPhoneBuilder( + int index) { + return getPhoneFieldBuilder().getBuilder(index); + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder getPhoneOrBuilder( + int index) { + if (phoneBuilder_ == null) { + return phone_.get(index); } else { + return phoneBuilder_.getMessageOrBuilder(index); + } + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List + getPhoneOrBuilderList() { + if (phoneBuilder_ != null) { + return phoneBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(phone_); + } + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder addPhoneBuilder() { + return getPhoneFieldBuilder().addBuilder( + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance()); + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder addPhoneBuilder( + int index) { + return getPhoneFieldBuilder().addBuilder( + index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance()); + } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List + getPhoneBuilderList() { + return getPhoneFieldBuilder().getBuilderList(); + } + private com.google.protobuf.RepeatedFieldBuilder< + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder> + getPhoneFieldBuilder() { + if (phoneBuilder_ == null) { + phoneBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder>( + phone_, + ((bitField0_ & 0x00000010) == 0x00000010), + getParentForChildren(), + isClean()); + phone_ = null; + } + return phoneBuilder_; + } + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + + // @@protoc_insertion_point(builder_scope:baeldung.Student) + } + + // @@protoc_insertion_point(class_scope:baeldung.Student) + private static final com.baeldung.protobuf.BaeldungTraining.Student DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.baeldung.protobuf.BaeldungTraining.Student(); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + public Student parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Student(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + public com.baeldung.protobuf.BaeldungTraining.Student getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_baeldung_Course_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_baeldung_Course_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_baeldung_Student_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_baeldung_Student_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_baeldung_Student_PhoneNumber_descriptor; + private static final + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\030resources/baeldung.proto\022\010baeldung\"M\n\006" + + "Course\022\n\n\002id\030\001 \001(\005\022\023\n\013course_name\030\002 \001(\t\022" + + "\"\n\007student\030\003 \003(\0132\021.baeldung.Student\"\352\001\n\007" + + "Student\022\n\n\002id\030\001 \001(\005\022\022\n\nfirst_name\030\002 \001(\t\022" + + "\021\n\tlast_name\030\003 \001(\t\022\r\n\005email\030\004 \001(\t\022,\n\005pho" + + "ne\030\005 \003(\0132\035.baeldung.Student.PhoneNumber\032" + + "H\n\013PhoneNumber\022\016\n\006number\030\001 \001(\t\022)\n\004type\030\002" + + " \001(\0162\033.baeldung.Student.PhoneType\"%\n\tPho" + + "neType\022\n\n\006MOBILE\020\000\022\014\n\010LANDLINE\020\001B)\n\025com." + + "baeldung.protobufB\020BaeldungTrainingb\006pro", + "to3" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + internal_static_baeldung_Course_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_baeldung_Course_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_baeldung_Course_descriptor, + new java.lang.String[] { "Id", "CourseName", "Student", }); + internal_static_baeldung_Student_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_baeldung_Student_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_baeldung_Student_descriptor, + new java.lang.String[] { "Id", "FirstName", "LastName", "Email", "Phone", }); + internal_static_baeldung_Student_PhoneNumber_descriptor = + internal_static_baeldung_Student_descriptor.getNestedTypes().get(0); + internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_baeldung_Student_PhoneNumber_descriptor, + new java.lang.String[] { "Number", "Type", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseController.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseController.java new file mode 100644 index 0000000000..027f296fa2 --- /dev/null +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseController.java @@ -0,0 +1,19 @@ +package com.baeldung.protobuf; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.baeldung.protobuf.BaeldungTraining.Course; + +@RestController +public class CourseController { + @Autowired + CourseRepository courseRepo; + + @RequestMapping("/courses/{id}") + Course customer(@PathVariable Integer id) { + return courseRepo.getCourse(id); + } +} diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java new file mode 100644 index 0000000000..aa00b2a850 --- /dev/null +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java @@ -0,0 +1,17 @@ +package com.baeldung.protobuf; + +import java.util.Map; + +import com.baeldung.protobuf.BaeldungTraining.Course; + +public class CourseRepository { + Map courses; + + public CourseRepository (Map courses) { + this.courses = courses; + } + + public Course getCourse(int id) { + return courses.get(id); + } +} diff --git a/spring-protobuf/src/main/resources/baeldung.proto b/spring-protobuf/src/main/resources/baeldung.proto new file mode 100644 index 0000000000..20124c34c4 --- /dev/null +++ b/spring-protobuf/src/main/resources/baeldung.proto @@ -0,0 +1,30 @@ +syntax = "proto3"; + +package baeldung; + +option java_package = "com.baeldung.protobuf"; +option java_outer_classname = "BaeldungTraining"; + +message Course { + int32 id = 1; + string course_name = 2; + repeated Student student = 3; +} + +message Student { + int32 id = 1; + string first_name = 2; + string last_name = 3; + string email = 4; + repeated PhoneNumber phone = 5; + + message PhoneNumber { + string number = 1; + PhoneType type = 2; + } + + enum PhoneType { + MOBILE = 0; + LANDLINE = 1; + } +} \ No newline at end of file diff --git a/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java new file mode 100644 index 0000000000..026fa04fa2 --- /dev/null +++ b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java @@ -0,0 +1,76 @@ +package com.baeldung.protobuf; + +import java.io.IOException; +import java.io.InputStream; + +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.boot.test.WebIntegrationTest; +import org.springframework.http.ResponseEntity; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.web.client.RestTemplate; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import com.baeldung.protobuf.BaeldungTraining.Course; +import com.googlecode.protobuf.format.JsonFormat; + +import static org.junit.Assert.assertThat; +import static org.hamcrest.CoreMatchers.containsString; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = Application.class) +@WebIntegrationTest +public class ApplicationTest { + private static final String COURSE1_URL = "http://localhost:8080/courses/1"; + @Autowired + private RestTemplate restTemplate; + + @Test + public void whenUsingRestTemplate_thenSucceed() { + ResponseEntity course = restTemplate.getForEntity(COURSE1_URL, Course.class); + assertResponse(course.toString()); + } + + @Test + public void whenUsingHttpClient_thenSucceed() throws IOException { + InputStream responseStream = executeHttpRequest(COURSE1_URL); + String jsonOutput = convertProtobufMessageStreamToJsonString(responseStream); + assertResponse(jsonOutput); + } + + private InputStream executeHttpRequest(String url) throws IOException { + CloseableHttpClient httpClient = HttpClients.createDefault(); + HttpGet request = new HttpGet(url); + HttpResponse httpResponse = httpClient.execute(request); + return httpResponse.getEntity().getContent(); + } + + private String convertProtobufMessageStreamToJsonString(InputStream protobufStream) throws IOException { + JsonFormat jsonFormat = new JsonFormat(); + Course course = Course.parseFrom(protobufStream); + return jsonFormat.printToString(course); + } + + private void assertResponse(String response) { + assertThat(response, containsString("id")); + assertThat(response, containsString("course_name")); + assertThat(response, containsString("REST with Spring")); + assertThat(response, containsString("student")); + assertThat(response, containsString("first_name")); + assertThat(response, containsString("last_name")); + assertThat(response, containsString("email")); + assertThat(response, containsString("john.doe@baeldung.com")); + assertThat(response, containsString("richard.roe@baeldung.com")); + assertThat(response, containsString("jane.doe@baeldung.com")); + assertThat(response, containsString("phone")); + assertThat(response, containsString("number")); + assertThat(response, containsString("type")); + } +} \ No newline at end of file From c77a992a523e6f62892ca235c013a5297c73fc4b Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sat, 18 Jun 2016 22:08:24 +0200 Subject: [PATCH 084/283] Refactor spring-protobuf --- pom.xml | 1 + spring-protobuf/pom.xml | 15 +++++ .../com/baeldung/protobuf/Application.java | 56 ++++++++++--------- .../baeldung/protobuf/CourseController.java | 1 + .../baeldung/protobuf/CourseRepository.java | 7 ++- .../baeldung/protobuf/ApplicationTest.java | 19 +++---- 6 files changed, 61 insertions(+), 38 deletions(-) diff --git a/pom.xml b/pom.xml index f16861cc68..19c602091d 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,7 @@ spring-mvc-no-xml spring-mvc-xml spring-openid + spring-protobuf spring-quartz spring-rest diff --git a/spring-protobuf/pom.xml b/spring-protobuf/pom.xml index 28338f26c3..1275d72edf 100644 --- a/spring-protobuf/pom.xml +++ b/spring-protobuf/pom.xml @@ -40,4 +40,19 @@ 4.5.2 + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java index 38a49367a3..ce5453af61 100644 --- a/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java @@ -1,23 +1,23 @@ package com.baeldung.protobuf; +import com.baeldung.protobuf.BaeldungTraining.Course; +import com.baeldung.protobuf.BaeldungTraining.Student; +import com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber; +import com.baeldung.protobuf.BaeldungTraining.Student.PhoneType; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Bean; +import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter; +import org.springframework.web.client.RestTemplate; + import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter; -import org.springframework.web.client.RestTemplate; - -import com.baeldung.protobuf.BaeldungTraining.Course; -import com.baeldung.protobuf.BaeldungTraining.Student; -import com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber; -import com.baeldung.protobuf.BaeldungTraining.Student.PhoneType; - @SpringBootApplication public class Application { + @Bean RestTemplate restTemplate(ProtobufHttpMessageConverter hmc) { return new RestTemplate(Arrays.asList(hmc)); @@ -29,21 +29,28 @@ public class Application { } @Bean - public CourseRepository createDummyCourses() { - Map dummy = new HashMap<>(); - - Course course1 = Course.newBuilder().setId(1).setCourseName("REST with Spring").addAllStudent(createDummyStudents()).build(); - Course course2 = Course.newBuilder().setId(2).setCourseName("Learn Spring Security").addAllStudent(new ArrayList()).build(); - - dummy.put(course1.getId(), course1); - dummy.put(course2.getId(), course2); - - return new CourseRepository(dummy); + public CourseRepository createStubCourses() { + Map courses = new HashMap<>(); + + Course course1 = Course.newBuilder() + .setId(1) + .setCourseName("REST with Spring") + .addAllStudent(createStubStudents()) + .build(); + + Course course2 = Course.newBuilder() + .setId(2) + .setCourseName("Learn Spring Security") + .addAllStudent(new ArrayList<>()) + .build(); + + courses.put(course1.getId(), course1); + courses.put(course2.getId(), course2); + + return new CourseRepository(courses); } - private List createDummyStudents() { - List studentList = new ArrayList<>(); - + private List createStubStudents() { PhoneNumber phone1 = createPhone("123456", PhoneType.MOBILE); Student student1 = createStudent(1, "John", "Doe", "john.doe@baeldung.com", Arrays.asList(phone1)); @@ -54,8 +61,7 @@ public class Application { PhoneNumber phone3_2 = createPhone("456789", PhoneType.LANDLINE); Student student3 = createStudent(3, "Jane", "Doe", "jane.doe@baeldung.com", Arrays.asList(phone3_1, phone3_2)); - studentList.addAll(Arrays.asList(student1, student2, student3)); - return studentList; + return Arrays.asList(student1, student2, student3); } private Student createStudent(int id, String firstName, String lastName, String email, List phones) { diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseController.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseController.java index 027f296fa2..807b9a9ea4 100644 --- a/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseController.java +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseController.java @@ -9,6 +9,7 @@ import com.baeldung.protobuf.BaeldungTraining.Course; @RestController public class CourseController { + @Autowired CourseRepository courseRepo; diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java index aa00b2a850..60f24abf93 100644 --- a/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java @@ -1,11 +1,12 @@ package com.baeldung.protobuf; -import java.util.Map; - import com.baeldung.protobuf.BaeldungTraining.Course; +import java.util.Map; + public class CourseRepository { - Map courses; + + private final Map courses; public CourseRepository (Map courses) { this.courses = courses; diff --git a/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java index 026fa04fa2..a17082cea7 100644 --- a/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java +++ b/spring-protobuf/src/test/java/com/baeldung/protobuf/ApplicationTest.java @@ -1,13 +1,13 @@ package com.baeldung.protobuf; -import java.io.IOException; -import java.io.InputStream; - +import com.baeldung.protobuf.BaeldungTraining.Course; +import com.googlecode.protobuf.format.JsonFormat; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; - +import org.junit.Test; +import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.boot.test.WebIntegrationTest; @@ -15,20 +15,19 @@ import org.springframework.http.ResponseEntity; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.web.client.RestTemplate; -import org.junit.Test; -import org.junit.runner.RunWith; +import java.io.IOException; +import java.io.InputStream; -import com.baeldung.protobuf.BaeldungTraining.Course; -import com.googlecode.protobuf.format.JsonFormat; - -import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertThat; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebIntegrationTest public class ApplicationTest { + private static final String COURSE1_URL = "http://localhost:8080/courses/1"; + @Autowired private RestTemplate restTemplate; From b1bdeb92d68848c26aab5cbaedce50327886854e Mon Sep 17 00:00:00 2001 From: eugenp Date: Sat, 18 Jun 2016 23:52:26 +0300 Subject: [PATCH 085/283] minor formatting work --- .../org/baeldung/httpclient/SandboxTest.java | 3 +- .../com/baeldung/protobuf/Application.java | 12 +- .../baeldung/protobuf/BaeldungTraining.java | 5074 ++++++++--------- .../baeldung/protobuf/CourseRepository.java | 6 +- 4 files changed, 2479 insertions(+), 2616 deletions(-) diff --git a/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java b/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java index 514611d1f9..dc1a206f0d 100644 --- a/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java +++ b/httpclient/src/test/java/org/baeldung/httpclient/SandboxTest.java @@ -108,7 +108,7 @@ public class SandboxTest { // Make a client using those creds final CloseableHttpClient client = HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultCredentialsProvider(credsProvider).build(); - + // And make a call to the URL we are after final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd"); @@ -127,6 +127,7 @@ public class SandboxTest { try { System.out.println("----------------------------------------"); + System.out.println(responseGood.getStatusLine()); assertEquals(200, responseGood.getStatusLine().getStatusCode()); } finally { responseGood.close(); diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java index ce5453af61..234c3e3382 100644 --- a/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java @@ -32,17 +32,9 @@ public class Application { public CourseRepository createStubCourses() { Map courses = new HashMap<>(); - Course course1 = Course.newBuilder() - .setId(1) - .setCourseName("REST with Spring") - .addAllStudent(createStubStudents()) - .build(); + Course course1 = Course.newBuilder().setId(1).setCourseName("REST with Spring").addAllStudent(createStubStudents()).build(); - Course course2 = Course.newBuilder() - .setId(2) - .setCourseName("Learn Spring Security") - .addAllStudent(new ArrayList<>()) - .build(); + Course course2 = Course.newBuilder().setId(2).setCourseName("Learn Spring Security").addAllStudent(new ArrayList<>()).build(); courses.put(course1.getId(), course1); courses.put(course2.getId(), course2); diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/BaeldungTraining.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/BaeldungTraining.java index 3869ebfaeb..5cab2ae908 100644 --- a/spring-protobuf/src/main/java/com/baeldung/protobuf/BaeldungTraining.java +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/BaeldungTraining.java @@ -4,2716 +4,2586 @@ package com.baeldung.protobuf; public final class BaeldungTraining { - private BaeldungTraining() {} - public static void registerAllExtensions( - com.google.protobuf.ExtensionRegistry registry) { - } - public interface CourseOrBuilder extends - // @@protoc_insertion_point(interface_extends:baeldung.Course) - com.google.protobuf.MessageOrBuilder { - - /** - * optional int32 id = 1; - */ - int getId(); - - /** - * optional string course_name = 2; - */ - java.lang.String getCourseName(); - /** - * optional string course_name = 2; - */ - com.google.protobuf.ByteString - getCourseNameBytes(); - - /** - * repeated .baeldung.Student student = 3; - */ - java.util.List - getStudentList(); - /** - * repeated .baeldung.Student student = 3; - */ - com.baeldung.protobuf.BaeldungTraining.Student getStudent(int index); - /** - * repeated .baeldung.Student student = 3; - */ - int getStudentCount(); - /** - * repeated .baeldung.Student student = 3; - */ - java.util.List - getStudentOrBuilderList(); - /** - * repeated .baeldung.Student student = 3; - */ - com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder getStudentOrBuilder( - int index); - } - /** - * Protobuf type {@code baeldung.Course} - */ - public static final class Course extends - com.google.protobuf.GeneratedMessage implements - // @@protoc_insertion_point(message_implements:baeldung.Course) - CourseOrBuilder { - // Use Course.newBuilder() to construct. - private Course(com.google.protobuf.GeneratedMessage.Builder builder) { - super(builder); - } - private Course() { - id_ = 0; - courseName_ = ""; - student_ = java.util.Collections.emptyList(); + private BaeldungTraining() { } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private Course( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 8: { - - id_ = input.readInt32(); - break; - } - case 18: { - java.lang.String s = input.readStringRequireUtf8(); - - courseName_ = s; - break; - } - case 26: { - if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { - student_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000004; - } - student_.add(input.readMessage(com.baeldung.protobuf.BaeldungTraining.Student.parser(), extensionRegistry)); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { - student_ = java.util.Collections.unmodifiableList(student_); - } - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_descriptor; + public static void registerAllExtensions(com.google.protobuf.ExtensionRegistry registry) { } - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.baeldung.protobuf.BaeldungTraining.Course.class, com.baeldung.protobuf.BaeldungTraining.Course.Builder.class); + public interface CourseOrBuilder extends + // @@protoc_insertion_point(interface_extends:baeldung.Course) + com.google.protobuf.MessageOrBuilder { + + /** + * optional int32 id = 1; + */ + int getId(); + + /** + * optional string course_name = 2; + */ + java.lang.String getCourseName(); + + /** + * optional string course_name = 2; + */ + com.google.protobuf.ByteString getCourseNameBytes(); + + /** + * repeated .baeldung.Student student = 3; + */ + java.util.List getStudentList(); + + /** + * repeated .baeldung.Student student = 3; + */ + com.baeldung.protobuf.BaeldungTraining.Student getStudent(int index); + + /** + * repeated .baeldung.Student student = 3; + */ + int getStudentCount(); + + /** + * repeated .baeldung.Student student = 3; + */ + java.util.List getStudentOrBuilderList(); + + /** + * repeated .baeldung.Student student = 3; + */ + com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder getStudentOrBuilder(int index); } - private int bitField0_; - public static final int ID_FIELD_NUMBER = 1; - private int id_; - /** - * optional int32 id = 1; - */ - public int getId() { - return id_; - } - - public static final int COURSE_NAME_FIELD_NUMBER = 2; - private volatile java.lang.Object courseName_; - /** - * optional string course_name = 2; - */ - public java.lang.String getCourseName() { - java.lang.Object ref = courseName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - courseName_ = s; - return s; - } - } - /** - * optional string course_name = 2; - */ - public com.google.protobuf.ByteString - getCourseNameBytes() { - java.lang.Object ref = courseName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - courseName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int STUDENT_FIELD_NUMBER = 3; - private java.util.List student_; - /** - * repeated .baeldung.Student student = 3; - */ - public java.util.List getStudentList() { - return student_; - } - /** - * repeated .baeldung.Student student = 3; - */ - public java.util.List - getStudentOrBuilderList() { - return student_; - } - /** - * repeated .baeldung.Student student = 3; - */ - public int getStudentCount() { - return student_.size(); - } - /** - * repeated .baeldung.Student student = 3; - */ - public com.baeldung.protobuf.BaeldungTraining.Student getStudent(int index) { - return student_.get(index); - } - /** - * repeated .baeldung.Student student = 3; - */ - public com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder getStudentOrBuilder( - int index) { - return student_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (id_ != 0) { - output.writeInt32(1, id_); - } - if (!getCourseNameBytes().isEmpty()) { - com.google.protobuf.GeneratedMessage.writeString(output, 2, courseName_); - } - for (int i = 0; i < student_.size(); i++) { - output.writeMessage(3, student_.get(i)); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (id_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(1, id_); - } - if (!getCourseNameBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessage.computeStringSize(2, courseName_); - } - for (int i = 0; i < student_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(3, student_.get(i)); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input); - } - public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Course parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseDelimitedWithIOException(PARSER, input); - } - public static com.baeldung.protobuf.BaeldungTraining.Course parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input); - } - public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.baeldung.protobuf.BaeldungTraining.Course prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } /** * Protobuf type {@code baeldung.Course} */ - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder implements - // @@protoc_insertion_point(builder_implements:baeldung.Course) - com.baeldung.protobuf.BaeldungTraining.CourseOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.baeldung.protobuf.BaeldungTraining.Course.class, com.baeldung.protobuf.BaeldungTraining.Course.Builder.class); - } - - // Construct using com.baeldung.protobuf.BaeldungTraining.Course.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getStudentFieldBuilder(); + public static final class Course extends com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:baeldung.Course) + CourseOrBuilder { + // Use Course.newBuilder() to construct. + private Course(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); } - } - public Builder clear() { - super.clear(); - id_ = 0; - courseName_ = ""; - - if (studentBuilder_ == null) { - student_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - } else { - studentBuilder_.clear(); + private Course() { + id_ = 0; + courseName_ = ""; + student_ = java.util.Collections.emptyList(); } - return this; - } - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_descriptor; - } - - public com.baeldung.protobuf.BaeldungTraining.Course getDefaultInstanceForType() { - return com.baeldung.protobuf.BaeldungTraining.Course.getDefaultInstance(); - } - - public com.baeldung.protobuf.BaeldungTraining.Course build() { - com.baeldung.protobuf.BaeldungTraining.Course result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } - return result; - } - public com.baeldung.protobuf.BaeldungTraining.Course buildPartial() { - com.baeldung.protobuf.BaeldungTraining.Course result = new com.baeldung.protobuf.BaeldungTraining.Course(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - result.id_ = id_; - result.courseName_ = courseName_; - if (studentBuilder_ == null) { - if (((bitField0_ & 0x00000004) == 0x00000004)) { - student_ = java.util.Collections.unmodifiableList(student_); - bitField0_ = (bitField0_ & ~0x00000004); - } - result.student_ = student_; - } else { - result.student_ = studentBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } + private Course(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + this(); + int mutable_bitField0_ = 0; + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + case 8: { - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.baeldung.protobuf.BaeldungTraining.Course) { - return mergeFrom((com.baeldung.protobuf.BaeldungTraining.Course)other); - } else { - super.mergeFrom(other); - return this; - } - } + id_ = input.readInt32(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); - public Builder mergeFrom(com.baeldung.protobuf.BaeldungTraining.Course other) { - if (other == com.baeldung.protobuf.BaeldungTraining.Course.getDefaultInstance()) return this; - if (other.getId() != 0) { - setId(other.getId()); - } - if (!other.getCourseName().isEmpty()) { - courseName_ = other.courseName_; - onChanged(); - } - if (studentBuilder_ == null) { - if (!other.student_.isEmpty()) { - if (student_.isEmpty()) { - student_ = other.student_; - bitField0_ = (bitField0_ & ~0x00000004); - } else { - ensureStudentIsMutable(); - student_.addAll(other.student_); - } - onChanged(); - } - } else { - if (!other.student_.isEmpty()) { - if (studentBuilder_.isEmpty()) { - studentBuilder_.dispose(); - studentBuilder_ = null; - student_ = other.student_; - bitField0_ = (bitField0_ & ~0x00000004); - studentBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getStudentFieldBuilder() : null; - } else { - studentBuilder_.addAllMessages(other.student_); - } - } - } - onChanged(); - return this; - } - - public final boolean isInitialized() { - return true; - } - - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.baeldung.protobuf.BaeldungTraining.Course parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.baeldung.protobuf.BaeldungTraining.Course) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; - - private int id_ ; - /** - * optional int32 id = 1; - */ - public int getId() { - return id_; - } - /** - * optional int32 id = 1; - */ - public Builder setId(int value) { - - id_ = value; - onChanged(); - return this; - } - /** - * optional int32 id = 1; - */ - public Builder clearId() { - - id_ = 0; - onChanged(); - return this; - } - - private java.lang.Object courseName_ = ""; - /** - * optional string course_name = 2; - */ - public java.lang.String getCourseName() { - java.lang.Object ref = courseName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - courseName_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * optional string course_name = 2; - */ - public com.google.protobuf.ByteString - getCourseNameBytes() { - java.lang.Object ref = courseName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - courseName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string course_name = 2; - */ - public Builder setCourseName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - courseName_ = value; - onChanged(); - return this; - } - /** - * optional string course_name = 2; - */ - public Builder clearCourseName() { - - courseName_ = getDefaultInstance().getCourseName(); - onChanged(); - return this; - } - /** - * optional string course_name = 2; - */ - public Builder setCourseNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - courseName_ = value; - onChanged(); - return this; - } - - private java.util.List student_ = - java.util.Collections.emptyList(); - private void ensureStudentIsMutable() { - if (!((bitField0_ & 0x00000004) == 0x00000004)) { - student_ = new java.util.ArrayList(student_); - bitField0_ |= 0x00000004; - } - } - - private com.google.protobuf.RepeatedFieldBuilder< - com.baeldung.protobuf.BaeldungTraining.Student, com.baeldung.protobuf.BaeldungTraining.Student.Builder, com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder> studentBuilder_; - - /** - * repeated .baeldung.Student student = 3; - */ - public java.util.List getStudentList() { - if (studentBuilder_ == null) { - return java.util.Collections.unmodifiableList(student_); - } else { - return studentBuilder_.getMessageList(); - } - } - /** - * repeated .baeldung.Student student = 3; - */ - public int getStudentCount() { - if (studentBuilder_ == null) { - return student_.size(); - } else { - return studentBuilder_.getCount(); - } - } - /** - * repeated .baeldung.Student student = 3; - */ - public com.baeldung.protobuf.BaeldungTraining.Student getStudent(int index) { - if (studentBuilder_ == null) { - return student_.get(index); - } else { - return studentBuilder_.getMessage(index); - } - } - /** - * repeated .baeldung.Student student = 3; - */ - public Builder setStudent( - int index, com.baeldung.protobuf.BaeldungTraining.Student value) { - if (studentBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureStudentIsMutable(); - student_.set(index, value); - onChanged(); - } else { - studentBuilder_.setMessage(index, value); - } - return this; - } - /** - * repeated .baeldung.Student student = 3; - */ - public Builder setStudent( - int index, com.baeldung.protobuf.BaeldungTraining.Student.Builder builderForValue) { - if (studentBuilder_ == null) { - ensureStudentIsMutable(); - student_.set(index, builderForValue.build()); - onChanged(); - } else { - studentBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .baeldung.Student student = 3; - */ - public Builder addStudent(com.baeldung.protobuf.BaeldungTraining.Student value) { - if (studentBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureStudentIsMutable(); - student_.add(value); - onChanged(); - } else { - studentBuilder_.addMessage(value); - } - return this; - } - /** - * repeated .baeldung.Student student = 3; - */ - public Builder addStudent( - int index, com.baeldung.protobuf.BaeldungTraining.Student value) { - if (studentBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensureStudentIsMutable(); - student_.add(index, value); - onChanged(); - } else { - studentBuilder_.addMessage(index, value); - } - return this; - } - /** - * repeated .baeldung.Student student = 3; - */ - public Builder addStudent( - com.baeldung.protobuf.BaeldungTraining.Student.Builder builderForValue) { - if (studentBuilder_ == null) { - ensureStudentIsMutable(); - student_.add(builderForValue.build()); - onChanged(); - } else { - studentBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * repeated .baeldung.Student student = 3; - */ - public Builder addStudent( - int index, com.baeldung.protobuf.BaeldungTraining.Student.Builder builderForValue) { - if (studentBuilder_ == null) { - ensureStudentIsMutable(); - student_.add(index, builderForValue.build()); - onChanged(); - } else { - studentBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .baeldung.Student student = 3; - */ - public Builder addAllStudent( - java.lang.Iterable values) { - if (studentBuilder_ == null) { - ensureStudentIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, student_); - onChanged(); - } else { - studentBuilder_.addAllMessages(values); - } - return this; - } - /** - * repeated .baeldung.Student student = 3; - */ - public Builder clearStudent() { - if (studentBuilder_ == null) { - student_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000004); - onChanged(); - } else { - studentBuilder_.clear(); - } - return this; - } - /** - * repeated .baeldung.Student student = 3; - */ - public Builder removeStudent(int index) { - if (studentBuilder_ == null) { - ensureStudentIsMutable(); - student_.remove(index); - onChanged(); - } else { - studentBuilder_.remove(index); - } - return this; - } - /** - * repeated .baeldung.Student student = 3; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.Builder getStudentBuilder( - int index) { - return getStudentFieldBuilder().getBuilder(index); - } - /** - * repeated .baeldung.Student student = 3; - */ - public com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder getStudentOrBuilder( - int index) { - if (studentBuilder_ == null) { - return student_.get(index); } else { - return studentBuilder_.getMessageOrBuilder(index); - } - } - /** - * repeated .baeldung.Student student = 3; - */ - public java.util.List - getStudentOrBuilderList() { - if (studentBuilder_ != null) { - return studentBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(student_); - } - } - /** - * repeated .baeldung.Student student = 3; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.Builder addStudentBuilder() { - return getStudentFieldBuilder().addBuilder( - com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance()); - } - /** - * repeated .baeldung.Student student = 3; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.Builder addStudentBuilder( - int index) { - return getStudentFieldBuilder().addBuilder( - index, com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance()); - } - /** - * repeated .baeldung.Student student = 3; - */ - public java.util.List - getStudentBuilderList() { - return getStudentFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - com.baeldung.protobuf.BaeldungTraining.Student, com.baeldung.protobuf.BaeldungTraining.Student.Builder, com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder> - getStudentFieldBuilder() { - if (studentBuilder_ == null) { - studentBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - com.baeldung.protobuf.BaeldungTraining.Student, com.baeldung.protobuf.BaeldungTraining.Student.Builder, com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder>( - student_, - ((bitField0_ & 0x00000004) == 0x00000004), - getParentForChildren(), - isClean()); - student_ = null; - } - return studentBuilder_; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } - - - // @@protoc_insertion_point(builder_scope:baeldung.Course) - } - - // @@protoc_insertion_point(class_scope:baeldung.Course) - private static final com.baeldung.protobuf.BaeldungTraining.Course DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.baeldung.protobuf.BaeldungTraining.Course(); - } - - public static com.baeldung.protobuf.BaeldungTraining.Course getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public Course parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new Course(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public com.baeldung.protobuf.BaeldungTraining.Course getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - - } - - public interface StudentOrBuilder extends - // @@protoc_insertion_point(interface_extends:baeldung.Student) - com.google.protobuf.MessageOrBuilder { - - /** - * optional int32 id = 1; - */ - int getId(); - - /** - * optional string first_name = 2; - */ - java.lang.String getFirstName(); - /** - * optional string first_name = 2; - */ - com.google.protobuf.ByteString - getFirstNameBytes(); - - /** - * optional string last_name = 3; - */ - java.lang.String getLastName(); - /** - * optional string last_name = 3; - */ - com.google.protobuf.ByteString - getLastNameBytes(); - - /** - * optional string email = 4; - */ - java.lang.String getEmail(); - /** - * optional string email = 4; - */ - com.google.protobuf.ByteString - getEmailBytes(); - - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - java.util.List - getPhoneList(); - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getPhone(int index); - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - int getPhoneCount(); - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - java.util.List - getPhoneOrBuilderList(); - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder getPhoneOrBuilder( - int index); - } - /** - * Protobuf type {@code baeldung.Student} - */ - public static final class Student extends - com.google.protobuf.GeneratedMessage implements - // @@protoc_insertion_point(message_implements:baeldung.Student) - StudentOrBuilder { - // Use Student.newBuilder() to construct. - private Student(com.google.protobuf.GeneratedMessage.Builder builder) { - super(builder); - } - private Student() { - id_ = 0; - firstName_ = ""; - lastName_ = ""; - email_ = ""; - phone_ = java.util.Collections.emptyList(); - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private Student( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; - } - break; - } - case 8: { - - id_ = input.readInt32(); - break; - } - case 18: { - java.lang.String s = input.readStringRequireUtf8(); - - firstName_ = s; - break; - } - case 26: { - java.lang.String s = input.readStringRequireUtf8(); - - lastName_ = s; - break; - } - case 34: { - java.lang.String s = input.readStringRequireUtf8(); - - email_ = s; - break; - } - case 42: { - if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) { - phone_ = new java.util.ArrayList(); - mutable_bitField0_ |= 0x00000010; - } - phone_.add(input.readMessage(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.parser(), extensionRegistry)); - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) { - phone_ = java.util.Collections.unmodifiableList(phone_); - } - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.baeldung.protobuf.BaeldungTraining.Student.class, com.baeldung.protobuf.BaeldungTraining.Student.Builder.class); - } - - /** - * Protobuf enum {@code baeldung.Student.PhoneType} - */ - public enum PhoneType - implements com.google.protobuf.ProtocolMessageEnum { - /** - * MOBILE = 0; - */ - MOBILE(0), - /** - * LANDLINE = 1; - */ - LANDLINE(1), - UNRECOGNIZED(-1), - ; - - /** - * MOBILE = 0; - */ - public static final int MOBILE_VALUE = 0; - /** - * LANDLINE = 1; - */ - public static final int LANDLINE_VALUE = 1; - - - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static PhoneType valueOf(int value) { - return forNumber(value); - } - - public static PhoneType forNumber(int value) { - switch (value) { - case 0: return MOBILE; - case 1: return LANDLINE; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - PhoneType> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - public PhoneType findValueByNumber(int number) { - return PhoneType.forNumber(number); - } - }; - - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - return getDescriptor().getValues().get(ordinal()); - } - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return com.baeldung.protobuf.BaeldungTraining.Student.getDescriptor().getEnumTypes().get(0); - } - - private static final PhoneType[] VALUES = values(); - - public static PhoneType valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private PhoneType(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:baeldung.Student.PhoneType) - } - - public interface PhoneNumberOrBuilder extends - // @@protoc_insertion_point(interface_extends:baeldung.Student.PhoneNumber) - com.google.protobuf.MessageOrBuilder { - - /** - * optional string number = 1; - */ - java.lang.String getNumber(); - /** - * optional string number = 1; - */ - com.google.protobuf.ByteString - getNumberBytes(); - - /** - * optional .baeldung.Student.PhoneType type = 2; - */ - int getTypeValue(); - /** - * optional .baeldung.Student.PhoneType type = 2; - */ - com.baeldung.protobuf.BaeldungTraining.Student.PhoneType getType(); - } - /** - * Protobuf type {@code baeldung.Student.PhoneNumber} - */ - public static final class PhoneNumber extends - com.google.protobuf.GeneratedMessage implements - // @@protoc_insertion_point(message_implements:baeldung.Student.PhoneNumber) - PhoneNumberOrBuilder { - // Use PhoneNumber.newBuilder() to construct. - private PhoneNumber(com.google.protobuf.GeneratedMessage.Builder builder) { - super(builder); - } - private PhoneNumber() { - number_ = ""; - type_ = 0; - } - - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); - } - private PhoneNumber( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - int mutable_bitField0_ = 0; - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - default: { - if (!input.skipField(tag)) { - done = true; + courseName_ = s; + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + student_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000004; + } + student_.add(input.readMessage(com.baeldung.protobuf.BaeldungTraining.Student.parser(), extensionRegistry)); + break; + } + } } - break; - } - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - - number_ = s; - break; - } - case 16: { - int rawValue = input.readEnum(); - - type_ = rawValue; - break; - } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000004) == 0x00000004)) { + student_ = java.util.Collections.unmodifiableList(student_); + } + makeExtensionsImmutable(); } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.class, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder.class); - } - - public static final int NUMBER_FIELD_NUMBER = 1; - private volatile java.lang.Object number_; - /** - * optional string number = 1; - */ - public java.lang.String getNumber() { - java.lang.Object ref = number_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - number_ = s; - return s; - } - } - /** - * optional string number = 1; - */ - public com.google.protobuf.ByteString - getNumberBytes() { - java.lang.Object ref = number_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - number_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int TYPE_FIELD_NUMBER = 2; - private int type_; - /** - * optional .baeldung.Student.PhoneType type = 2; - */ - public int getTypeValue() { - return type_; - } - /** - * optional .baeldung.Student.PhoneType type = 2; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneType getType() { - com.baeldung.protobuf.BaeldungTraining.Student.PhoneType result = com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.forNumber(type_); - return result == null ? com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.UNRECOGNIZED : result; - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (!getNumberBytes().isEmpty()) { - com.google.protobuf.GeneratedMessage.writeString(output, 1, number_); - } - if (type_ != com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.MOBILE.getNumber()) { - output.writeEnum(2, type_); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (!getNumberBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessage.computeStringSize(1, number_); - } - if (type_ != com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.MOBILE.getNumber()) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(2, type_); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input); - } - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseDelimitedWithIOException(PARSER, input); - } - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input); - } - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } - /** - * Protobuf type {@code baeldung.Student.PhoneNumber} - */ - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder implements - // @@protoc_insertion_point(builder_implements:baeldung.Student.PhoneNumber) - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_descriptor; } - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.class, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder.class); + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_descriptor; } - // Construct using com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_fieldAccessorTable.ensureFieldAccessorsInitialized(com.baeldung.protobuf.BaeldungTraining.Course.class, com.baeldung.protobuf.BaeldungTraining.Course.Builder.class); } - private Builder( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - } - } - public Builder clear() { - super.clear(); - number_ = ""; + private int bitField0_; + public static final int ID_FIELD_NUMBER = 1; + private int id_; - type_ = 0; - - return this; + /** + * optional int32 id = 1; + */ + public int getId() { + return id_; } - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_descriptor; + public static final int COURSE_NAME_FIELD_NUMBER = 2; + private volatile java.lang.Object courseName_; + + /** + * optional string course_name = 2; + */ + public java.lang.String getCourseName() { + java.lang.Object ref = courseName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + courseName_ = s; + return s; + } } - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getDefaultInstanceForType() { - return com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance(); + /** + * optional string course_name = 2; + */ + public com.google.protobuf.ByteString getCourseNameBytes() { + java.lang.Object ref = courseName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + courseName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } } - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber build() { - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; + public static final int STUDENT_FIELD_NUMBER = 3; + private java.util.List student_; + + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List getStudentList() { + return student_; } - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber buildPartial() { - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber result = new com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber(this); - result.number_ = number_; - result.type_ = type_; - onBuilt(); - return result; + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List getStudentOrBuilderList() { + return student_; } - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber) { - return mergeFrom((com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber)other); - } else { - super.mergeFrom(other); - return this; - } + /** + * repeated .baeldung.Student student = 3; + */ + public int getStudentCount() { + return student_.size(); } - public Builder mergeFrom(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber other) { - if (other == com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance()) return this; - if (!other.getNumber().isEmpty()) { - number_ = other.number_; - onChanged(); - } - if (other.type_ != 0) { - setTypeValue(other.getTypeValue()); - } - onChanged(); - return this; + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student getStudent(int index) { + return student_.get(index); } + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder getStudentOrBuilder(int index) { + return student_.get(index); + } + + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { - return true; + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) + return true; + if (isInitialized == 0) + return false; + + memoizedIsInitialized = 1; + return true; } - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(1, id_); + } + if (!getCourseNameBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, courseName_); + } + for (int i = 0; i < student_.size(); i++) { + output.writeMessage(3, student_.get(i)); } - } - return this; } - private java.lang.Object number_ = ""; + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) + return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, id_); + } + if (!getCourseNameBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, courseName_); + } + for (int i = 0; i < student_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(3, student_.get(i)); + } + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry); + } + + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.baeldung.protobuf.BaeldungTraining.Course prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** - * optional string number = 1; + * Protobuf type {@code baeldung.Course} */ - public java.lang.String getNumber() { - java.lang.Object ref = number_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - number_ = s; - return s; - } else { - return (java.lang.String) ref; - } + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:baeldung.Course) + com.baeldung.protobuf.BaeldungTraining.CourseOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_fieldAccessorTable.ensureFieldAccessorsInitialized(com.baeldung.protobuf.BaeldungTraining.Course.class, com.baeldung.protobuf.BaeldungTraining.Course.Builder.class); + } + + // Construct using com.baeldung.protobuf.BaeldungTraining.Course.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getStudentFieldBuilder(); + } + } + + public Builder clear() { + super.clear(); + id_ = 0; + + courseName_ = ""; + + if (studentBuilder_ == null) { + student_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + } else { + studentBuilder_.clear(); + } + return this; + } + + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Course_descriptor; + } + + public com.baeldung.protobuf.BaeldungTraining.Course getDefaultInstanceForType() { + return com.baeldung.protobuf.BaeldungTraining.Course.getDefaultInstance(); + } + + public com.baeldung.protobuf.BaeldungTraining.Course build() { + com.baeldung.protobuf.BaeldungTraining.Course result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public com.baeldung.protobuf.BaeldungTraining.Course buildPartial() { + com.baeldung.protobuf.BaeldungTraining.Course result = new com.baeldung.protobuf.BaeldungTraining.Course(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + result.id_ = id_; + result.courseName_ = courseName_; + if (studentBuilder_ == null) { + if (((bitField0_ & 0x00000004) == 0x00000004)) { + student_ = java.util.Collections.unmodifiableList(student_); + bitField0_ = (bitField0_ & ~0x00000004); + } + result.student_ = student_; + } else { + result.student_ = studentBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.baeldung.protobuf.BaeldungTraining.Course) { + return mergeFrom((com.baeldung.protobuf.BaeldungTraining.Course) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.baeldung.protobuf.BaeldungTraining.Course other) { + if (other == com.baeldung.protobuf.BaeldungTraining.Course.getDefaultInstance()) + return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (!other.getCourseName().isEmpty()) { + courseName_ = other.courseName_; + onChanged(); + } + if (studentBuilder_ == null) { + if (!other.student_.isEmpty()) { + if (student_.isEmpty()) { + student_ = other.student_; + bitField0_ = (bitField0_ & ~0x00000004); + } else { + ensureStudentIsMutable(); + student_.addAll(other.student_); + } + onChanged(); + } + } else { + if (!other.student_.isEmpty()) { + if (studentBuilder_.isEmpty()) { + studentBuilder_.dispose(); + studentBuilder_ = null; + student_ = other.student_; + bitField0_ = (bitField0_ & ~0x00000004); + studentBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? getStudentFieldBuilder() : null; + } else { + studentBuilder_.addAllMessages(other.student_); + } + } + } + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + com.baeldung.protobuf.BaeldungTraining.Course parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.baeldung.protobuf.BaeldungTraining.Course) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int bitField0_; + + private int id_; + + /** + * optional int32 id = 1; + */ + public int getId() { + return id_; + } + + /** + * optional int32 id = 1; + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + + /** + * optional int32 id = 1; + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private java.lang.Object courseName_ = ""; + + /** + * optional string course_name = 2; + */ + public java.lang.String getCourseName() { + java.lang.Object ref = courseName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + courseName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * optional string course_name = 2; + */ + public com.google.protobuf.ByteString getCourseNameBytes() { + java.lang.Object ref = courseName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + courseName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * optional string course_name = 2; + */ + public Builder setCourseName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + courseName_ = value; + onChanged(); + return this; + } + + /** + * optional string course_name = 2; + */ + public Builder clearCourseName() { + + courseName_ = getDefaultInstance().getCourseName(); + onChanged(); + return this; + } + + /** + * optional string course_name = 2; + */ + public Builder setCourseNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + courseName_ = value; + onChanged(); + return this; + } + + private java.util.List student_ = java.util.Collections.emptyList(); + + private void ensureStudentIsMutable() { + if (!((bitField0_ & 0x00000004) == 0x00000004)) { + student_ = new java.util.ArrayList(student_); + bitField0_ |= 0x00000004; + } + } + + private com.google.protobuf.RepeatedFieldBuilder studentBuilder_; + + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List getStudentList() { + if (studentBuilder_ == null) { + return java.util.Collections.unmodifiableList(student_); + } else { + return studentBuilder_.getMessageList(); + } + } + + /** + * repeated .baeldung.Student student = 3; + */ + public int getStudentCount() { + if (studentBuilder_ == null) { + return student_.size(); + } else { + return studentBuilder_.getCount(); + } + } + + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student getStudent(int index) { + if (studentBuilder_ == null) { + return student_.get(index); + } else { + return studentBuilder_.getMessage(index); + } + } + + /** + * repeated .baeldung.Student student = 3; + */ + public Builder setStudent(int index, com.baeldung.protobuf.BaeldungTraining.Student value) { + if (studentBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureStudentIsMutable(); + student_.set(index, value); + onChanged(); + } else { + studentBuilder_.setMessage(index, value); + } + return this; + } + + /** + * repeated .baeldung.Student student = 3; + */ + public Builder setStudent(int index, com.baeldung.protobuf.BaeldungTraining.Student.Builder builderForValue) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + student_.set(index, builderForValue.build()); + onChanged(); + } else { + studentBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addStudent(com.baeldung.protobuf.BaeldungTraining.Student value) { + if (studentBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureStudentIsMutable(); + student_.add(value); + onChanged(); + } else { + studentBuilder_.addMessage(value); + } + return this; + } + + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addStudent(int index, com.baeldung.protobuf.BaeldungTraining.Student value) { + if (studentBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensureStudentIsMutable(); + student_.add(index, value); + onChanged(); + } else { + studentBuilder_.addMessage(index, value); + } + return this; + } + + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addStudent(com.baeldung.protobuf.BaeldungTraining.Student.Builder builderForValue) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + student_.add(builderForValue.build()); + onChanged(); + } else { + studentBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addStudent(int index, com.baeldung.protobuf.BaeldungTraining.Student.Builder builderForValue) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + student_.add(index, builderForValue.build()); + onChanged(); + } else { + studentBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * repeated .baeldung.Student student = 3; + */ + public Builder addAllStudent(java.lang.Iterable values) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, student_); + onChanged(); + } else { + studentBuilder_.addAllMessages(values); + } + return this; + } + + /** + * repeated .baeldung.Student student = 3; + */ + public Builder clearStudent() { + if (studentBuilder_ == null) { + student_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000004); + onChanged(); + } else { + studentBuilder_.clear(); + } + return this; + } + + /** + * repeated .baeldung.Student student = 3; + */ + public Builder removeStudent(int index) { + if (studentBuilder_ == null) { + ensureStudentIsMutable(); + student_.remove(index); + onChanged(); + } else { + studentBuilder_.remove(index); + } + return this; + } + + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.Builder getStudentBuilder(int index) { + return getStudentFieldBuilder().getBuilder(index); + } + + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder getStudentOrBuilder(int index) { + if (studentBuilder_ == null) { + return student_.get(index); + } else { + return studentBuilder_.getMessageOrBuilder(index); + } + } + + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List getStudentOrBuilderList() { + if (studentBuilder_ != null) { + return studentBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(student_); + } + } + + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.Builder addStudentBuilder() { + return getStudentFieldBuilder().addBuilder(com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance()); + } + + /** + * repeated .baeldung.Student student = 3; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.Builder addStudentBuilder(int index) { + return getStudentFieldBuilder().addBuilder(index, com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance()); + } + + /** + * repeated .baeldung.Student student = 3; + */ + public java.util.List getStudentBuilderList() { + return getStudentFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder getStudentFieldBuilder() { + if (studentBuilder_ == null) { + studentBuilder_ = new com.google.protobuf.RepeatedFieldBuilder(student_, + ((bitField0_ & 0x00000004) == 0x00000004), getParentForChildren(), isClean()); + student_ = null; + } + return studentBuilder_; + } + + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + // @@protoc_insertion_point(builder_scope:baeldung.Course) } + + // @@protoc_insertion_point(class_scope:baeldung.Course) + private static final com.baeldung.protobuf.BaeldungTraining.Course DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.baeldung.protobuf.BaeldungTraining.Course(); + } + + public static com.baeldung.protobuf.BaeldungTraining.Course getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() { + public Course parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return new Course(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + public com.baeldung.protobuf.BaeldungTraining.Course getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface StudentOrBuilder extends + // @@protoc_insertion_point(interface_extends:baeldung.Student) + com.google.protobuf.MessageOrBuilder { + /** - * optional string number = 1; + * optional int32 id = 1; */ - public com.google.protobuf.ByteString - getNumberBytes() { - java.lang.Object ref = number_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - number_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } + int getId(); + /** - * optional string number = 1; + * optional string first_name = 2; */ - public Builder setNumber( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - number_ = value; - onChanged(); - return this; - } + java.lang.String getFirstName(); + /** - * optional string number = 1; + * optional string first_name = 2; */ - public Builder clearNumber() { - - number_ = getDefaultInstance().getNumber(); - onChanged(); - return this; - } + com.google.protobuf.ByteString getFirstNameBytes(); + /** - * optional string number = 1; + * optional string last_name = 3; */ - public Builder setNumberBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - number_ = value; - onChanged(); - return this; - } + java.lang.String getLastName(); - private int type_ = 0; /** - * optional .baeldung.Student.PhoneType type = 2; + * optional string last_name = 3; */ - public int getTypeValue() { - return type_; - } + com.google.protobuf.ByteString getLastNameBytes(); + /** - * optional .baeldung.Student.PhoneType type = 2; + * optional string email = 4; */ - public Builder setTypeValue(int value) { - type_ = value; - onChanged(); - return this; - } + java.lang.String getEmail(); + /** - * optional .baeldung.Student.PhoneType type = 2; + * optional string email = 4; */ - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneType getType() { - com.baeldung.protobuf.BaeldungTraining.Student.PhoneType result = com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.forNumber(type_); - return result == null ? com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.UNRECOGNIZED : result; - } + com.google.protobuf.ByteString getEmailBytes(); + /** - * optional .baeldung.Student.PhoneType type = 2; + * repeated .baeldung.Student.PhoneNumber phone = 5; */ - public Builder setType(com.baeldung.protobuf.BaeldungTraining.Student.PhoneType value) { - if (value == null) { - throw new NullPointerException(); - } - - type_ = value.getNumber(); - onChanged(); - return this; - } + java.util.List getPhoneList(); + /** - * optional .baeldung.Student.PhoneType type = 2; + * repeated .baeldung.Student.PhoneNumber phone = 5; */ - public Builder clearType() { - - type_ = 0; - onChanged(); - return this; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getPhone(int index); - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + int getPhoneCount(); + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + java.util.List getPhoneOrBuilderList(); - // @@protoc_insertion_point(builder_scope:baeldung.Student.PhoneNumber) - } - - // @@protoc_insertion_point(class_scope:baeldung.Student.PhoneNumber) - private static final com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber(); - } - - public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public PhoneNumber parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new PhoneNumber(input, extensionRegistry); - } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } - - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } - + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder getPhoneOrBuilder(int index); } - private int bitField0_; - public static final int ID_FIELD_NUMBER = 1; - private int id_; - /** - * optional int32 id = 1; - */ - public int getId() { - return id_; - } - - public static final int FIRST_NAME_FIELD_NUMBER = 2; - private volatile java.lang.Object firstName_; - /** - * optional string first_name = 2; - */ - public java.lang.String getFirstName() { - java.lang.Object ref = firstName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - firstName_ = s; - return s; - } - } - /** - * optional string first_name = 2; - */ - public com.google.protobuf.ByteString - getFirstNameBytes() { - java.lang.Object ref = firstName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - firstName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int LAST_NAME_FIELD_NUMBER = 3; - private volatile java.lang.Object lastName_; - /** - * optional string last_name = 3; - */ - public java.lang.String getLastName() { - java.lang.Object ref = lastName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - lastName_ = s; - return s; - } - } - /** - * optional string last_name = 3; - */ - public com.google.protobuf.ByteString - getLastNameBytes() { - java.lang.Object ref = lastName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - lastName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int EMAIL_FIELD_NUMBER = 4; - private volatile java.lang.Object email_; - /** - * optional string email = 4; - */ - public java.lang.String getEmail() { - java.lang.Object ref = email_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - email_ = s; - return s; - } - } - /** - * optional string email = 4; - */ - public com.google.protobuf.ByteString - getEmailBytes() { - java.lang.Object ref = email_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - email_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int PHONE_FIELD_NUMBER = 5; - private java.util.List phone_; - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public java.util.List getPhoneList() { - return phone_; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public java.util.List - getPhoneOrBuilderList() { - return phone_; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public int getPhoneCount() { - return phone_.size(); - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getPhone(int index) { - return phone_.get(index); - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder getPhoneOrBuilder( - int index) { - return phone_.get(index); - } - - private byte memoizedIsInitialized = -1; - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; - } - - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (id_ != 0) { - output.writeInt32(1, id_); - } - if (!getFirstNameBytes().isEmpty()) { - com.google.protobuf.GeneratedMessage.writeString(output, 2, firstName_); - } - if (!getLastNameBytes().isEmpty()) { - com.google.protobuf.GeneratedMessage.writeString(output, 3, lastName_); - } - if (!getEmailBytes().isEmpty()) { - com.google.protobuf.GeneratedMessage.writeString(output, 4, email_); - } - for (int i = 0; i < phone_.size(); i++) { - output.writeMessage(5, phone_.get(i)); - } - } - - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; - - size = 0; - if (id_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(1, id_); - } - if (!getFirstNameBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessage.computeStringSize(2, firstName_); - } - if (!getLastNameBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessage.computeStringSize(3, lastName_); - } - if (!getEmailBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessage.computeStringSize(4, email_); - } - for (int i = 0; i < phone_.size(); i++) { - size += com.google.protobuf.CodedOutputStream - .computeMessageSize(5, phone_.get(i)); - } - memoizedSize = size; - return size; - } - - private static final long serialVersionUID = 0L; - public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input); - } - public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Student parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseDelimitedWithIOException(PARSER, input); - } - public static com.baeldung.protobuf.BaeldungTraining.Student parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); - } - public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input); - } - public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessage - .parseWithIOException(PARSER, input, extensionRegistry); - } - - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); - } - public static Builder newBuilder(com.baeldung.protobuf.BaeldungTraining.Student prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); - } - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); - } - - @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; - } /** * Protobuf type {@code baeldung.Student} */ - public static final class Builder extends - com.google.protobuf.GeneratedMessage.Builder implements - // @@protoc_insertion_point(builder_implements:baeldung.Student) - com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_descriptor; - } - - protected com.google.protobuf.GeneratedMessage.FieldAccessorTable - internalGetFieldAccessorTable() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_fieldAccessorTable - .ensureFieldAccessorsInitialized( - com.baeldung.protobuf.BaeldungTraining.Student.class, com.baeldung.protobuf.BaeldungTraining.Student.Builder.class); - } - - // Construct using com.baeldung.protobuf.BaeldungTraining.Student.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } - - private Builder( - com.google.protobuf.GeneratedMessage.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { - getPhoneFieldBuilder(); + public static final class Student extends com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:baeldung.Student) + StudentOrBuilder { + // Use Student.newBuilder() to construct. + private Student(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); } - } - public Builder clear() { - super.clear(); - id_ = 0; - firstName_ = ""; - - lastName_ = ""; - - email_ = ""; - - if (phoneBuilder_ == null) { - phone_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - } else { - phoneBuilder_.clear(); + private Student() { + id_ = 0; + firstName_ = ""; + lastName_ = ""; + email_ = ""; + phone_ = java.util.Collections.emptyList(); } - return this; - } - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_descriptor; - } + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); + } - public com.baeldung.protobuf.BaeldungTraining.Student getDefaultInstanceForType() { - return com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance(); - } + private Student(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + this(); + int mutable_bitField0_ = 0; + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + case 8: { - public com.baeldung.protobuf.BaeldungTraining.Student build() { - com.baeldung.protobuf.BaeldungTraining.Student result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } + id_ = input.readInt32(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); - public com.baeldung.protobuf.BaeldungTraining.Student buildPartial() { - com.baeldung.protobuf.BaeldungTraining.Student result = new com.baeldung.protobuf.BaeldungTraining.Student(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - result.id_ = id_; - result.firstName_ = firstName_; - result.lastName_ = lastName_; - result.email_ = email_; - if (phoneBuilder_ == null) { - if (((bitField0_ & 0x00000010) == 0x00000010)) { - phone_ = java.util.Collections.unmodifiableList(phone_); - bitField0_ = (bitField0_ & ~0x00000010); - } - result.phone_ = phone_; - } else { - result.phone_ = phoneBuilder_.build(); - } - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; - } + firstName_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof com.baeldung.protobuf.BaeldungTraining.Student) { - return mergeFrom((com.baeldung.protobuf.BaeldungTraining.Student)other); - } else { - super.mergeFrom(other); - return this; - } - } + lastName_ = s; + break; + } + case 34: { + java.lang.String s = input.readStringRequireUtf8(); - public Builder mergeFrom(com.baeldung.protobuf.BaeldungTraining.Student other) { - if (other == com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance()) return this; - if (other.getId() != 0) { - setId(other.getId()); - } - if (!other.getFirstName().isEmpty()) { - firstName_ = other.firstName_; - onChanged(); - } - if (!other.getLastName().isEmpty()) { - lastName_ = other.lastName_; - onChanged(); - } - if (!other.getEmail().isEmpty()) { - email_ = other.email_; - onChanged(); - } - if (phoneBuilder_ == null) { - if (!other.phone_.isEmpty()) { - if (phone_.isEmpty()) { - phone_ = other.phone_; - bitField0_ = (bitField0_ & ~0x00000010); - } else { - ensurePhoneIsMutable(); - phone_.addAll(other.phone_); + email_ = s; + break; + } + case 42: { + if (!((mutable_bitField0_ & 0x00000010) == 0x00000010)) { + phone_ = new java.util.ArrayList(); + mutable_bitField0_ |= 0x00000010; + } + phone_.add(input.readMessage(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.parser(), extensionRegistry)); + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this); + } finally { + if (((mutable_bitField0_ & 0x00000010) == 0x00000010)) { + phone_ = java.util.Collections.unmodifiableList(phone_); + } + makeExtensionsImmutable(); } - onChanged(); - } - } else { - if (!other.phone_.isEmpty()) { - if (phoneBuilder_.isEmpty()) { - phoneBuilder_.dispose(); - phoneBuilder_ = null; - phone_ = other.phone_; - bitField0_ = (bitField0_ & ~0x00000010); - phoneBuilder_ = - com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? - getPhoneFieldBuilder() : null; - } else { - phoneBuilder_.addAllMessages(other.phone_); + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_fieldAccessorTable.ensureFieldAccessorsInitialized(com.baeldung.protobuf.BaeldungTraining.Student.class, com.baeldung.protobuf.BaeldungTraining.Student.Builder.class); + } + + /** + * Protobuf enum {@code baeldung.Student.PhoneType} + */ + public enum PhoneType implements com.google.protobuf.ProtocolMessageEnum { + /** + * MOBILE = 0; + */ + MOBILE(0), + /** + * LANDLINE = 1; + */ + LANDLINE(1), UNRECOGNIZED(-1),; + + /** + * MOBILE = 0; + */ + public static final int MOBILE_VALUE = 0; + /** + * LANDLINE = 1; + */ + public static final int LANDLINE_VALUE = 1; + + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException("Can't get the number of an unknown enum value."); + } + return value; } - } - } - onChanged(); - return this; - } - public final boolean isInitialized() { - return true; - } + /** + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static PhoneType valueOf(int value) { + return forNumber(value); + } - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - com.baeldung.protobuf.BaeldungTraining.Student parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (com.baeldung.protobuf.BaeldungTraining.Student) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; + public static PhoneType forNumber(int value) { + switch (value) { + case 0: + return MOBILE; + case 1: + return LANDLINE; + default: + return null; + } + } - private int id_ ; - /** - * optional int32 id = 1; - */ - public int getId() { - return id_; - } - /** - * optional int32 id = 1; - */ - public Builder setId(int value) { - - id_ = value; - onChanged(); - return this; - } - /** - * optional int32 id = 1; - */ - public Builder clearId() { - - id_ = 0; - onChanged(); - return this; - } + public static com.google.protobuf.Internal.EnumLiteMap internalGetValueMap() { + return internalValueMap; + } - private java.lang.Object firstName_ = ""; - /** - * optional string first_name = 2; - */ - public java.lang.String getFirstName() { - java.lang.Object ref = firstName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - firstName_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * optional string first_name = 2; - */ - public com.google.protobuf.ByteString - getFirstNameBytes() { - java.lang.Object ref = firstName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - firstName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string first_name = 2; - */ - public Builder setFirstName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - firstName_ = value; - onChanged(); - return this; - } - /** - * optional string first_name = 2; - */ - public Builder clearFirstName() { - - firstName_ = getDefaultInstance().getFirstName(); - onChanged(); - return this; - } - /** - * optional string first_name = 2; - */ - public Builder setFirstNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - firstName_ = value; - onChanged(); - return this; - } + private static final com.google.protobuf.Internal.EnumLiteMap internalValueMap = new com.google.protobuf.Internal.EnumLiteMap() { + public PhoneType findValueByNumber(int number) { + return PhoneType.forNumber(number); + } + }; - private java.lang.Object lastName_ = ""; - /** - * optional string last_name = 3; - */ - public java.lang.String getLastName() { - java.lang.Object ref = lastName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - lastName_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * optional string last_name = 3; - */ - public com.google.protobuf.ByteString - getLastNameBytes() { - java.lang.Object ref = lastName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - lastName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string last_name = 3; - */ - public Builder setLastName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - lastName_ = value; - onChanged(); - return this; - } - /** - * optional string last_name = 3; - */ - public Builder clearLastName() { - - lastName_ = getDefaultInstance().getLastName(); - onChanged(); - return this; - } - /** - * optional string last_name = 3; - */ - public Builder setLastNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - lastName_ = value; - onChanged(); - return this; - } + public final com.google.protobuf.Descriptors.EnumValueDescriptor getValueDescriptor() { + return getDescriptor().getValues().get(ordinal()); + } - private java.lang.Object email_ = ""; - /** - * optional string email = 4; - */ - public java.lang.String getEmail() { - java.lang.Object ref = email_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - email_ = s; - return s; - } else { - return (java.lang.String) ref; - } - } - /** - * optional string email = 4; - */ - public com.google.protobuf.ByteString - getEmailBytes() { - java.lang.Object ref = email_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - email_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - /** - * optional string email = 4; - */ - public Builder setEmail( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - email_ = value; - onChanged(); - return this; - } - /** - * optional string email = 4; - */ - public Builder clearEmail() { - - email_ = getDefaultInstance().getEmail(); - onChanged(); - return this; - } - /** - * optional string email = 4; - */ - public Builder setEmailBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - email_ = value; - onChanged(); - return this; - } + public final com.google.protobuf.Descriptors.EnumDescriptor getDescriptorForType() { + return getDescriptor(); + } - private java.util.List phone_ = - java.util.Collections.emptyList(); - private void ensurePhoneIsMutable() { - if (!((bitField0_ & 0x00000010) == 0x00000010)) { - phone_ = new java.util.ArrayList(phone_); - bitField0_ |= 0x00000010; - } - } + public static final com.google.protobuf.Descriptors.EnumDescriptor getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.Student.getDescriptor().getEnumTypes().get(0); + } - private com.google.protobuf.RepeatedFieldBuilder< - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder> phoneBuilder_; + private static final PhoneType[] VALUES = values(); - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public java.util.List getPhoneList() { - if (phoneBuilder_ == null) { - return java.util.Collections.unmodifiableList(phone_); - } else { - return phoneBuilder_.getMessageList(); - } - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public int getPhoneCount() { - if (phoneBuilder_ == null) { - return phone_.size(); - } else { - return phoneBuilder_.getCount(); - } - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getPhone(int index) { - if (phoneBuilder_ == null) { - return phone_.get(index); - } else { - return phoneBuilder_.getMessage(index); - } - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public Builder setPhone( - int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber value) { - if (phoneBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePhoneIsMutable(); - phone_.set(index, value); - onChanged(); - } else { - phoneBuilder_.setMessage(index, value); - } - return this; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public Builder setPhone( - int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder builderForValue) { - if (phoneBuilder_ == null) { - ensurePhoneIsMutable(); - phone_.set(index, builderForValue.build()); - onChanged(); - } else { - phoneBuilder_.setMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public Builder addPhone(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber value) { - if (phoneBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePhoneIsMutable(); - phone_.add(value); - onChanged(); - } else { - phoneBuilder_.addMessage(value); - } - return this; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public Builder addPhone( - int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber value) { - if (phoneBuilder_ == null) { - if (value == null) { - throw new NullPointerException(); - } - ensurePhoneIsMutable(); - phone_.add(index, value); - onChanged(); - } else { - phoneBuilder_.addMessage(index, value); - } - return this; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public Builder addPhone( - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder builderForValue) { - if (phoneBuilder_ == null) { - ensurePhoneIsMutable(); - phone_.add(builderForValue.build()); - onChanged(); - } else { - phoneBuilder_.addMessage(builderForValue.build()); - } - return this; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public Builder addPhone( - int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder builderForValue) { - if (phoneBuilder_ == null) { - ensurePhoneIsMutable(); - phone_.add(index, builderForValue.build()); - onChanged(); - } else { - phoneBuilder_.addMessage(index, builderForValue.build()); - } - return this; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public Builder addAllPhone( - java.lang.Iterable values) { - if (phoneBuilder_ == null) { - ensurePhoneIsMutable(); - com.google.protobuf.AbstractMessageLite.Builder.addAll( - values, phone_); - onChanged(); - } else { - phoneBuilder_.addAllMessages(values); - } - return this; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public Builder clearPhone() { - if (phoneBuilder_ == null) { - phone_ = java.util.Collections.emptyList(); - bitField0_ = (bitField0_ & ~0x00000010); - onChanged(); - } else { - phoneBuilder_.clear(); - } - return this; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public Builder removePhone(int index) { - if (phoneBuilder_ == null) { - ensurePhoneIsMutable(); - phone_.remove(index); - onChanged(); - } else { - phoneBuilder_.remove(index); - } - return this; - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder getPhoneBuilder( - int index) { - return getPhoneFieldBuilder().getBuilder(index); - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder getPhoneOrBuilder( - int index) { - if (phoneBuilder_ == null) { - return phone_.get(index); } else { - return phoneBuilder_.getMessageOrBuilder(index); - } - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public java.util.List - getPhoneOrBuilderList() { - if (phoneBuilder_ != null) { - return phoneBuilder_.getMessageOrBuilderList(); - } else { - return java.util.Collections.unmodifiableList(phone_); - } - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder addPhoneBuilder() { - return getPhoneFieldBuilder().addBuilder( - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance()); - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder addPhoneBuilder( - int index) { - return getPhoneFieldBuilder().addBuilder( - index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance()); - } - /** - * repeated .baeldung.Student.PhoneNumber phone = 5; - */ - public java.util.List - getPhoneBuilderList() { - return getPhoneFieldBuilder().getBuilderList(); - } - private com.google.protobuf.RepeatedFieldBuilder< - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder> - getPhoneFieldBuilder() { - if (phoneBuilder_ == null) { - phoneBuilder_ = new com.google.protobuf.RepeatedFieldBuilder< - com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder>( - phone_, - ((bitField0_ & 0x00000010) == 0x00000010), - getParentForChildren(), - isClean()); - phone_ = null; - } - return phoneBuilder_; - } - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } + public static PhoneType valueOf(com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException("EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; + } - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return this; - } + private final int value; + private PhoneType(int value) { + this.value = value; + } - // @@protoc_insertion_point(builder_scope:baeldung.Student) - } + // @@protoc_insertion_point(enum_scope:baeldung.Student.PhoneType) + } - // @@protoc_insertion_point(class_scope:baeldung.Student) - private static final com.baeldung.protobuf.BaeldungTraining.Student DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new com.baeldung.protobuf.BaeldungTraining.Student(); - } + public interface PhoneNumberOrBuilder extends + // @@protoc_insertion_point(interface_extends:baeldung.Student.PhoneNumber) + com.google.protobuf.MessageOrBuilder { - public static com.baeldung.protobuf.BaeldungTraining.Student getDefaultInstance() { - return DEFAULT_INSTANCE; - } + /** + * optional string number = 1; + */ + java.lang.String getNumber(); - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - public Student parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new Student(input, extensionRegistry); - } - }; + /** + * optional string number = 1; + */ + com.google.protobuf.ByteString getNumberBytes(); - public static com.google.protobuf.Parser parser() { - return PARSER; - } + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + int getTypeValue(); - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + com.baeldung.protobuf.BaeldungTraining.Student.PhoneType getType(); + } - public com.baeldung.protobuf.BaeldungTraining.Student getDefaultInstanceForType() { - return DEFAULT_INSTANCE; - } + /** + * Protobuf type {@code baeldung.Student.PhoneNumber} + */ + public static final class PhoneNumber extends com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:baeldung.Student.PhoneNumber) + PhoneNumberOrBuilder { + // Use PhoneNumber.newBuilder() to construct. + private PhoneNumber(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + } - } + private PhoneNumber() { + number_ = ""; + type_ = 0; + } - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_baeldung_Course_descriptor; - private static final - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_baeldung_Course_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_baeldung_Student_descriptor; - private static final - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_baeldung_Student_fieldAccessorTable; - private static final com.google.protobuf.Descriptors.Descriptor - internal_static_baeldung_Student_PhoneNumber_descriptor; - private static final - com.google.protobuf.GeneratedMessage.FieldAccessorTable - internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet getUnknownFields() { + return com.google.protobuf.UnknownFieldSet.getDefaultInstance(); + } - public static com.google.protobuf.Descriptors.FileDescriptor - getDescriptor() { - return descriptor; - } - private static com.google.protobuf.Descriptors.FileDescriptor - descriptor; - static { - java.lang.String[] descriptorData = { - "\n\030resources/baeldung.proto\022\010baeldung\"M\n\006" + - "Course\022\n\n\002id\030\001 \001(\005\022\023\n\013course_name\030\002 \001(\t\022" + - "\"\n\007student\030\003 \003(\0132\021.baeldung.Student\"\352\001\n\007" + - "Student\022\n\n\002id\030\001 \001(\005\022\022\n\nfirst_name\030\002 \001(\t\022" + - "\021\n\tlast_name\030\003 \001(\t\022\r\n\005email\030\004 \001(\t\022,\n\005pho" + - "ne\030\005 \003(\0132\035.baeldung.Student.PhoneNumber\032" + - "H\n\013PhoneNumber\022\016\n\006number\030\001 \001(\t\022)\n\004type\030\002" + - " \001(\0162\033.baeldung.Student.PhoneType\"%\n\tPho" + - "neType\022\n\n\006MOBILE\020\000\022\014\n\010LANDLINE\020\001B)\n\025com." + - "baeldung.protobufB\020BaeldungTrainingb\006pro", - "to3" - }; - com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = - new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { - public com.google.protobuf.ExtensionRegistry assignDescriptors( - com.google.protobuf.Descriptors.FileDescriptor root) { - descriptor = root; - return null; - } + private PhoneNumber(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + this(); + int mutable_bitField0_ = 0; + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!input.skipField(tag)) { + done = true; + } + break; + } + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + number_ = s; + break; + } + case 16: { + int rawValue = input.readEnum(); + + type_ = rawValue; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException(e).setUnfinishedMessage(this); + } finally { + makeExtensionsImmutable(); + } + } + + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable.ensureFieldAccessorsInitialized(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.class, + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder.class); + } + + public static final int NUMBER_FIELD_NUMBER = 1; + private volatile java.lang.Object number_; + + /** + * optional string number = 1; + */ + public java.lang.String getNumber() { + java.lang.Object ref = number_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + number_ = s; + return s; + } + } + + /** + * optional string number = 1; + */ + public com.google.protobuf.ByteString getNumberBytes() { + java.lang.Object ref = number_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + number_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TYPE_FIELD_NUMBER = 2; + private int type_; + + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public int getTypeValue() { + return type_; + } + + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneType getType() { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneType result = com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.forNumber(type_); + return result == null ? com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.UNRECOGNIZED : result; + } + + private byte memoizedIsInitialized = -1; + + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) + return true; + if (isInitialized == 0) + return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (!getNumberBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 1, number_); + } + if (type_ != com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.MOBILE.getNumber()) { + output.writeEnum(2, type_); + } + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) + return size; + + size = 0; + if (!getNumberBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(1, number_); + } + if (type_ != com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.MOBILE.getNumber()) { + size += com.google.protobuf.CodedOutputStream.computeEnumSize(2, type_); + } + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry); + } + + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * Protobuf type {@code baeldung.Student.PhoneNumber} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:baeldung.Student.PhoneNumber) + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable.ensureFieldAccessorsInitialized(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.class, + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder.class); + } + + // Construct using com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + + public Builder clear() { + super.clear(); + number_ = ""; + + type_ = 0; + + return this; + } + + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_PhoneNumber_descriptor; + } + + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getDefaultInstanceForType() { + return com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance(); + } + + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber build() { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber buildPartial() { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber result = new com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber(this); + result.number_ = number_; + result.type_ = type_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber) { + return mergeFrom((com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber other) { + if (other == com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance()) + return this; + if (!other.getNumber().isEmpty()) { + number_ = other.number_; + onChanged(); + } + if (other.type_ != 0) { + setTypeValue(other.getTypeValue()); + } + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object number_ = ""; + + /** + * optional string number = 1; + */ + public java.lang.String getNumber() { + java.lang.Object ref = number_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + number_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * optional string number = 1; + */ + public com.google.protobuf.ByteString getNumberBytes() { + java.lang.Object ref = number_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + number_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * optional string number = 1; + */ + public Builder setNumber(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + number_ = value; + onChanged(); + return this; + } + + /** + * optional string number = 1; + */ + public Builder clearNumber() { + + number_ = getDefaultInstance().getNumber(); + onChanged(); + return this; + } + + /** + * optional string number = 1; + */ + public Builder setNumberBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + number_ = value; + onChanged(); + return this; + } + + private int type_ = 0; + + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public int getTypeValue() { + return type_; + } + + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public Builder setTypeValue(int value) { + type_ = value; + onChanged(); + return this; + } + + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneType getType() { + com.baeldung.protobuf.BaeldungTraining.Student.PhoneType result = com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.forNumber(type_); + return result == null ? com.baeldung.protobuf.BaeldungTraining.Student.PhoneType.UNRECOGNIZED : result; + } + + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public Builder setType(com.baeldung.protobuf.BaeldungTraining.Student.PhoneType value) { + if (value == null) { + throw new NullPointerException(); + } + + type_ = value.getNumber(); + onChanged(); + return this; + } + + /** + * optional .baeldung.Student.PhoneType type = 2; + */ + public Builder clearType() { + + type_ = 0; + onChanged(); + return this; + } + + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + // @@protoc_insertion_point(builder_scope:baeldung.Student.PhoneNumber) + } + + // @@protoc_insertion_point(class_scope:baeldung.Student.PhoneNumber) + private static final com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber(); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() { + public PhoneNumber parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return new PhoneNumber(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private int bitField0_; + public static final int ID_FIELD_NUMBER = 1; + private int id_; + + /** + * optional int32 id = 1; + */ + public int getId() { + return id_; + } + + public static final int FIRST_NAME_FIELD_NUMBER = 2; + private volatile java.lang.Object firstName_; + + /** + * optional string first_name = 2; + */ + public java.lang.String getFirstName() { + java.lang.Object ref = firstName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + firstName_ = s; + return s; + } + } + + /** + * optional string first_name = 2; + */ + public com.google.protobuf.ByteString getFirstNameBytes() { + java.lang.Object ref = firstName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + firstName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int LAST_NAME_FIELD_NUMBER = 3; + private volatile java.lang.Object lastName_; + + /** + * optional string last_name = 3; + */ + public java.lang.String getLastName() { + java.lang.Object ref = lastName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + lastName_ = s; + return s; + } + } + + /** + * optional string last_name = 3; + */ + public com.google.protobuf.ByteString getLastNameBytes() { + java.lang.Object ref = lastName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + lastName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int EMAIL_FIELD_NUMBER = 4; + private volatile java.lang.Object email_; + + /** + * optional string email = 4; + */ + public java.lang.String getEmail() { + java.lang.Object ref = email_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + email_ = s; + return s; + } + } + + /** + * optional string email = 4; + */ + public com.google.protobuf.ByteString getEmailBytes() { + java.lang.Object ref = email_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + email_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int PHONE_FIELD_NUMBER = 5; + private java.util.List phone_; + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List getPhoneList() { + return phone_; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List getPhoneOrBuilderList() { + return phone_; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public int getPhoneCount() { + return phone_.size(); + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getPhone(int index) { + return phone_.get(index); + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder getPhoneOrBuilder(int index) { + return phone_.get(index); + } + + private byte memoizedIsInitialized = -1; + + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) + return true; + if (isInitialized == 0) + return false; + + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { + if (id_ != 0) { + output.writeInt32(1, id_); + } + if (!getFirstNameBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 2, firstName_); + } + if (!getLastNameBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 3, lastName_); + } + if (!getEmailBytes().isEmpty()) { + com.google.protobuf.GeneratedMessage.writeString(output, 4, email_); + } + for (int i = 0; i < phone_.size(); i++) { + output.writeMessage(5, phone_.get(i)); + } + } + + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) + return size; + + size = 0; + if (id_ != 0) { + size += com.google.protobuf.CodedOutputStream.computeInt32Size(1, id_); + } + if (!getFirstNameBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(2, firstName_); + } + if (!getLastNameBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(3, lastName_); + } + if (!getEmailBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessage.computeStringSize(4, email_); + } + for (int i = 0; i < phone_.size(); i++) { + size += com.google.protobuf.CodedOutputStream.computeMessageSize(5, phone_.get(i)); + } + memoizedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student parseDelimitedFrom(java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(com.google.protobuf.CodedInputStream input) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student parseFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + return com.google.protobuf.GeneratedMessage.parseWithIOException(PARSER, input, extensionRegistry); + } + + public Builder newBuilderForType() { + return newBuilder(); + } + + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + + public static Builder newBuilder(com.baeldung.protobuf.BaeldungTraining.Student prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + + public Builder toBuilder() { + return this == DEFAULT_INSTANCE ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + + /** + * Protobuf type {@code baeldung.Student} + */ + public static final class Builder extends com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:baeldung.Student) + com.baeldung.protobuf.BaeldungTraining.StudentOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable internalGetFieldAccessorTable() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_fieldAccessorTable.ensureFieldAccessorsInitialized(com.baeldung.protobuf.BaeldungTraining.Student.class, + com.baeldung.protobuf.BaeldungTraining.Student.Builder.class); + } + + // Construct using com.baeldung.protobuf.BaeldungTraining.Student.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder(com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + getPhoneFieldBuilder(); + } + } + + public Builder clear() { + super.clear(); + id_ = 0; + + firstName_ = ""; + + lastName_ = ""; + + email_ = ""; + + if (phoneBuilder_ == null) { + phone_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + } else { + phoneBuilder_.clear(); + } + return this; + } + + public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { + return com.baeldung.protobuf.BaeldungTraining.internal_static_baeldung_Student_descriptor; + } + + public com.baeldung.protobuf.BaeldungTraining.Student getDefaultInstanceForType() { + return com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance(); + } + + public com.baeldung.protobuf.BaeldungTraining.Student build() { + com.baeldung.protobuf.BaeldungTraining.Student result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public com.baeldung.protobuf.BaeldungTraining.Student buildPartial() { + com.baeldung.protobuf.BaeldungTraining.Student result = new com.baeldung.protobuf.BaeldungTraining.Student(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + result.id_ = id_; + result.firstName_ = firstName_; + result.lastName_ = lastName_; + result.email_ = email_; + if (phoneBuilder_ == null) { + if (((bitField0_ & 0x00000010) == 0x00000010)) { + phone_ = java.util.Collections.unmodifiableList(phone_); + bitField0_ = (bitField0_ & ~0x00000010); + } + result.phone_ = phone_; + } else { + result.phone_ = phoneBuilder_.build(); + } + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof com.baeldung.protobuf.BaeldungTraining.Student) { + return mergeFrom((com.baeldung.protobuf.BaeldungTraining.Student) other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(com.baeldung.protobuf.BaeldungTraining.Student other) { + if (other == com.baeldung.protobuf.BaeldungTraining.Student.getDefaultInstance()) + return this; + if (other.getId() != 0) { + setId(other.getId()); + } + if (!other.getFirstName().isEmpty()) { + firstName_ = other.firstName_; + onChanged(); + } + if (!other.getLastName().isEmpty()) { + lastName_ = other.lastName_; + onChanged(); + } + if (!other.getEmail().isEmpty()) { + email_ = other.email_; + onChanged(); + } + if (phoneBuilder_ == null) { + if (!other.phone_.isEmpty()) { + if (phone_.isEmpty()) { + phone_ = other.phone_; + bitField0_ = (bitField0_ & ~0x00000010); + } else { + ensurePhoneIsMutable(); + phone_.addAll(other.phone_); + } + onChanged(); + } + } else { + if (!other.phone_.isEmpty()) { + if (phoneBuilder_.isEmpty()) { + phoneBuilder_.dispose(); + phoneBuilder_ = null; + phone_ = other.phone_; + bitField0_ = (bitField0_ & ~0x00000010); + phoneBuilder_ = com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders ? getPhoneFieldBuilder() : null; + } else { + phoneBuilder_.addAllMessages(other.phone_); + } + } + } + onChanged(); + return this; + } + + public final boolean isInitialized() { + return true; + } + + public Builder mergeFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { + com.baeldung.protobuf.BaeldungTraining.Student parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (com.baeldung.protobuf.BaeldungTraining.Student) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int bitField0_; + + private int id_; + + /** + * optional int32 id = 1; + */ + public int getId() { + return id_; + } + + /** + * optional int32 id = 1; + */ + public Builder setId(int value) { + + id_ = value; + onChanged(); + return this; + } + + /** + * optional int32 id = 1; + */ + public Builder clearId() { + + id_ = 0; + onChanged(); + return this; + } + + private java.lang.Object firstName_ = ""; + + /** + * optional string first_name = 2; + */ + public java.lang.String getFirstName() { + java.lang.Object ref = firstName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + firstName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * optional string first_name = 2; + */ + public com.google.protobuf.ByteString getFirstNameBytes() { + java.lang.Object ref = firstName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + firstName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * optional string first_name = 2; + */ + public Builder setFirstName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + firstName_ = value; + onChanged(); + return this; + } + + /** + * optional string first_name = 2; + */ + public Builder clearFirstName() { + + firstName_ = getDefaultInstance().getFirstName(); + onChanged(); + return this; + } + + /** + * optional string first_name = 2; + */ + public Builder setFirstNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + firstName_ = value; + onChanged(); + return this; + } + + private java.lang.Object lastName_ = ""; + + /** + * optional string last_name = 3; + */ + public java.lang.String getLastName() { + java.lang.Object ref = lastName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + lastName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * optional string last_name = 3; + */ + public com.google.protobuf.ByteString getLastNameBytes() { + java.lang.Object ref = lastName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + lastName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * optional string last_name = 3; + */ + public Builder setLastName(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + lastName_ = value; + onChanged(); + return this; + } + + /** + * optional string last_name = 3; + */ + public Builder clearLastName() { + + lastName_ = getDefaultInstance().getLastName(); + onChanged(); + return this; + } + + /** + * optional string last_name = 3; + */ + public Builder setLastNameBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + lastName_ = value; + onChanged(); + return this; + } + + private java.lang.Object email_ = ""; + + /** + * optional string email = 4; + */ + public java.lang.String getEmail() { + java.lang.Object ref = email_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + email_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + + /** + * optional string email = 4; + */ + public com.google.protobuf.ByteString getEmailBytes() { + java.lang.Object ref = email_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = com.google.protobuf.ByteString.copyFromUtf8((java.lang.String) ref); + email_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + /** + * optional string email = 4; + */ + public Builder setEmail(java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + email_ = value; + onChanged(); + return this; + } + + /** + * optional string email = 4; + */ + public Builder clearEmail() { + + email_ = getDefaultInstance().getEmail(); + onChanged(); + return this; + } + + /** + * optional string email = 4; + */ + public Builder setEmailBytes(com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + email_ = value; + onChanged(); + return this; + } + + private java.util.List phone_ = java.util.Collections.emptyList(); + + private void ensurePhoneIsMutable() { + if (!((bitField0_ & 0x00000010) == 0x00000010)) { + phone_ = new java.util.ArrayList(phone_); + bitField0_ |= 0x00000010; + } + } + + private com.google.protobuf.RepeatedFieldBuilder phoneBuilder_; + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List getPhoneList() { + if (phoneBuilder_ == null) { + return java.util.Collections.unmodifiableList(phone_); + } else { + return phoneBuilder_.getMessageList(); + } + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public int getPhoneCount() { + if (phoneBuilder_ == null) { + return phone_.size(); + } else { + return phoneBuilder_.getCount(); + } + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber getPhone(int index) { + if (phoneBuilder_ == null) { + return phone_.get(index); + } else { + return phoneBuilder_.getMessage(index); + } + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder setPhone(int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber value) { + if (phoneBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePhoneIsMutable(); + phone_.set(index, value); + onChanged(); + } else { + phoneBuilder_.setMessage(index, value); + } + return this; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder setPhone(int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder builderForValue) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + phone_.set(index, builderForValue.build()); + onChanged(); + } else { + phoneBuilder_.setMessage(index, builderForValue.build()); + } + return this; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addPhone(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber value) { + if (phoneBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePhoneIsMutable(); + phone_.add(value); + onChanged(); + } else { + phoneBuilder_.addMessage(value); + } + return this; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addPhone(int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber value) { + if (phoneBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + ensurePhoneIsMutable(); + phone_.add(index, value); + onChanged(); + } else { + phoneBuilder_.addMessage(index, value); + } + return this; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addPhone(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder builderForValue) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + phone_.add(builderForValue.build()); + onChanged(); + } else { + phoneBuilder_.addMessage(builderForValue.build()); + } + return this; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addPhone(int index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder builderForValue) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + phone_.add(index, builderForValue.build()); + onChanged(); + } else { + phoneBuilder_.addMessage(index, builderForValue.build()); + } + return this; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder addAllPhone(java.lang.Iterable values) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + com.google.protobuf.AbstractMessageLite.Builder.addAll(values, phone_); + onChanged(); + } else { + phoneBuilder_.addAllMessages(values); + } + return this; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder clearPhone() { + if (phoneBuilder_ == null) { + phone_ = java.util.Collections.emptyList(); + bitField0_ = (bitField0_ & ~0x00000010); + onChanged(); + } else { + phoneBuilder_.clear(); + } + return this; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public Builder removePhone(int index) { + if (phoneBuilder_ == null) { + ensurePhoneIsMutable(); + phone_.remove(index); + onChanged(); + } else { + phoneBuilder_.remove(index); + } + return this; + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder getPhoneBuilder(int index) { + return getPhoneFieldBuilder().getBuilder(index); + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumberOrBuilder getPhoneOrBuilder(int index) { + if (phoneBuilder_ == null) { + return phone_.get(index); + } else { + return phoneBuilder_.getMessageOrBuilder(index); + } + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List getPhoneOrBuilderList() { + if (phoneBuilder_ != null) { + return phoneBuilder_.getMessageOrBuilderList(); + } else { + return java.util.Collections.unmodifiableList(phone_); + } + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder addPhoneBuilder() { + return getPhoneFieldBuilder().addBuilder(com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance()); + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.Builder addPhoneBuilder(int index) { + return getPhoneFieldBuilder().addBuilder(index, com.baeldung.protobuf.BaeldungTraining.Student.PhoneNumber.getDefaultInstance()); + } + + /** + * repeated .baeldung.Student.PhoneNumber phone = 5; + */ + public java.util.List getPhoneBuilderList() { + return getPhoneFieldBuilder().getBuilderList(); + } + + private com.google.protobuf.RepeatedFieldBuilder getPhoneFieldBuilder() { + if (phoneBuilder_ == null) { + phoneBuilder_ = new com.google.protobuf.RepeatedFieldBuilder( + phone_, ((bitField0_ & 0x00000010) == 0x00000010), getParentForChildren(), isClean()); + phone_ = null; + } + return phoneBuilder_; + } + + public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + public final Builder mergeUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) { + return this; + } + + // @@protoc_insertion_point(builder_scope:baeldung.Student) + } + + // @@protoc_insertion_point(class_scope:baeldung.Student) + private static final com.baeldung.protobuf.BaeldungTraining.Student DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new com.baeldung.protobuf.BaeldungTraining.Student(); + } + + public static com.baeldung.protobuf.BaeldungTraining.Student getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser PARSER = new com.google.protobuf.AbstractParser() { + public Student parsePartialFrom(com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { + return new Student(input, extensionRegistry); + } }; - com.google.protobuf.Descriptors.FileDescriptor - .internalBuildGeneratedFileFrom(descriptorData, - new com.google.protobuf.Descriptors.FileDescriptor[] { - }, assigner); - internal_static_baeldung_Course_descriptor = - getDescriptor().getMessageTypes().get(0); - internal_static_baeldung_Course_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_baeldung_Course_descriptor, - new java.lang.String[] { "Id", "CourseName", "Student", }); - internal_static_baeldung_Student_descriptor = - getDescriptor().getMessageTypes().get(1); - internal_static_baeldung_Student_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_baeldung_Student_descriptor, - new java.lang.String[] { "Id", "FirstName", "LastName", "Email", "Phone", }); - internal_static_baeldung_Student_PhoneNumber_descriptor = - internal_static_baeldung_Student_descriptor.getNestedTypes().get(0); - internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable = new - com.google.protobuf.GeneratedMessage.FieldAccessorTable( - internal_static_baeldung_Student_PhoneNumber_descriptor, - new java.lang.String[] { "Number", "Type", }); - } - // @@protoc_insertion_point(outer_class_scope) + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + public com.baeldung.protobuf.BaeldungTraining.Student getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + private static final com.google.protobuf.Descriptors.Descriptor internal_static_baeldung_Course_descriptor; + private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_baeldung_Course_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor internal_static_baeldung_Student_descriptor; + private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_baeldung_Student_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor internal_static_baeldung_Student_PhoneNumber_descriptor; + private static final com.google.protobuf.GeneratedMessage.FieldAccessorTable internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { + return descriptor; + } + + private static com.google.protobuf.Descriptors.FileDescriptor descriptor; + static { + java.lang.String[] descriptorData = { "\n\030resources/baeldung.proto\022\010baeldung\"M\n\006" + "Course\022\n\n\002id\030\001 \001(\005\022\023\n\013course_name\030\002 \001(\t\022" + + "\"\n\007student\030\003 \003(\0132\021.baeldung.Student\"\352\001\n\007" + "Student\022\n\n\002id\030\001 \001(\005\022\022\n\nfirst_name\030\002 \001(\t\022" + + "\021\n\tlast_name\030\003 \001(\t\022\r\n\005email\030\004 \001(\t\022,\n\005pho" + "ne\030\005 \003(\0132\035.baeldung.Student.PhoneNumber\032" + "H\n\013PhoneNumber\022\016\n\006number\030\001 \001(\t\022)\n\004type\030\002" + + " \001(\0162\033.baeldung.Student.PhoneType\"%\n\tPho" + "neType\022\n\n\006MOBILE\020\000\022\014\n\010LANDLINE\020\001B)\n\025com." + "baeldung.protobufB\020BaeldungTrainingb\006pro", "to3" }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors(com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] {}, assigner); + internal_static_baeldung_Course_descriptor = getDescriptor().getMessageTypes().get(0); + internal_static_baeldung_Course_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_baeldung_Course_descriptor, new java.lang.String[] { "Id", "CourseName", "Student", }); + internal_static_baeldung_Student_descriptor = getDescriptor().getMessageTypes().get(1); + internal_static_baeldung_Student_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_baeldung_Student_descriptor, new java.lang.String[] { "Id", "FirstName", "LastName", "Email", "Phone", }); + internal_static_baeldung_Student_PhoneNumber_descriptor = internal_static_baeldung_Student_descriptor.getNestedTypes().get(0); + internal_static_baeldung_Student_PhoneNumber_fieldAccessorTable = new com.google.protobuf.GeneratedMessage.FieldAccessorTable(internal_static_baeldung_Student_PhoneNumber_descriptor, new java.lang.String[] { "Number", "Type", }); + } + + // @@protoc_insertion_point(outer_class_scope) } diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java index 60f24abf93..cbafd7d224 100644 --- a/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/CourseRepository.java @@ -7,11 +7,11 @@ import java.util.Map; public class CourseRepository { private final Map courses; - - public CourseRepository (Map courses) { + + public CourseRepository(Map courses) { this.courses = courses; } - + public Course getCourse(int id) { return courses.get(id); } From 2b2022c80abd3f7b7ed6bf8ec70bdc323d5a0a7a Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sat, 18 Jun 2016 23:28:32 +0200 Subject: [PATCH 086/283] Refactor spring-protobuf --- .../src/main/java/com/baeldung/protobuf/Application.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java b/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java index 234c3e3382..76f0e45244 100644 --- a/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java +++ b/spring-protobuf/src/main/java/com/baeldung/protobuf/Application.java @@ -29,10 +29,10 @@ public class Application { } @Bean - public CourseRepository createStubCourses() { + public CourseRepository createTestCourses() { Map courses = new HashMap<>(); - Course course1 = Course.newBuilder().setId(1).setCourseName("REST with Spring").addAllStudent(createStubStudents()).build(); + Course course1 = Course.newBuilder().setId(1).setCourseName("REST with Spring").addAllStudent(createTestStudents()).build(); Course course2 = Course.newBuilder().setId(2).setCourseName("Learn Spring Security").addAllStudent(new ArrayList<>()).build(); @@ -42,7 +42,7 @@ public class Application { return new CourseRepository(courses); } - private List createStubStudents() { + private List createTestStudents() { PhoneNumber phone1 = createPhone("123456", PhoneType.MOBILE); Student student1 = createStudent(1, "John", "Doe", "john.doe@baeldung.com", Arrays.asList(phone1)); From 27d58fc2007fe0d8e9b0239b7a03d4bf1e80a5c8 Mon Sep 17 00:00:00 2001 From: bdragan Date: Sun, 19 Jun 2016 23:36:22 +0200 Subject: [PATCH 087/283] Code examples for the 'Binary Data Formats in a Spring REST API' article. --- spring-rest/pom.xml | 11 +- .../java/org/baeldung/config/WebConfig.java | 5 +- .../converter/KryoHttpMessageConverter.java | 73 +++ .../web/controller/FooController.java | 6 + .../java/org/baeldung/web/dto/FooProtos.java | 620 ++++++++++++++++++ ...MessageConvertersIntegrationTestsCase.java | 35 + 6 files changed, 748 insertions(+), 2 deletions(-) create mode 100644 spring-rest/src/main/java/org/baeldung/config/converter/KryoHttpMessageConverter.java create mode 100644 spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 767f90a6a6..b05a795c6d 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -155,7 +155,16 @@ spring-test ${spring.version} - + + com.google.protobuf + protobuf-java + 2.6.1 + + + com.esotericsoftware.kryo + kryo + 2.24.0 + diff --git a/spring-rest/src/main/java/org/baeldung/config/WebConfig.java b/spring-rest/src/main/java/org/baeldung/config/WebConfig.java index 999f890ebb..120f1b272a 100644 --- a/spring-rest/src/main/java/org/baeldung/config/WebConfig.java +++ b/spring-rest/src/main/java/org/baeldung/config/WebConfig.java @@ -3,11 +3,13 @@ package org.baeldung.config; import java.text.SimpleDateFormat; import java.util.List; +import org.baeldung.config.converter.KryoHttpMessageConverter; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter; import org.springframework.http.converter.xml.MarshallingHttpMessageConverter; import org.springframework.oxm.xstream.XStreamMarshaller; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @@ -33,7 +35,8 @@ public class WebConfig extends WebMvcConfigurerAdapter { builder.indentOutput(true).dateFormat(new SimpleDateFormat("dd-MM-yyyy hh:mm")); messageConverters.add(new MappingJackson2HttpMessageConverter(builder.build())); // messageConverters.add(new MappingJackson2XmlHttpMessageConverter(builder.createXmlMapper(true).build())); - + messageConverters.add(new ProtobufHttpMessageConverter()); + messageConverters.add(new KryoHttpMessageConverter()); super.configureMessageConverters(messageConverters); } diff --git a/spring-rest/src/main/java/org/baeldung/config/converter/KryoHttpMessageConverter.java b/spring-rest/src/main/java/org/baeldung/config/converter/KryoHttpMessageConverter.java new file mode 100644 index 0000000000..371ad333c8 --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/config/converter/KryoHttpMessageConverter.java @@ -0,0 +1,73 @@ +/* + * Copyright 2002-2014 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.baeldung.config.converter; + +import java.io.IOException; + +import org.baeldung.web.dto.Foo; +import org.springframework.http.HttpInputMessage; +import org.springframework.http.HttpOutputMessage; +import org.springframework.http.MediaType; +import org.springframework.http.converter.AbstractHttpMessageConverter; + +import com.esotericsoftware.kryo.Kryo; +import com.esotericsoftware.kryo.io.Input; +import com.esotericsoftware.kryo.io.Output; + +/** + * An {@code HttpMessageConverter} that can read and write Kryo messages. + */ +public class KryoHttpMessageConverter extends AbstractHttpMessageConverter { + + public static final MediaType KRYO = new MediaType("application", "x-kryo"); + + private static final ThreadLocal kryoThreadLocal = new ThreadLocal() { + @Override + protected Kryo initialValue() { + final Kryo kryo = new Kryo(); + kryo.register(Foo.class, 1); + return kryo; + } + }; + + public KryoHttpMessageConverter() { + super(KRYO); + } + + @Override + protected boolean supports(final Class clazz) { + return Object.class.isAssignableFrom(clazz); + } + + @Override + protected Object readInternal(final Class clazz, final HttpInputMessage inputMessage) throws IOException { + final Input input = new Input(inputMessage.getBody()); + return kryoThreadLocal.get().readClassAndObject(input); + } + + @Override + protected void writeInternal(final Object object, final HttpOutputMessage outputMessage) throws IOException { + final Output output = new Output(outputMessage.getBody()); + kryoThreadLocal.get().writeClassAndObject(output, object); + output.flush(); + } + + @Override + protected MediaType getDefaultContentType(final Object object) { + return KRYO; + } +} diff --git a/spring-rest/src/main/java/org/baeldung/web/controller/FooController.java b/spring-rest/src/main/java/org/baeldung/web/controller/FooController.java index ed6b150403..386c64bb09 100644 --- a/spring-rest/src/main/java/org/baeldung/web/controller/FooController.java +++ b/spring-rest/src/main/java/org/baeldung/web/controller/FooController.java @@ -4,6 +4,7 @@ import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; import static org.apache.commons.lang3.RandomStringUtils.randomNumeric; import org.baeldung.web.dto.Foo; +import org.baeldung.web.dto.FooProtos; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; @@ -38,4 +39,9 @@ public class FooController { return foo; } + @RequestMapping(method = RequestMethod.GET, value = "/foos/{id}", produces = { "application/x-protobuf" }) + @ResponseBody + public FooProtos.Foo findProtoById(@PathVariable final long id) { + return FooProtos.Foo.newBuilder().setId(1).setName("Foo Name").build(); + } } diff --git a/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java b/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java new file mode 100644 index 0000000000..61251ea33a --- /dev/null +++ b/spring-rest/src/main/java/org/baeldung/web/dto/FooProtos.java @@ -0,0 +1,620 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: FooProtos.proto + +package org.baeldung.web.dto; + +public final class FooProtos { + private FooProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + } + public interface FooOrBuilder extends + // @@protoc_insertion_point(interface_extends:baeldung.Foo) + com.google.protobuf.MessageOrBuilder { + + /** + * required int64 id = 1; + */ + boolean hasId(); + /** + * required int64 id = 1; + */ + long getId(); + + /** + * required string name = 2; + */ + boolean hasName(); + /** + * required string name = 2; + */ + java.lang.String getName(); + /** + * required string name = 2; + */ + com.google.protobuf.ByteString + getNameBytes(); + } + /** + * Protobuf type {@code baeldung.Foo} + */ + public static final class Foo extends + com.google.protobuf.GeneratedMessage implements + // @@protoc_insertion_point(message_implements:baeldung.Foo) + FooOrBuilder { + // Use Foo.newBuilder() to construct. + private Foo(com.google.protobuf.GeneratedMessage.Builder builder) { + super(builder); + this.unknownFields = builder.getUnknownFields(); + } + private Foo(boolean noInit) { this.unknownFields = com.google.protobuf.UnknownFieldSet.getDefaultInstance(); } + + private static final Foo defaultInstance; + public static Foo getDefaultInstance() { + return defaultInstance; + } + + public Foo getDefaultInstanceForType() { + return defaultInstance; + } + + private final com.google.protobuf.UnknownFieldSet unknownFields; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Foo( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + initFields(); + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + default: { + if (!parseUnknownField(input, unknownFields, + extensionRegistry, tag)) { + done = true; + } + break; + } + case 8: { + bitField0_ |= 0x00000001; + id_ = input.readInt64(); + break; + } + case 18: { + com.google.protobuf.ByteString bs = input.readBytes(); + bitField0_ |= 0x00000002; + name_ = bs; + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e.getMessage()).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); + } + + public static com.google.protobuf.Parser PARSER = + new com.google.protobuf.AbstractParser() { + public Foo parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Foo(input, extensionRegistry); + } + }; + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + private int bitField0_; + public static final int ID_FIELD_NUMBER = 1; + private long id_; + /** + * required int64 id = 1; + */ + public boolean hasId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required int64 id = 1; + */ + public long getId() { + return id_; + } + + public static final int NAME_FIELD_NUMBER = 2; + private java.lang.Object name_; + /** + * required string name = 2; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * required string name = 2; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } + } + /** + * required string name = 2; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private void initFields() { + id_ = 0L; + name_ = ""; + } + private byte memoizedIsInitialized = -1; + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + if (!hasId()) { + memoizedIsInitialized = 0; + return false; + } + if (!hasName()) { + memoizedIsInitialized = 0; + return false; + } + memoizedIsInitialized = 1; + return true; + } + + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + getSerializedSize(); + if (((bitField0_ & 0x00000001) == 0x00000001)) { + output.writeInt64(1, id_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + output.writeBytes(2, getNameBytes()); + } + getUnknownFields().writeTo(output); + } + + private int memoizedSerializedSize = -1; + public int getSerializedSize() { + int size = memoizedSerializedSize; + if (size != -1) return size; + + size = 0; + if (((bitField0_ & 0x00000001) == 0x00000001)) { + size += com.google.protobuf.CodedOutputStream + .computeInt64Size(1, id_); + } + if (((bitField0_ & 0x00000002) == 0x00000002)) { + size += com.google.protobuf.CodedOutputStream + .computeBytesSize(2, getNameBytes()); + } + size += getUnknownFields().getSerializedSize(); + memoizedSerializedSize = size; + return size; + } + + private static final long serialVersionUID = 0L; + @java.lang.Override + protected java.lang.Object writeReplace() + throws java.io.ObjectStreamException { + return super.writeReplace(); + } + + public static org.baeldung.web.dto.FooProtos.Foo parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.baeldung.web.dto.FooProtos.Foo parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.baeldung.web.dto.FooProtos.Foo parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.baeldung.web.dto.FooProtos.Foo parseFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.baeldung.web.dto.FooProtos.Foo parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input); + } + public static org.baeldung.web.dto.FooProtos.Foo parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseDelimitedFrom(input, extensionRegistry); + } + public static org.baeldung.web.dto.FooProtos.Foo parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return PARSER.parseFrom(input); + } + public static org.baeldung.web.dto.FooProtos.Foo parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return PARSER.parseFrom(input, extensionRegistry); + } + + public static Builder newBuilder() { return Builder.create(); } + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder(org.baeldung.web.dto.FooProtos.Foo prototype) { + return newBuilder().mergeFrom(prototype); + } + public Builder toBuilder() { return newBuilder(this); } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code baeldung.Foo} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessage.Builder implements + // @@protoc_insertion_point(builder_implements:baeldung.Foo) + org.baeldung.web.dto.FooProtos.FooOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; + } + + protected com.google.protobuf.GeneratedMessage.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.baeldung.web.dto.FooProtos.Foo.class, org.baeldung.web.dto.FooProtos.Foo.Builder.class); + } + + // Construct using org.baeldung.web.dto.FooProtos.Foo.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessage.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessage.alwaysUseFieldBuilders) { + } + } + private static Builder create() { + return new Builder(); + } + + public Builder clear() { + super.clear(); + id_ = 0L; + bitField0_ = (bitField0_ & ~0x00000001); + name_ = ""; + bitField0_ = (bitField0_ & ~0x00000002); + return this; + } + + public Builder clone() { + return create().mergeFrom(buildPartial()); + } + + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.baeldung.web.dto.FooProtos.internal_static_baeldung_Foo_descriptor; + } + + public org.baeldung.web.dto.FooProtos.Foo getDefaultInstanceForType() { + return org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance(); + } + + public org.baeldung.web.dto.FooProtos.Foo build() { + org.baeldung.web.dto.FooProtos.Foo result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + public org.baeldung.web.dto.FooProtos.Foo buildPartial() { + org.baeldung.web.dto.FooProtos.Foo result = new org.baeldung.web.dto.FooProtos.Foo(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; + if (((from_bitField0_ & 0x00000001) == 0x00000001)) { + to_bitField0_ |= 0x00000001; + } + result.id_ = id_; + if (((from_bitField0_ & 0x00000002) == 0x00000002)) { + to_bitField0_ |= 0x00000002; + } + result.name_ = name_; + result.bitField0_ = to_bitField0_; + onBuilt(); + return result; + } + + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.baeldung.web.dto.FooProtos.Foo) { + return mergeFrom((org.baeldung.web.dto.FooProtos.Foo)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.baeldung.web.dto.FooProtos.Foo other) { + if (other == org.baeldung.web.dto.FooProtos.Foo.getDefaultInstance()) return this; + if (other.hasId()) { + setId(other.getId()); + } + if (other.hasName()) { + bitField0_ |= 0x00000002; + name_ = other.name_; + onChanged(); + } + this.mergeUnknownFields(other.getUnknownFields()); + return this; + } + + public final boolean isInitialized() { + if (!hasId()) { + + return false; + } + if (!hasName()) { + + return false; + } + return true; + } + + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.baeldung.web.dto.FooProtos.Foo parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.baeldung.web.dto.FooProtos.Foo) e.getUnfinishedMessage(); + throw e; + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private long id_ ; + /** + * required int64 id = 1; + */ + public boolean hasId() { + return ((bitField0_ & 0x00000001) == 0x00000001); + } + /** + * required int64 id = 1; + */ + public long getId() { + return id_; + } + /** + * required int64 id = 1; + */ + public Builder setId(long value) { + bitField0_ |= 0x00000001; + id_ = value; + onChanged(); + return this; + } + /** + * required int64 id = 1; + */ + public Builder clearId() { + bitField0_ = (bitField0_ & ~0x00000001); + id_ = 0L; + onChanged(); + return this; + } + + private java.lang.Object name_ = ""; + /** + * required string name = 2; + */ + public boolean hasName() { + return ((bitField0_ & 0x00000002) == 0x00000002); + } + /** + * required string name = 2; + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + if (bs.isValidUtf8()) { + name_ = s; + } + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * required string name = 2; + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * required string name = 2; + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + name_ = value; + onChanged(); + return this; + } + /** + * required string name = 2; + */ + public Builder clearName() { + bitField0_ = (bitField0_ & ~0x00000002); + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + * required string name = 2; + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + name_ = value; + onChanged(); + return this; + } + + // @@protoc_insertion_point(builder_scope:baeldung.Foo) + } + + static { + defaultInstance = new Foo(true); + defaultInstance.initFields(); + } + + // @@protoc_insertion_point(class_scope:baeldung.Foo) + } + + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_baeldung_Foo_descriptor; + private static + com.google.protobuf.GeneratedMessage.FieldAccessorTable + internal_static_baeldung_Foo_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\017FooProtos.proto\022\010baeldung\"\037\n\003Foo\022\n\n\002id" + + "\030\001 \002(\003\022\014\n\004name\030\002 \002(\tB!\n\024org.baeldung.web" + + ".dtoB\tFooProtos" + }; + com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = + new com.google.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { + public com.google.protobuf.ExtensionRegistry assignDescriptors( + com.google.protobuf.Descriptors.FileDescriptor root) { + descriptor = root; + return null; + } + }; + com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }, assigner); + internal_static_baeldung_Foo_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_baeldung_Foo_fieldAccessorTable = new + com.google.protobuf.GeneratedMessage.FieldAccessorTable( + internal_static_baeldung_Foo_descriptor, + new java.lang.String[] { "Id", "Name", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java b/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java index c21641ca22..1536f14bc8 100644 --- a/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java +++ b/spring-rest/src/test/java/org/baeldung/web/test/SpringHttpMessageConvertersIntegrationTestsCase.java @@ -7,7 +7,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import org.baeldung.config.converter.KryoHttpMessageConverter; import org.baeldung.web.dto.Foo; +import org.baeldung.web.dto.FooProtos; import org.junit.Assert; import org.junit.Test; import org.springframework.http.HttpEntity; @@ -17,6 +19,7 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter; import org.springframework.http.converter.xml.MarshallingHttpMessageConverter; import org.springframework.oxm.xstream.XStreamMarshaller; import org.springframework.web.client.RestTemplate; @@ -94,6 +97,38 @@ public class SpringHttpMessageConvertersIntegrationTestsCase { Assert.assertEquals(resource.getId(), fooResponse.getId()); } + @Test + public void givenConsumingProtobuf_whenReadingTheFoo_thenCorrect() { + final String URI = BASE_URI + "foos/{id}"; + + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setMessageConverters(Arrays.asList(new ProtobufHttpMessageConverter())); + final HttpHeaders headers = new HttpHeaders(); + headers.setAccept(Arrays.asList(ProtobufHttpMessageConverter.PROTOBUF)); + final HttpEntity entity = new HttpEntity(headers); + + final ResponseEntity response = restTemplate.exchange(URI, HttpMethod.GET, entity, FooProtos.Foo.class, "1"); + final FooProtos.Foo resource = response.getBody(); + + assertThat(resource, notNullValue()); + } + + @Test + public void givenConsumingKryo_whenReadingTheFoo_thenCorrect() { + final String URI = BASE_URI + "foos/{id}"; + + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setMessageConverters(Arrays.asList(new KryoHttpMessageConverter())); + final HttpHeaders headers = new HttpHeaders(); + headers.setAccept(Arrays.asList(KryoHttpMessageConverter.KRYO)); + final HttpEntity entity = new HttpEntity(headers); + + final ResponseEntity response = restTemplate.exchange(URI, HttpMethod.GET, entity, Foo.class, "1"); + final Foo resource = response.getBody(); + + assertThat(resource, notNullValue()); + } + // UTIL private List> getMessageConverters() { From 57411aa1c297b90aa20b51d36411a7310529d93a Mon Sep 17 00:00:00 2001 From: bdragan Date: Sun, 19 Jun 2016 23:43:13 +0200 Subject: [PATCH 088/283] Removed copy-pasted comments. --- .../converter/KryoHttpMessageConverter.java | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/spring-rest/src/main/java/org/baeldung/config/converter/KryoHttpMessageConverter.java b/spring-rest/src/main/java/org/baeldung/config/converter/KryoHttpMessageConverter.java index 371ad333c8..7e63a3ba9e 100644 --- a/spring-rest/src/main/java/org/baeldung/config/converter/KryoHttpMessageConverter.java +++ b/spring-rest/src/main/java/org/baeldung/config/converter/KryoHttpMessageConverter.java @@ -1,19 +1,3 @@ -/* - * Copyright 2002-2014 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - package org.baeldung.config.converter; import java.io.IOException; From 83df968617730c42f6871324916e21304cd74433 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Mon, 20 Jun 2016 07:49:39 +0200 Subject: [PATCH 089/283] Initial commit --- assertj-introduction/pom.xml | 38 +++++++++++++++++++ .../com/baeldung/assertj/AssertJDemoTest.java | 10 +++++ pom.xml | 2 + 3 files changed, 50 insertions(+) create mode 100644 assertj-introduction/pom.xml create mode 100644 assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java diff --git a/assertj-introduction/pom.xml b/assertj-introduction/pom.xml new file mode 100644 index 0000000000..21cd0c0121 --- /dev/null +++ b/assertj-introduction/pom.xml @@ -0,0 +1,38 @@ + + + 4.0.0 + + com.baeldung + assertj-introduction + 1.0.0-SNAPSHOT + + + + junit + junit + 4.12 + + + org.assertj + assertj-core + 3.4.1 + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.3 + + 1.8 + 1.8 + + + + + \ No newline at end of file diff --git a/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java b/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java new file mode 100644 index 0000000000..3f4cb390bb --- /dev/null +++ b/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java @@ -0,0 +1,10 @@ +package com.baeldung.assertj; + +import org.junit.Test; + +public class AssertJDemoTest { + + @Test + public void shouldTest() throws Exception { + } +} diff --git a/pom.xml b/pom.xml index 19c602091d..505b72e1ab 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,8 @@ apache-fop + assertj-introduction + core-java core-java-8 gson From 3d0b89a66a8642c162500f5deac62ec091d3635a Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Tue, 21 Jun 2016 18:02:14 +0200 Subject: [PATCH 090/283] Add JSON Schema validation --- json/.classpath | 32 +++++++++++++++++++ json/.project | 23 +++++++++++++ json/pom.xml | 25 +++++++++++++++ .../baeldung/json/schema/JSONSchemaTest.java | 32 +++++++++++++++++++ json/src/test/resources/product.json | 5 +++ json/src/test/resources/schema.json | 22 +++++++++++++ 6 files changed, 139 insertions(+) create mode 100644 json/.classpath create mode 100644 json/.project create mode 100644 json/pom.xml create mode 100644 json/src/test/java/org/baeldung/json/schema/JSONSchemaTest.java create mode 100644 json/src/test/resources/product.json create mode 100644 json/src/test/resources/schema.json diff --git a/json/.classpath b/json/.classpath new file mode 100644 index 0000000000..4f9b9b5af7 --- /dev/null +++ b/json/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/json/.project b/json/.project new file mode 100644 index 0000000000..8424469786 --- /dev/null +++ b/json/.project @@ -0,0 +1,23 @@ + + + json + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + diff --git a/json/pom.xml b/json/pom.xml new file mode 100644 index 0000000000..47f1f25aa2 --- /dev/null +++ b/json/pom.xml @@ -0,0 +1,25 @@ + + 4.0.0 + org.baeldung + json + 0.0.1-SNAPSHOT + + + + + org.everit.json + org.everit.json.schema + 1.3.0 + + + + junit + junit + 4.12 + test + + + + + diff --git a/json/src/test/java/org/baeldung/json/schema/JSONSchemaTest.java b/json/src/test/java/org/baeldung/json/schema/JSONSchemaTest.java new file mode 100644 index 0000000000..5e8f024ac3 --- /dev/null +++ b/json/src/test/java/org/baeldung/json/schema/JSONSchemaTest.java @@ -0,0 +1,32 @@ +package org.baeldung.json.schema; + +import org.everit.json.schema.Schema; +import org.everit.json.schema.ValidationException; +import org.everit.json.schema.loader.SchemaLoader; + +import org.json.JSONObject; +import org.json.JSONTokener; +import org.junit.Test; + +public class JSONSchemaTest { + + @Test + public void validateJSON() { + + JSONObject jsonSchema = new JSONObject(new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/schema.json"))); + JSONObject jsonSubject = new JSONObject(new JSONTokener(JSONSchemaTest.class.getResourceAsStream("/product.json"))); + + Schema schema = SchemaLoader.load(jsonSchema); + + try { + + schema.validate(jsonSubject); + } + + catch (ValidationException e) { + + System.out.println(e.getMessage()); + e.getCausingExceptions().stream().map(ValidationException::getMessage).forEach(System.out::println); + } + } +} diff --git a/json/src/test/resources/product.json b/json/src/test/resources/product.json new file mode 100644 index 0000000000..7c55d8c7a5 --- /dev/null +++ b/json/src/test/resources/product.json @@ -0,0 +1,5 @@ +{ + "id": 1, + "name": "Lampshade", + "price": 0 +} diff --git a/json/src/test/resources/schema.json b/json/src/test/resources/schema.json new file mode 100644 index 0000000000..7cf99d76e0 --- /dev/null +++ b/json/src/test/resources/schema.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Product", + "description": "A product from the catalog", + "type": "object", + "properties": { + "id": { + "description": "The unique identifier for a product", + "type": "integer" + }, + "name": { + "description": "Name of the product", + "type": "string" + }, + "price": { + "type": "number", + "minimum": 0, + "exclusiveMinimum": true + } + }, + "required": ["id", "name", "price"] +} From 3dbc073fa3763e3f60c30bffdd1695a9ca79c2dc Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Tue, 21 Jun 2016 18:04:13 +0200 Subject: [PATCH 091/283] Add gatling example --- gatling/.cache-tests | 153 +++++++++++++++++++++++++++++++++++++++++++ gatling/.classpath | 32 +++++++++ gatling/.project | 24 +++++++ 3 files changed, 209 insertions(+) create mode 100644 gatling/.cache-tests create mode 100644 gatling/.classpath create mode 100644 gatling/.project diff --git a/gatling/.cache-tests b/gatling/.cache-tests new file mode 100644 index 0000000000..9d7ddf685f --- /dev/null +++ b/gatling/.cache-tests @@ -0,0 +1,153 @@ +format version: 5 +output mode: +1 items +0 -> multiple +output directories: +2 items +C:\develop\git\tutorials\gatling\src\test\resources -> C:\develop\git\tutorials\gatling\target\test-classes +C:\develop\git\tutorials\gatling\src\test\scala -> C:\develop\git\tutorials\gatling\target\test-classes +compile options: +8 items +0 -> -javabootclasspath +1 -> C:\develop\Java\jdk1.8.0_77\jre\lib\resources.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\jsse.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\jce.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\charsets.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\jfr.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\access-bridge-64.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\cldrdata.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\dnsns.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\jaccess.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\jfxrt.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\localedata.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\nashorn.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunec.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunjce_provider.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunmscapi.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\sunpkcs11.jar;C:\develop\Java\jdk1.8.0_77\jre\lib\ext\zipfs.jar +2 -> -javaextdirs +3 -> +4 -> -bootclasspath +5 -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar +6 -> -encoding +7 -> UTF-8 +javac options: +0 items +compiler version: +1 items +0 -> 2.11.8 +compile order: +1 items +0 -> Mixed +name hashing: +1 items +0 -> false +products: +9 items +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling\target\test-classes\Engine$.class +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling\target\test-classes\Engine$delayedInit$body.class +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling\target\test-classes\Engine.class +C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala -> C:\develop\git\tutorials\gatling\target\test-classes\IDEPathHelper$.class +C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala -> C:\develop\git\tutorials\gatling\target\test-classes\IDEPathHelper.class +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\develop\git\tutorials\gatling\target\test-classes\org\baeldung\RecordedSimulation.class +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling\target\test-classes\Recorder$.class +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling\target\test-classes\Recorder$delayedInit$body.class +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling\target\test-classes\Recorder.class +binary dependencies: +15 items +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-app\2.2.0\gatling-app-2.2.0.jar +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar +C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar +C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-http\2.2.0\gatling-http-2.2.0.jar +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-jdbc\2.2.0\gatling-jdbc-2.2.0.jar +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-recorder\2.2.0\gatling-recorder-2.2.0.jar +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar +direct source dependencies: +2 items +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala +direct external dependencies: +0 items +public inherited source dependencies: +0 items +public inherited external dependencies: +0 items +member reference internal dependencies: +0 items +member reference external dependencies: +0 items +inheritance internal dependencies: +0 items +inheritance external dependencies: +0 items +class names: +9 items +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> Engine +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> Engine$ +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> Engine$delayedInit$body +C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala -> IDEPathHelper +C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala -> IDEPathHelper$ +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> org.baeldung.RecordedSimulation +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> Recorder +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> Recorder$ +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> Recorder$delayedInit$body +used names: +0 items +product stamps: +9 items +C:\develop\git\tutorials\gatling\target\test-classes\Engine$.class -> lastModified(1465396871370) +C:\develop\git\tutorials\gatling\target\test-classes\Engine$delayedInit$body.class -> lastModified(1465396871373) +C:\develop\git\tutorials\gatling\target\test-classes\Engine.class -> lastModified(1465396871361) +C:\develop\git\tutorials\gatling\target\test-classes\IDEPathHelper$.class -> lastModified(1465396871385) +C:\develop\git\tutorials\gatling\target\test-classes\IDEPathHelper.class -> lastModified(1465396871376) +C:\develop\git\tutorials\gatling\target\test-classes\org\baeldung\RecordedSimulation.class -> lastModified(1465396871404) +C:\develop\git\tutorials\gatling\target\test-classes\Recorder$.class -> lastModified(1465396871393) +C:\develop\git\tutorials\gatling\target\test-classes\Recorder$delayedInit$body.class -> lastModified(1465396871396) +C:\develop\git\tutorials\gatling\target\test-classes\Recorder.class -> lastModified(1465396871388) +source stamps: +4 items +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> hash(2eceb2c4a888a866d01f75f215a951e46b5e115d) +C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala -> hash(a3e6002ad6e383bea2cb96ec7ffb22ba92b58222) +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> hash(6bc105187fe6b04ac3d39df88ed51f1955655362) +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> hash(f4fad197bc0e77df05ac1f50d3fa7f2f04fb288d) +binary stamps: +8 items +C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -> lastModified(1463581376873) +C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -> lastModified(1460466041763) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-app\2.2.0\gatling-app-2.2.0.jar -> lastModified(1463577683111) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar -> lastModified(1463577434095) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar -> lastModified(1463577425041) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-http\2.2.0\gatling-http-2.2.0.jar -> lastModified(1463577691216) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-jdbc\2.2.0\gatling-jdbc-2.2.0.jar -> lastModified(1463577767127) +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-recorder\2.2.0\gatling-recorder-2.2.0.jar -> lastModified(1463577812366) +class names: +8 items +C:\develop\IDE\sts-bundle\sts-3.7.3.RELEASE\plugins\org.scala-lang.scala-library_2.11.8.v20160304-115712-1706a37eb8.jar -> scala.reflect.ClassTag$ +C:\develop\Java\jdk1.8.0_77\jre\lib\rt.jar -> java.lang.Object +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-app\2.2.0\gatling-app-2.2.0.jar -> io.gatling.app.Gatling$ +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-commons\2.2.0\gatling-commons-2.2.0.jar -> io.gatling.commons.util.TypeCaster$ +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-core\2.2.0\gatling-core-2.2.0.jar -> io.gatling.core.scenario.Simulation +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-http\2.2.0\gatling-http-2.2.0.jar -> io.gatling.http.request.builder.HttpRequestBuilder$ +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-jdbc\2.2.0\gatling-jdbc-2.2.0.jar -> io.gatling.jdbc.Predef$ +C:\Users\Ivan Paolillo\.m2\repository\io\gatling\gatling-recorder\2.2.0\gatling-recorder-2.2.0.jar -> io.gatling.recorder.GatlingRecorder$ +internal apis: +4 items +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> +rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHA7lBuUAHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAAGRW5naW5ldXIAGltMeHNidGkuYXBpLlR5cGVQYXJhbWV0ZXI72W0mDyid8rYCAAB4cAAAAAB+cgAYeHNidGkuYXBpLkRlZmluaXRpb25UeXBlAAAAAAAAAAASAAB4cgAOamF2YS5sYW5nLkVudW0AAAAAAAAAABIAAHhwdAAGTW9kdWxldXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAnQAEHNjYWxhLmRlcHJlY2F0ZWR0ABpzY2FsYS5kZXByZWNhdGVkT3ZlcnJpZGluZ3NyABN4c2J0aS5TYWZlTGF6eSRJbXBsO5FPEfRFTMkCAANaAAhiaXRtYXAkMEwAAl90dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEZXZhbHQAEUxzY2FsYS9GdW5jdGlvbjA7eHIAFnhzYnRpLmFwaS5BYnN0cmFjdExhennTd7UBX7vnoAIAAHhwAXNyABN4c2J0aS5hcGkuRW1wdHlUeXBlvP2eRkk7iSQCAAB4cgAUeHNidGkuYXBpLlNpbXBsZVR5cGVyeGKIISO/QAIAAHhyAA54c2J0aS5hcGkuVHlwZT9q2SEWSarKAgAAeHBwc3EAfgAwAXNyABN4c2J0aS5hcGkuU3RydWN0dXJlqar5gJNv2AACAANMAAhkZWNsYXJlZHEAfgAVTAAJaW5oZXJpdGVkcQB+ABVMAAdwYXJlbnRzcQB+ABV4cQB+ADdzcQB+ADABdXEAfgAQAAAAAHBzcQB+ADABdXEAfgAQAAAAAXNyAA14c2J0aS5hcGkuRGVmUr6f4ny0NmkCAAJMAApyZXR1cm5UeXBldAAQTHhzYnRpL2FwaS9UeXBlO1sAD3ZhbHVlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1BhcmFtZXRlckxpc3Q7eHEAfgAWcQB+ACB1cQB+ACEAAAABc3IAFHhzYnRpLmFwaS5Bbm5vdGF0aW9u3g6BovZcCrICAAJbAAlhcmd1bWVudHN0AB9bTHhzYnRpL2FwaS9Bbm5vdGF0aW9uQXJndW1lbnQ7TAAEYmFzZXEAfgBBeHB1cgAfW0x4c2J0aS5hcGkuQW5ub3RhdGlvbkFyZ3VtZW50O1Gdpo84JQ94AgAAeHAAAAABc3IAHHhzYnRpLmFwaS5Bbm5vdGF0aW9uQXJndW1lbnTWRbHYAxsXfAIAAkwABG5hbWVxAH4AHEwABXZhbHVlcQB+ABx4cHQAAHQAKigibWFpbiBzaG91bGQgbm90IGJlIG92ZXJyaWRkZW4iLCIyLjExLjAiKXNyABR4c2J0aS5hcGkuUHJvamVjdGlvbvPSjVTpRaQtAgACTAACaWRxAH4AHEwABnByZWZpeHQAFkx4c2J0aS9hcGkvU2ltcGxlVHlwZTt4cQB+ADZ0ABRkZXByZWNhdGVkT3ZlcnJpZGluZ3NyABN4c2J0aS5hcGkuU2luZ2xldG9u/Kdf+M9W5EYCAAFMAARwYXRodAAQTHhzYnRpL2FwaS9QYXRoO3hxAH4ANnNyAA54c2J0aS5hcGkuUGF0aJs9XAjOpSeEAgABWwAKY29tcG9uZW50c3QAGltMeHNidGkvYXBpL1BhdGhDb21wb25lbnQ7eHB1cgAaW0x4c2J0aS5hcGkuUGF0aENvbXBvbmVudDtD2gl0LWcWdAIAAHhwAAAAAnNyAAx4c2J0aS5hcGkuSWSYMmyLN1PEQAIAAUwAAmlkcQB+ABx4cgAXeHNidGkuYXBpLlBhdGhDb21wb25lbnRfmiJbLoafvAIAAHhwdAAFc2NhbGFzcgAOeHNidGkuYXBpLlRoaXPbCe2mzFpAXAIAAHhxAH4AW3NxAH4AIwB0AARtYWludXEAfgAmAAAAAHNxAH4ATnQABFVuaXRxAH4AVHVyABpbTHhzYnRpLmFwaS5QYXJhbWV0ZXJMaXN0O/XTOh3ys3DuAgAAeHAAAAABc3IAF3hzYnRpLmFwaS5QYXJhbWV0ZXJMaXN01sW8HGRJdOMCAAJaAAppc0ltcGxpY2l0WwAKcGFyYW1ldGVyc3QAHFtMeHNidGkvYXBpL01ldGhvZFBhcmFtZXRlcjt4cAB1cgAcW0x4c2J0aS5hcGkuTWV0aG9kUGFyYW1ldGVyO8+4xV2l3bVtAgAAeHAAAAABc3IAGXhzYnRpLmFwaS5NZXRob2RQYXJhbWV0ZXIfRa4X00mw6gIABFoACmhhc0RlZmF1bHRMAAhtb2RpZmllcnQAHUx4c2J0aS9hcGkvUGFyYW1ldGVyTW9kaWZpZXI7TAAEbmFtZXEAfgAcTAADdHBlcQB+AEF4cAB+cgAbeHNidGkuYXBpLlBhcmFtZXRlck1vZGlmaWVyAAAAAAAAAAASAAB4cQB+ACl0AAVQbGFpbnQABGFyZ3NzcgAXeHNidGkuYXBpLlBhcmFtZXRlcml6ZWQWbO5pA8m7fwIAAkwACGJhc2VUeXBlcQB+AE9bAA10eXBlQXJndW1lbnRzdAARW0x4c2J0aS9hcGkvVHlwZTt4cQB+ADZzcQB+AE50AAVBcnJheXEAfgBUdXIAEVtMeHNidGkuYXBpLlR5cGU7dP+lWnv56UECAAB4cAAAAAFzcQB+AE50AAZTdHJpbmdzcQB+AFJzcQB+AFV1cQB+AFgAAAADc3EAfgBadAAEamF2YXNxAH4AWnQABGxhbmdxAH4AX3BzcQB+ADABdXEAfgB4AAAABHNxAH4ATnQAA0FwcHEAfgBUc3EAfgBOdAALRGVsYXllZEluaXRxAH4AVHNxAH4ATnQABk9iamVjdHEAfgB8c3EAfgBOdAADQW55cQB+AFRwcHVyABRbTHhzYnRpLmFwaS5QYWNrYWdlO1sTGTdwpyehAgAAeHAAAAAAc3IAFXhzYnRpLmFwaS5Db21waWxhdGlvbu364MNq6KBCAgACSgAJc3RhcnRUaW1lWwAHb3V0cHV0c3QAGltMeHNidGkvYXBpL091dHB1dFNldHRpbmc7eHAAAAFVMHW8R3VyABpbTHhzYnRpLmFwaS5PdXRwdXRTZXR0aW5nO39qwvOnh6VCAgAAeHAAAAACc3IAF3hzYnRpLmFwaS5PdXRwdXRTZXR0aW5netmaR3T7HXsCAAJMAA9vdXRwdXREaXJlY3RvcnlxAH4AHEwAD3NvdXJjZURpcmVjdG9yeXEAfgAceHB0ADRDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1x0YXJnZXRcdGVzdC1jbGFzc2VzdAAvQzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmdcc3JjXHRlc3Rcc2NhbGFzcQB+AJR0ADRDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1x0YXJnZXRcdGVzdC1jbGFzc2VzdAAzQzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmdcc3JjXHRlc3RccmVzb3VyY2VzdXIAAltCrPMX+AYIVOACAAB4cAAAABQuzrLEqIioZtAfdfIVqVHka14RXQ== +C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala -> +rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHCXMg60AHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAANSURFUGF0aEhlbHBlcnVyABpbTHhzYnRpLmFwaS5UeXBlUGFyYW1ldGVyO9ltJg8onfK2AgAAeHAAAAAAfnIAGHhzYnRpLmFwaS5EZWZpbml0aW9uVHlwZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQABk1vZHVsZXVyABNbTGphdmEubGFuZy5TdHJpbmc7rdJW5+kde0cCAAB4cAAAAABzcgATeHNidGkuU2FmZUxhenkkSW1wbDuRTxH0RUzJAgADWgAIYml0bWFwJDBMAAJfdHQAEkxqYXZhL2xhbmcvT2JqZWN0O0wABGV2YWx0ABFMc2NhbGEvRnVuY3Rpb24wO3hyABZ4c2J0aS5hcGkuQWJzdHJhY3RMYXp503e1AV+756ACAAB4cAFzcgATeHNidGkuYXBpLkVtcHR5VHlwZbz9nkZJO4kkAgAAeHIAFHhzYnRpLmFwaS5TaW1wbGVUeXBlcnhiiCEjv0ACAAB4cgAOeHNidGkuYXBpLlR5cGU/atkhFkmqygIAAHhwcHNxAH4ALgFzcgATeHNidGkuYXBpLlN0cnVjdHVyZamq+YCTb9gAAgADTAAIZGVjbGFyZWRxAH4AFUwACWluaGVyaXRlZHEAfgAVTAAHcGFyZW50c3EAfgAVeHEAfgA1c3EAfgAuAXVxAH4AEAAAAABwc3EAfgAuAXVxAH4AEAAAAABwc3EAfgAuAXVyABFbTHhzYnRpLmFwaS5UeXBlO3T/pVp7+elBAgAAeHAAAAACc3IAFHhzYnRpLmFwaS5Qcm9qZWN0aW9u89KNVOlFpC0CAAJMAAJpZHEAfgAcTAAGcHJlZml4dAAWTHhzYnRpL2FwaS9TaW1wbGVUeXBlO3hxAH4ANHQABk9iamVjdHNyABN4c2J0aS5hcGkuU2luZ2xldG9u/Kdf+M9W5EYCAAFMAARwYXRodAAQTHhzYnRpL2FwaS9QYXRoO3hxAH4ANHNyAA54c2J0aS5hcGkuUGF0aJs9XAjOpSeEAgABWwAKY29tcG9uZW50c3QAGltMeHNidGkvYXBpL1BhdGhDb21wb25lbnQ7eHB1cgAaW0x4c2J0aS5hcGkuUGF0aENvbXBvbmVudDtD2gl0LWcWdAIAAHhwAAAAA3NyAAx4c2J0aS5hcGkuSWSYMmyLN1PEQAIAAUwAAmlkcQB+ABx4cgAXeHNidGkuYXBpLlBhdGhDb21wb25lbnRfmiJbLoafvAIAAHhwdAAEamF2YXNxAH4ATXQABGxhbmdzcgAOeHNidGkuYXBpLlRoaXPbCe2mzFpAXAIAAHhxAH4ATnNxAH4AQXQAA0FueXNxAH4ARXNxAH4ASHVxAH4ASwAAAAJzcQB+AE10AAVzY2FsYXEAfgBUcHB1cgAUW0x4c2J0aS5hcGkuUGFja2FnZTtbExk3cKcnoQIAAHhwAAAAAHNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVTB1vEd1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5cQB+ABxMAA9zb3VyY2VEaXJlY3RvcnlxAH4AHHhwdAA0QzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmdcdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAL0M6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHNyY1x0ZXN0XHNjYWxhc3EAfgBjdAA0QzpcZGV2ZWxvcFxnaXRcdHV0b3JpYWxzXGdhdGxpbmdcdGFyZ2V0XHRlc3QtY2xhc3Nlc3QAM0M6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHNyY1x0ZXN0XHJlc291cmNlc3VyAAJbQqzzF/gGCFTgAgAAeHAAAAAUo+YAKtbjg76iy5bsf/siupK1giI= +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> +rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHARTQnpAHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAAfb3JnLmJhZWxkdW5nLlJlY29yZGVkU2ltdWxhdGlvbnVyABpbTHhzYnRpLmFwaS5UeXBlUGFyYW1ldGVyO9ltJg8onfK2AgAAeHAAAAAAfnIAGHhzYnRpLmFwaS5EZWZpbml0aW9uVHlwZQAAAAAAAAAAEgAAeHIADmphdmEubGFuZy5FbnVtAAAAAAAAAAASAAB4cHQACENsYXNzRGVmdXIAE1tMamF2YS5sYW5nLlN0cmluZzut0lbn6R17RwIAAHhwAAAAAHNyABN4c2J0aS5TYWZlTGF6eSRJbXBsO5FPEfRFTMkCAANaAAhiaXRtYXAkMEwAAl90dAASTGphdmEvbGFuZy9PYmplY3Q7TAAEZXZhbHQAEUxzY2FsYS9GdW5jdGlvbjA7eHIAFnhzYnRpLmFwaS5BYnN0cmFjdExhennTd7UBX7vnoAIAAHhwAXNyABN4c2J0aS5hcGkuRW1wdHlUeXBlvP2eRkk7iSQCAAB4cgAUeHNidGkuYXBpLlNpbXBsZVR5cGVyeGKIISO/QAIAAHhyAA54c2J0aS5hcGkuVHlwZT9q2SEWSarKAgAAeHBwc3EAfgAuAXNyABN4c2J0aS5hcGkuU3RydWN0dXJlqar5gJNv2AACAANMAAhkZWNsYXJlZHEAfgAVTAAJaW5oZXJpdGVkcQB+ABVMAAdwYXJlbnRzcQB+ABV4cQB+ADVzcQB+AC4BdXEAfgAQAAAAAHBzcQB+AC4BdXEAfgAQAAAAAHBzcQB+AC4BdXIAEVtMeHNidGkuYXBpLlR5cGU7dP+lWnv56UECAAB4cAAAAANzcgAUeHNidGkuYXBpLlByb2plY3Rpb27z0o1U6UWkLQIAAkwAAmlkcQB+ABxMAAZwcmVmaXh0ABZMeHNidGkvYXBpL1NpbXBsZVR5cGU7eHEAfgA0dAAKU2ltdWxhdGlvbnNyABN4c2J0aS5hcGkuU2luZ2xldG9u/Kdf+M9W5EYCAAFMAARwYXRodAAQTHhzYnRpL2FwaS9QYXRoO3hxAH4ANHNyAA54c2J0aS5hcGkuUGF0aJs9XAjOpSeEAgABWwAKY29tcG9uZW50c3QAGltMeHNidGkvYXBpL1BhdGhDb21wb25lbnQ7eHB1cgAaW0x4c2J0aS5hcGkuUGF0aENvbXBvbmVudDtD2gl0LWcWdAIAAHhwAAAABXNyAAx4c2J0aS5hcGkuSWSYMmyLN1PEQAIAAUwAAmlkcQB+ABx4cgAXeHNidGkuYXBpLlBhdGhDb21wb25lbnRfmiJbLoafvAIAAHhwdAACaW9zcQB+AE10AAdnYXRsaW5nc3EAfgBNdAAEY29yZXNxAH4ATXQACHNjZW5hcmlvc3IADnhzYnRpLmFwaS5UaGlz2wntpsxaQFwCAAB4cQB+AE5zcQB+AEF0AAZPYmplY3RzcQB+AEVzcQB+AEh1cQB+AEsAAAADc3EAfgBNdAAEamF2YXNxAH4ATXQABGxhbmdxAH4AWHNxAH4AQXQAA0FueXNxAH4ARXNxAH4ASHVxAH4ASwAAAAJzcQB+AE10AAVzY2FsYXEAfgBYcHB1cgAUW0x4c2J0aS5hcGkuUGFja2FnZTtbExk3cKcnoQIAAHhwAAAAAnNyABF4c2J0aS5hcGkuUGFja2FnZX5Zj/auzjlYAgABTAAEbmFtZXEAfgAceHB0AAxvcmcuYmFlbGR1bmdzcQB+AGt0AANvcmdzcgAVeHNidGkuYXBpLkNvbXBpbGF0aW9u7frgw2rooEICAAJKAAlzdGFydFRpbWVbAAdvdXRwdXRzdAAaW0x4c2J0aS9hcGkvT3V0cHV0U2V0dGluZzt4cAAAAVUwdbxHdXIAGltMeHNidGkuYXBpLk91dHB1dFNldHRpbmc7f2rC86eHpUICAAB4cAAAAAJzcgAXeHNidGkuYXBpLk91dHB1dFNldHRpbmd62ZpHdPsdewIAAkwAD291dHB1dERpcmVjdG9yeXEAfgAcTAAPc291cmNlRGlyZWN0b3J5cQB+ABx4cHQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0AC9DOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxzY2FsYXNxAH4AdXQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0ADNDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxyZXNvdXJjZXN1cgACW0Ks8xf4BghU4AIAAHhwAAAAFGvBBRh/5rBKw9Od+I7VHxlVZVNi +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> +rO0ABXNyABB4c2J0aS5hcGkuU291cmNlFlpwRASfbtoCAAZJAAdhcGlIYXNoWgAIaGFzTWFjcm9MABhfaW50ZXJuYWxPbmx5X25hbWVIYXNoZXN0ACRMeHNidGkvYXBpL19pbnRlcm5hbE9ubHlfTmFtZUhhc2hlcztMAANhcGl0ABVMeHNidGkvYXBpL1NvdXJjZUFQSTtMAAtjb21waWxhdGlvbnQAF0x4c2J0aS9hcGkvQ29tcGlsYXRpb247WwAEaGFzaHQAAltCeHD3nMHWAHNyACJ4c2J0aS5hcGkuX2ludGVybmFsT25seV9OYW1lSGFzaGVzVNq+mfrU7EwCAAJbAA9pbXBsaWNpdE1lbWJlcnN0ACNbTHhzYnRpL2FwaS9faW50ZXJuYWxPbmx5X05hbWVIYXNoO1sADnJlZ3VsYXJNZW1iZXJzcQB+AAd4cHVyACNbTHhzYnRpLmFwaS5faW50ZXJuYWxPbmx5X05hbWVIYXNoO0lagLbdlov0AgAAeHAAAAAAdXEAfgAJAAAAAHNyABN4c2J0aS5hcGkuU291cmNlQVBJuV6n+SkjOKQCAAJbAAtkZWZpbml0aW9uc3QAF1tMeHNidGkvYXBpL0RlZmluaXRpb247WwAIcGFja2FnZXN0ABRbTHhzYnRpL2FwaS9QYWNrYWdlO3hwdXIAF1tMeHNidGkuYXBpLkRlZmluaXRpb247iMlc57TjXg4CAAB4cAAAAAFzcgATeHNidGkuYXBpLkNsYXNzTGlrZYM0HKHfsJdsAgAETAAOZGVmaW5pdGlvblR5cGV0ABpMeHNidGkvYXBpL0RlZmluaXRpb25UeXBlO1sAEHNhdmVkQW5ub3RhdGlvbnN0ABNbTGphdmEvbGFuZy9TdHJpbmc7TAAIc2VsZlR5cGV0ABBMeHNidGkvYXBpL0xhenk7TAAJc3RydWN0dXJlcQB+ABV4cgAheHNidGkuYXBpLlBhcmFtZXRlcml6ZWREZWZpbml0aW9u+RFusdVQPOICAAFbAA50eXBlUGFyYW1ldGVyc3QAGltMeHNidGkvYXBpL1R5cGVQYXJhbWV0ZXI7eHIAFHhzYnRpLmFwaS5EZWZpbml0aW9uhyob6HFC40YCAARMAAZhY2Nlc3N0ABJMeHNidGkvYXBpL0FjY2VzcztbAAthbm5vdGF0aW9uc3QAF1tMeHNidGkvYXBpL0Fubm90YXRpb247TAAJbW9kaWZpZXJzdAAVTHhzYnRpL2FwaS9Nb2RpZmllcnM7TAAEbmFtZXQAEkxqYXZhL2xhbmcvU3RyaW5nO3hwc3IAEHhzYnRpLmFwaS5QdWJsaWO6WD2ubC1gQgIAAHhyABB4c2J0aS5hcGkuQWNjZXNz3WKa+B1jMUgCAAB4cHVyABdbTHhzYnRpLmFwaS5Bbm5vdGF0aW9uO+uX6xkQ9o1IAgAAeHAAAAAAc3IAE3hzYnRpLmFwaS5Nb2RpZmllcnPHERMhaZzcJAIAAUIABWZsYWdzeHAAdAAIUmVjb3JkZXJ1cgAaW0x4c2J0aS5hcGkuVHlwZVBhcmFtZXRlcjvZbSYPKJ3ytgIAAHhwAAAAAH5yABh4c2J0aS5hcGkuRGVmaW5pdGlvblR5cGUAAAAAAAAAABIAAHhyAA5qYXZhLmxhbmcuRW51bQAAAAAAAAAAEgAAeHB0AAZNb2R1bGV1cgATW0xqYXZhLmxhbmcuU3RyaW5nO63SVufpHXtHAgAAeHAAAAACdAAQc2NhbGEuZGVwcmVjYXRlZHQAGnNjYWxhLmRlcHJlY2F0ZWRPdmVycmlkaW5nc3IAE3hzYnRpLlNhZmVMYXp5JEltcGw7kU8R9EVMyQIAA1oACGJpdG1hcCQwTAACX3R0ABJMamF2YS9sYW5nL09iamVjdDtMAARldmFsdAARTHNjYWxhL0Z1bmN0aW9uMDt4cgAWeHNidGkuYXBpLkFic3RyYWN0TGF6edN3tQFfu+egAgAAeHABc3IAE3hzYnRpLmFwaS5FbXB0eVR5cGW8/Z5GSTuJJAIAAHhyABR4c2J0aS5hcGkuU2ltcGxlVHlwZXJ4YoghI79AAgAAeHIADnhzYnRpLmFwaS5UeXBlP2rZIRZJqsoCAAB4cHBzcQB+ADABc3IAE3hzYnRpLmFwaS5TdHJ1Y3R1cmWpqvmAk2/YAAIAA0wACGRlY2xhcmVkcQB+ABVMAAlpbmhlcml0ZWRxAH4AFUwAB3BhcmVudHNxAH4AFXhxAH4AN3NxAH4AMAF1cQB+ABAAAAAAcHNxAH4AMAF1cQB+ABAAAAABc3IADXhzYnRpLmFwaS5EZWZSvp/ifLQ2aQIAAkwACnJldHVyblR5cGV0ABBMeHNidGkvYXBpL1R5cGU7WwAPdmFsdWVQYXJhbWV0ZXJzdAAaW0x4c2J0aS9hcGkvUGFyYW1ldGVyTGlzdDt4cQB+ABZxAH4AIHVxAH4AIQAAAAFzcgAUeHNidGkuYXBpLkFubm90YXRpb27eDoGi9lwKsgIAAlsACWFyZ3VtZW50c3QAH1tMeHNidGkvYXBpL0Fubm90YXRpb25Bcmd1bWVudDtMAARiYXNlcQB+AEF4cHVyAB9bTHhzYnRpLmFwaS5Bbm5vdGF0aW9uQXJndW1lbnQ7UZ2mjzglD3gCAAB4cAAAAAFzcgAceHNidGkuYXBpLkFubm90YXRpb25Bcmd1bWVudNZFsdgDGxd8AgACTAAEbmFtZXEAfgAcTAAFdmFsdWVxAH4AHHhwdAAAdAAqKCJtYWluIHNob3VsZCBub3QgYmUgb3ZlcnJpZGRlbiIsIjIuMTEuMCIpc3IAFHhzYnRpLmFwaS5Qcm9qZWN0aW9u89KNVOlFpC0CAAJMAAJpZHEAfgAcTAAGcHJlZml4dAAWTHhzYnRpL2FwaS9TaW1wbGVUeXBlO3hxAH4ANnQAFGRlcHJlY2F0ZWRPdmVycmlkaW5nc3IAE3hzYnRpLmFwaS5TaW5nbGV0b278p1/4z1bkRgIAAUwABHBhdGh0ABBMeHNidGkvYXBpL1BhdGg7eHEAfgA2c3IADnhzYnRpLmFwaS5QYXRomz1cCM6lJ4QCAAFbAApjb21wb25lbnRzdAAaW0x4c2J0aS9hcGkvUGF0aENvbXBvbmVudDt4cHVyABpbTHhzYnRpLmFwaS5QYXRoQ29tcG9uZW50O0PaCXQtZxZ0AgAAeHAAAAACc3IADHhzYnRpLmFwaS5JZJgybIs3U8RAAgABTAACaWRxAH4AHHhyABd4c2J0aS5hcGkuUGF0aENvbXBvbmVudF+aIlsuhp+8AgAAeHB0AAVzY2FsYXNyAA54c2J0aS5hcGkuVGhpc9sJ7abMWkBcAgAAeHEAfgBbc3EAfgAjAHQABG1haW51cQB+ACYAAAAAc3EAfgBOdAAEVW5pdHEAfgBUdXIAGltMeHNidGkuYXBpLlBhcmFtZXRlckxpc3Q79dM6HfKzcO4CAAB4cAAAAAFzcgAXeHNidGkuYXBpLlBhcmFtZXRlckxpc3TWxbwcZEl04wIAAloACmlzSW1wbGljaXRbAApwYXJhbWV0ZXJzdAAcW0x4c2J0aS9hcGkvTWV0aG9kUGFyYW1ldGVyO3hwAHVyABxbTHhzYnRpLmFwaS5NZXRob2RQYXJhbWV0ZXI7z7jFXaXdtW0CAAB4cAAAAAFzcgAZeHNidGkuYXBpLk1ldGhvZFBhcmFtZXRlch9FrhfTSbDqAgAEWgAKaGFzRGVmYXVsdEwACG1vZGlmaWVydAAdTHhzYnRpL2FwaS9QYXJhbWV0ZXJNb2RpZmllcjtMAARuYW1lcQB+ABxMAAN0cGVxAH4AQXhwAH5yABt4c2J0aS5hcGkuUGFyYW1ldGVyTW9kaWZpZXIAAAAAAAAAABIAAHhxAH4AKXQABVBsYWludAAEYXJnc3NyABd4c2J0aS5hcGkuUGFyYW1ldGVyaXplZBZs7mkDybt/AgACTAAIYmFzZVR5cGVxAH4AT1sADXR5cGVBcmd1bWVudHN0ABFbTHhzYnRpL2FwaS9UeXBlO3hxAH4ANnNxAH4ATnQABUFycmF5cQB+AFR1cgARW0x4c2J0aS5hcGkuVHlwZTt0/6Vae/npQQIAAHhwAAAAAXNxAH4ATnQABlN0cmluZ3NxAH4AUnNxAH4AVXVxAH4AWAAAAANzcQB+AFp0AARqYXZhc3EAfgBadAAEbGFuZ3EAfgBfcHNxAH4AMAF1cQB+AHgAAAAEc3EAfgBOdAADQXBwcQB+AFRzcQB+AE50AAtEZWxheWVkSW5pdHEAfgBUc3EAfgBOdAAGT2JqZWN0cQB+AHxzcQB+AE50AANBbnlxAH4AVHBwdXIAFFtMeHNidGkuYXBpLlBhY2thZ2U7WxMZN3CnJ6ECAAB4cAAAAABzcgAVeHNidGkuYXBpLkNvbXBpbGF0aW9u7frgw2rooEICAAJKAAlzdGFydFRpbWVbAAdvdXRwdXRzdAAaW0x4c2J0aS9hcGkvT3V0cHV0U2V0dGluZzt4cAAAAVUwdbxHdXIAGltMeHNidGkuYXBpLk91dHB1dFNldHRpbmc7f2rC86eHpUICAAB4cAAAAAJzcgAXeHNidGkuYXBpLk91dHB1dFNldHRpbmd62ZpHdPsdewIAAkwAD291dHB1dERpcmVjdG9yeXEAfgAcTAAPc291cmNlRGlyZWN0b3J5cQB+ABx4cHQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0AC9DOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxzY2FsYXNxAH4AlHQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0ADNDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxyZXNvdXJjZXN1cgACW0Ks8xf4BghU4AIAAHhwAAAAFPT60Ze8DnffBawfUNP6fy8E+yiN +external apis: +0 items +source infos: +4 items +C:\develop\git\tutorials\gatling\src\test\scala\Engine.scala -> +AAAAAAAAAAA= +C:\develop\git\tutorials\gatling\src\test\scala\IDEPathHelper.scala -> +AAAAAAAAAAA= +C:\develop\git\tutorials\gatling\src\test\scala\org\baeldung\RecordedSimulation.scala -> +AAAAAAAAAAA= +C:\develop\git\tutorials\gatling\src\test\scala\Recorder.scala -> +AAAAAAAAAAA= +compilations: +4 items +0 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVTBzw0J1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0AC9DOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxzY2FsYXNxAH4ABXQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0ADNDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxyZXNvdXJjZXM= +1 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVTBz8ix1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0AC9DOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxzY2FsYXNxAH4ABXQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0ADNDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxyZXNvdXJjZXM= +2 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVTB0hal1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0AC9DOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxzY2FsYXNxAH4ABXQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0ADNDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxyZXNvdXJjZXM= +3 -> rO0ABXNyABV4c2J0aS5hcGkuQ29tcGlsYXRpb27t+uDDauigQgIAAkoACXN0YXJ0VGltZVsAB291dHB1dHN0ABpbTHhzYnRpL2FwaS9PdXRwdXRTZXR0aW5nO3hwAAABVTB1vEd1cgAaW0x4c2J0aS5hcGkuT3V0cHV0U2V0dGluZzt/asLzp4elQgIAAHhwAAAAAnNyABd4c2J0aS5hcGkuT3V0cHV0U2V0dGluZ3rZmkd0+x17AgACTAAPb3V0cHV0RGlyZWN0b3J5dAASTGphdmEvbGFuZy9TdHJpbmc7TAAPc291cmNlRGlyZWN0b3J5cQB+AAZ4cHQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0AC9DOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxzY2FsYXNxAH4ABXQANEM6XGRldmVsb3BcZ2l0XHR1dG9yaWFsc1xnYXRsaW5nXHRhcmdldFx0ZXN0LWNsYXNzZXN0ADNDOlxkZXZlbG9wXGdpdFx0dXRvcmlhbHNcZ2F0bGluZ1xzcmNcdGVzdFxyZXNvdXJjZXM= diff --git a/gatling/.classpath b/gatling/.classpath new file mode 100644 index 0000000000..92fb998075 --- /dev/null +++ b/gatling/.classpath @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gatling/.project b/gatling/.project new file mode 100644 index 0000000000..69864064ad --- /dev/null +++ b/gatling/.project @@ -0,0 +1,24 @@ + + + gatling + + + + + + org.eclipse.m2e.core.maven2Builder + + + + + org.scala-ide.sdt.core.scalabuilder + + + + + + org.scala-ide.sdt.core.scalanature + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + From 9f21a102c44b9e236972f86e43476c19ef975e28 Mon Sep 17 00:00:00 2001 From: Ivan Paolillo Date: Tue, 21 Jun 2016 18:13:48 +0200 Subject: [PATCH 092/283] Add JSON Schema validation --- json/.classpath | 32 ----------------- json/.project | 23 ------------ spring-mvc-xml/.classpath | 74 +++++++++++++++++++-------------------- 3 files changed, 37 insertions(+), 92 deletions(-) delete mode 100644 json/.classpath delete mode 100644 json/.project diff --git a/json/.classpath b/json/.classpath deleted file mode 100644 index 4f9b9b5af7..0000000000 --- a/json/.classpath +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/json/.project b/json/.project deleted file mode 100644 index 8424469786..0000000000 --- a/json/.project +++ /dev/null @@ -1,23 +0,0 @@ - - - json - - - - - - org.eclipse.jdt.core.javabuilder - - - - - org.eclipse.m2e.core.maven2Builder - - - - - - org.eclipse.jdt.core.javanature - org.eclipse.m2e.core.maven2Nature - - diff --git a/spring-mvc-xml/.classpath b/spring-mvc-xml/.classpath index 6b533711d3..a642d37ceb 100644 --- a/spring-mvc-xml/.classpath +++ b/spring-mvc-xml/.classpath @@ -1,37 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a871f2558fa32e7c40c08b9eeb90f2b3acdb6ecc Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 21 Jun 2016 19:53:15 +0200 Subject: [PATCH 093/283] Add first set of assertions --- .../java/com/baeldung/assertj/domain/Dog.java | 19 +++++++ .../com/baeldung/assertj/AssertJDemoTest.java | 57 ++++++++++++++++++- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 assertj-introduction/src/main/java/com/baeldung/assertj/domain/Dog.java diff --git a/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Dog.java b/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Dog.java new file mode 100644 index 0000000000..adfcf05225 --- /dev/null +++ b/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Dog.java @@ -0,0 +1,19 @@ +package com.baeldung.assertj.domain; + +public class Dog { + private String name; + private Float weight; + + public Dog(String name, Float weight) { + this.name = name; + this.weight = weight; + } + + public String getName() { + return name; + } + + public Float getWeight() { + return weight; + } +} diff --git a/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java b/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java index 3f4cb390bb..249cb865d9 100644 --- a/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java +++ b/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java @@ -1,10 +1,65 @@ package com.baeldung.assertj; +import com.baeldung.assertj.domain.Dog; import org.junit.Test; +import java.util.Arrays; +import java.util.List; +import java.util.NoSuchElementException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.withPrecision; + public class AssertJDemoTest { @Test - public void shouldTest() throws Exception { + public void whenComparingReferences_thenNotEqual() throws Exception { + Dog fido = new Dog("Fido", 5.15f); + Dog fidosClone = new Dog("Fido", 5.15f); + + assertThat(fido).isNotEqualTo(fidosClone); + } + + @Test + public void whenComparingFields_thenEqual() throws Exception { + Dog fido = new Dog("Fido", 5.15f); + Dog fidosClone = new Dog("Fido", 5.15f); + + assertThat(fido).isEqualToComparingFieldByFieldRecursively(fidosClone); + } + + @Test + public void whenCheckingForElement_thenContains() throws Exception { + List list = Arrays.asList("1", "2", "3"); + + assertThat(list) + .contains("1"); + } + + @Test + public void whenCheckingForElement_thenMultipleAssertions() throws Exception { + List list = Arrays.asList("1", "2", "3"); + + assertThat(list) + .isNotEmpty() + .contains("1") + .startsWith("1") + .doesNotContainNull() + .containsSequence("2", "3"); + } + + @Test + public void whenCheckingRunnable_thenIsInterface() throws Exception { + assertThat(Runnable.class).isInterface(); + } + + @Test + public void whenAssigningNSEExToException_thenIsAssignable() throws Exception { + assertThat(Exception.class).isAssignableFrom(NoSuchElementException.class); + } + + @Test + public void whenComparingWithOffset_thenEquals() throws Exception { + assertThat(5.1).isEqualTo(5, withPrecision(1d)); } } From 4aa5f7f30c98c49fecf7608a7f667a0622400ea9 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Tue, 21 Jun 2016 20:14:22 +0200 Subject: [PATCH 094/283] Add second set of assertions --- .../com/baeldung/assertj/domain/Person.java | 19 +++++++++++++++++++ .../com/baeldung/assertj/AssertJDemoTest.java | 12 ++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 assertj-introduction/src/main/java/com/baeldung/assertj/domain/Person.java diff --git a/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Person.java b/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Person.java new file mode 100644 index 0000000000..4f6bb7f55b --- /dev/null +++ b/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Person.java @@ -0,0 +1,19 @@ +package com.baeldung.assertj.domain; + +public class Person { + private String name; + private Integer age; + + public Person(String name, Integer age) { + this.name = name; + this.age = age; + } + + public String getName() { + return name; + } + + public Integer getAge() { + return age; + } +} diff --git a/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java b/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java index 249cb865d9..71ce2c53b5 100644 --- a/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java +++ b/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java @@ -1,6 +1,8 @@ package com.baeldung.assertj; import com.baeldung.assertj.domain.Dog; +import com.baeldung.assertj.domain.Person; +import org.junit.Ignore; import org.junit.Test; import java.util.Arrays; @@ -62,4 +64,14 @@ public class AssertJDemoTest { public void whenComparingWithOffset_thenEquals() throws Exception { assertThat(5.1).isEqualTo(5, withPrecision(1d)); } + + @Ignore // IN ORDER TO TEST, REMOVE THIS LINE + @Test + public void whenRunningAssertion_thenDescribed() throws Exception { + Person person = new Person("Alex", 34); + + assertThat(person.getAge()) + .as("%s's age should be equal to 100") + .isEqualTo(100); + } } From 8f35636ba4c5e5619cac52ea042571f11f59e9d0 Mon Sep 17 00:00:00 2001 From: bhaskey Date: Wed, 22 Jun 2016 16:29:32 +0530 Subject: [PATCH 095/283] webjars demo project added webjars directory added to tutorial-master. project is added as webjarsdemo inside that --- .../.mvn/wrapper/maven-wrapper.jar | Bin 0 -> 49502 bytes .../.mvn/wrapper/maven-wrapper.properties | 1 + webjars/webjarsdemo/mvnw | 233 ++++++++++++++++++ webjars/webjarsdemo/mvnw.cmd | 145 +++++++++++ webjars/webjarsdemo/pom.xml | 63 +++++ .../java/com/baeldung/TestController.java | 15 ++ .../com/baeldung/WebjarsdemoApplication.java | 12 + .../src/main/resources/application.properties | 0 .../src/main/resources/templates/index.html | 19 ++ .../baeldung/WebjarsdemoApplicationTests.java | 18 ++ 10 files changed, 506 insertions(+) create mode 100644 webjars/webjarsdemo/.mvn/wrapper/maven-wrapper.jar create mode 100644 webjars/webjarsdemo/.mvn/wrapper/maven-wrapper.properties create mode 100644 webjars/webjarsdemo/mvnw create mode 100644 webjars/webjarsdemo/mvnw.cmd create mode 100644 webjars/webjarsdemo/pom.xml create mode 100644 webjars/webjarsdemo/src/main/java/com/baeldung/TestController.java create mode 100644 webjars/webjarsdemo/src/main/java/com/baeldung/WebjarsdemoApplication.java create mode 100644 webjars/webjarsdemo/src/main/resources/application.properties create mode 100644 webjars/webjarsdemo/src/main/resources/templates/index.html create mode 100644 webjars/webjarsdemo/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java diff --git a/webjars/webjarsdemo/.mvn/wrapper/maven-wrapper.jar b/webjars/webjarsdemo/.mvn/wrapper/maven-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..5fd4d5023f1463b5ba3970e33c460c1eb26d748d GIT binary patch literal 49502 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%0A$pwhjXzyA0ZzErH{1@M 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 OJOEd-=rxTO#Qy`$*1Hh^ literal 0 HcmV?d00001 diff --git a/webjars/webjarsdemo/.mvn/wrapper/maven-wrapper.properties b/webjars/webjarsdemo/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000000..eb91947648 --- /dev/null +++ b/webjars/webjarsdemo/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1 @@ +distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.3.3/apache-maven-3.3.3-bin.zip \ No newline at end of file diff --git a/webjars/webjarsdemo/mvnw b/webjars/webjarsdemo/mvnw new file mode 100644 index 0000000000..a1ba1bf554 --- /dev/null +++ b/webjars/webjarsdemo/mvnw @@ -0,0 +1,233 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven2 Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # + # Look for the Apple JDKs first to preserve the existing behaviour, and then look + # for the new JDKs provided by Oracle. + # + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L /System/Library/Java/JavaVirtualMachines/CurrentJDK ] ; then + # + # Apple JDKs + # + export JAVA_HOME=/System/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -L "/Library/Java/JavaVirtualMachines/CurrentJDK" ] ; then + # + # Oracle JDKs + # + export JAVA_HOME=/Library/Java/JavaVirtualMachines/CurrentJDK/Contents/Home + fi + + if [ -z "$JAVA_HOME" ] && [ -x "/usr/libexec/java_home" ]; then + # + # Apple JDKs + # + export JAVA_HOME=`/usr/libexec/java_home` + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` +fi + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + local basedir=$(pwd) + local wdir=$(pwd) + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + wdir=$(cd "$wdir/.."; pwd) + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-$(find_maven_basedir)} +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} "$@" diff --git a/webjars/webjarsdemo/mvnw.cmd b/webjars/webjarsdemo/mvnw.cmd new file mode 100644 index 0000000000..2b934e89dd --- /dev/null +++ b/webjars/webjarsdemo/mvnw.cmd @@ -0,0 +1,145 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven2 Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +set MAVEN_CMD_LINE_ARGS=%* + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" + +set WRAPPER_JAR="".\.mvn\wrapper\maven-wrapper.jar"" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CMD_LINE_ARGS% +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% \ No newline at end of file diff --git a/webjars/webjarsdemo/pom.xml b/webjars/webjarsdemo/pom.xml new file mode 100644 index 0000000000..80e4f0a42a --- /dev/null +++ b/webjars/webjarsdemo/pom.xml @@ -0,0 +1,63 @@ + + + 4.0.0 + + com.baeldung + webjarsdemo + 0.0.1-SNAPSHOT + jar + + webjarsdemo + Demo project for webjars using Spring Boot + + + org.springframework.boot + spring-boot-starter-parent + 1.3.5.RELEASE + + + + + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + org.webjars + bootstrap + 3.3.4 + + + org.webjars + jquery + 2.1.4 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/webjars/webjarsdemo/src/main/java/com/baeldung/TestController.java b/webjars/webjarsdemo/src/main/java/com/baeldung/TestController.java new file mode 100644 index 0000000000..19a1c18c6b --- /dev/null +++ b/webjars/webjarsdemo/src/main/java/com/baeldung/TestController.java @@ -0,0 +1,15 @@ +package com.baeldung; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class TestController { + + @RequestMapping(value="/") + public String welcome(Model model){ + return "index"; + } + +} diff --git a/webjars/webjarsdemo/src/main/java/com/baeldung/WebjarsdemoApplication.java b/webjars/webjarsdemo/src/main/java/com/baeldung/WebjarsdemoApplication.java new file mode 100644 index 0000000000..c14dc682af --- /dev/null +++ b/webjars/webjarsdemo/src/main/java/com/baeldung/WebjarsdemoApplication.java @@ -0,0 +1,12 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class WebjarsdemoApplication { + + public static void main(String[] args) { + SpringApplication.run(WebjarsdemoApplication.class, args); + } +} diff --git a/webjars/webjarsdemo/src/main/resources/application.properties b/webjars/webjarsdemo/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/webjars/webjarsdemo/src/main/resources/templates/index.html b/webjars/webjarsdemo/src/main/resources/templates/index.html new file mode 100644 index 0000000000..046d21600a --- /dev/null +++ b/webjars/webjarsdemo/src/main/resources/templates/index.html @@ -0,0 +1,19 @@ + + + WebJars Demo + + + + +

+
+ × + Success! It is working as we expected. +
+
+ + + + + + \ No newline at end of file diff --git a/webjars/webjarsdemo/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java b/webjars/webjarsdemo/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java new file mode 100644 index 0000000000..284cda5d31 --- /dev/null +++ b/webjars/webjarsdemo/src/test/java/com/baeldung/WebjarsdemoApplicationTests.java @@ -0,0 +1,18 @@ +package com.baeldung; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = WebjarsdemoApplication.class) +@WebAppConfiguration +public class WebjarsdemoApplicationTests { + + @Test + public void contextLoads() { + } + +} From 28029711e43df1d6317aacb571487c540cb29288 Mon Sep 17 00:00:00 2001 From: eugenp Date: Wed, 22 Jun 2016 17:49:39 +0300 Subject: [PATCH 096/283] minor cleanup --- spring-rest/.project | 6 ------ spring-rest/.settings/.jsdtscope | 7 ------- .../org.eclipse.wst.common.project.facet.core.xml | 5 +---- spring-rest/pom.xml | 15 ++------------- 4 files changed, 3 insertions(+), 30 deletions(-) diff --git a/spring-rest/.project b/spring-rest/.project index 894841d690..525c5e7795 100644 --- a/spring-rest/.project +++ b/spring-rest/.project @@ -15,11 +15,6 @@ - - org.eclipse.wst.validation.validationbuilder - - - org.springframework.ide.eclipse.core.springbuilder @@ -38,6 +33,5 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature org.eclipse.wst.common.project.facet.core.nature - org.eclipse.wst.jsdt.core.jsNature diff --git a/spring-rest/.settings/.jsdtscope b/spring-rest/.settings/.jsdtscope index b46b9207a8..7b3f0c8b9f 100644 --- a/spring-rest/.settings/.jsdtscope +++ b/spring-rest/.settings/.jsdtscope @@ -1,12 +1,5 @@ - - - - - - - diff --git a/spring-rest/.settings/org.eclipse.wst.common.project.facet.core.xml b/spring-rest/.settings/org.eclipse.wst.common.project.facet.core.xml index b9386231e6..8a1c189419 100644 --- a/spring-rest/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/spring-rest/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -1,8 +1,5 @@ - - - - + diff --git a/spring-rest/pom.xml b/spring-rest/pom.xml index 767f90a6a6..7941279936 100644 --- a/spring-rest/pom.xml +++ b/spring-rest/pom.xml @@ -9,7 +9,7 @@ org.springframework.boot spring-boot-starter-parent - 1.2.4.RELEASE + 1.3.5.RELEASE @@ -59,7 +59,6 @@ javax.servlet javax.servlet-api - 3.0.1 provided @@ -101,24 +100,20 @@ org.slf4j slf4j-api - ${org.slf4j.version} ch.qos.logback logback-classic - ${logback.version} org.slf4j jcl-over-slf4j - ${org.slf4j.version} org.slf4j log4j-over-slf4j - ${org.slf4j.version} @@ -126,34 +121,29 @@ junit junit - ${junit.version} test org.hamcrest hamcrest-core - ${org.hamcrest.version} test org.hamcrest hamcrest-library - ${org.hamcrest.version} test org.mockito mockito-core - ${mockito.version} test org.springframework spring-test - ${spring.version} @@ -226,11 +216,10 @@ - 4.0.4.RELEASE 4.3.11.Final - 5.1.38 + 5.1.39 From d429cb401e5bbaf2d22e338ce06a7e8df9c30665 Mon Sep 17 00:00:00 2001 From: Alex Theedom Date: Wed, 22 Jun 2016 22:42:49 +0100 Subject: [PATCH 097/283] Code and tests for AssertJ --- {assertj-introduction => assertj}/pom.xml | 0 .../java/com/baeldung/assertj/introduction}/domain/Dog.java | 2 +- .../com/baeldung/assertj/introduction}/domain/Person.java | 2 +- .../com/baeldung/assertj/introduction}/AssertJDemoTest.java | 6 +++--- 4 files changed, 5 insertions(+), 5 deletions(-) rename {assertj-introduction => assertj}/pom.xml (100%) rename {assertj-introduction/src/main/java/com/baeldung/assertj => assertj/src/main/java/com/baeldung/assertj/introduction}/domain/Dog.java (85%) rename {assertj-introduction/src/main/java/com/baeldung/assertj => assertj/src/main/java/com/baeldung/assertj/introduction}/domain/Person.java (85%) rename {assertj-introduction/src/test/java/com/baeldung/assertj => assertj/src/test/java/com/baeldung/assertj/introduction}/AssertJDemoTest.java (93%) diff --git a/assertj-introduction/pom.xml b/assertj/pom.xml similarity index 100% rename from assertj-introduction/pom.xml rename to assertj/pom.xml diff --git a/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Dog.java b/assertj/src/main/java/com/baeldung/assertj/introduction/domain/Dog.java similarity index 85% rename from assertj-introduction/src/main/java/com/baeldung/assertj/domain/Dog.java rename to assertj/src/main/java/com/baeldung/assertj/introduction/domain/Dog.java index adfcf05225..623f71214c 100644 --- a/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Dog.java +++ b/assertj/src/main/java/com/baeldung/assertj/introduction/domain/Dog.java @@ -1,4 +1,4 @@ -package com.baeldung.assertj.domain; +package com.baeldung.assertj.introduction.domain; public class Dog { private String name; diff --git a/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Person.java b/assertj/src/main/java/com/baeldung/assertj/introduction/domain/Person.java similarity index 85% rename from assertj-introduction/src/main/java/com/baeldung/assertj/domain/Person.java rename to assertj/src/main/java/com/baeldung/assertj/introduction/domain/Person.java index 4f6bb7f55b..90ef787ebe 100644 --- a/assertj-introduction/src/main/java/com/baeldung/assertj/domain/Person.java +++ b/assertj/src/main/java/com/baeldung/assertj/introduction/domain/Person.java @@ -1,4 +1,4 @@ -package com.baeldung.assertj.domain; +package com.baeldung.assertj.introduction.domain; public class Person { private String name; diff --git a/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java b/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJDemoTest.java similarity index 93% rename from assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java rename to assertj/src/test/java/com/baeldung/assertj/introduction/AssertJDemoTest.java index 71ce2c53b5..729c252c3c 100644 --- a/assertj-introduction/src/test/java/com/baeldung/assertj/AssertJDemoTest.java +++ b/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJDemoTest.java @@ -1,7 +1,7 @@ -package com.baeldung.assertj; +package com.baeldung.assertj.introduction; -import com.baeldung.assertj.domain.Dog; -import com.baeldung.assertj.domain.Person; +import com.baeldung.assertj.introduction.domain.Dog; +import com.baeldung.assertj.introduction.domain.Person; import org.junit.Ignore; import org.junit.Test; From 3c17c9ef4a923e4e30ad9193acb99f8c0fe6a8a3 Mon Sep 17 00:00:00 2001 From: eugenp Date: Thu, 23 Jun 2016 01:04:21 +0300 Subject: [PATCH 098/283] minor cleanup --- core-java/.classpath | 2 +- core-java/.settings/org.eclipse.jdt.core.prefs | 11 ++++++++--- .../org.eclipse.wst.common.project.facet.core.xml | 2 +- .../collections/JavaCollectionConversionUnitTest.java | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/core-java/.classpath b/core-java/.classpath index f9b079e8c9..ca829f1262 100644 --- a/core-java/.classpath +++ b/core-java/.classpath @@ -27,7 +27,7 @@ - + diff --git a/core-java/.settings/org.eclipse.jdt.core.prefs b/core-java/.settings/org.eclipse.jdt.core.prefs index 046168cf24..1882edb712 100644 --- a/core-java/.settings/org.eclipse.jdt.core.prefs +++ b/core-java/.settings/org.eclipse.jdt.core.prefs @@ -6,8 +6,13 @@ org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annota org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.autoboxing=ignore @@ -92,4 +97,4 @@ org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/core-java/.settings/org.eclipse.wst.common.project.facet.core.xml b/core-java/.settings/org.eclipse.wst.common.project.facet.core.xml index bc0009a455..f4ef8aa0a5 100644 --- a/core-java/.settings/org.eclipse.wst.common.project.facet.core.xml +++ b/core-java/.settings/org.eclipse.wst.common.project.facet.core.xml @@ -1,4 +1,4 @@ - + diff --git a/core-java/src/test/java/org/baeldung/java/collections/JavaCollectionConversionUnitTest.java b/core-java/src/test/java/org/baeldung/java/collections/JavaCollectionConversionUnitTest.java index 95b79810cd..a5f684a141 100644 --- a/core-java/src/test/java/org/baeldung/java/collections/JavaCollectionConversionUnitTest.java +++ b/core-java/src/test/java/org/baeldung/java/collections/JavaCollectionConversionUnitTest.java @@ -31,7 +31,7 @@ public class JavaCollectionConversionUnitTest { @Test public final void givenUsingCoreJava_whenListConvertedToArray_thenCorrect() { - final List sourceList = Lists. newArrayList(0, 1, 2, 3, 4, 5); + final List sourceList = Arrays.asList(0, 1, 2, 3, 4, 5); final Integer[] targetArray = sourceList.toArray(new Integer[sourceList.size()]); } From 23c7c7d84455836d3221765174e8386ba3ebeff6 Mon Sep 17 00:00:00 2001 From: Guillermo Casanova Date: Thu, 23 Jun 2016 02:26:55 +0200 Subject: [PATCH 099/283] New redis module We have created this module to work with Redis Java libraries Jedis tested so far --- pom.xml | 1 + redis/pom.xml | 41 ++++ .../src/test/java/com/baeldung/JedisTest.java | 225 ++++++++++++++++++ 3 files changed, 267 insertions(+) create mode 100644 redis/pom.xml create mode 100644 redis/src/test/java/com/baeldung/JedisTest.java diff --git a/pom.xml b/pom.xml index f16861cc68..00967e2c35 100644 --- a/pom.xml +++ b/pom.xml @@ -71,6 +71,7 @@ xml lombok + redis
diff --git a/redis/pom.xml b/redis/pom.xml new file mode 100644 index 0000000000..98775b7e13 --- /dev/null +++ b/redis/pom.xml @@ -0,0 +1,41 @@ + + + + 4.0.0 + com.baeldung + redis + 0.1-SNAPSHOT + + redis + http://maven.apache.org + + + + redis.clients + jedis + 2.8.1 + + + + com.github.kstyrc + embedded-redis + 0.6 + + + + junit + junit + ${junit.version} + test + + + + + UTF-8 + + + 4.12 + + diff --git a/redis/src/test/java/com/baeldung/JedisTest.java b/redis/src/test/java/com/baeldung/JedisTest.java new file mode 100644 index 0000000000..cba99a1e73 --- /dev/null +++ b/redis/src/test/java/com/baeldung/JedisTest.java @@ -0,0 +1,225 @@ +package com.baeldung; + +import java.io.IOException; +import java.time.Duration; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; + +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; +import redis.clients.jedis.Pipeline; +import redis.clients.jedis.Response; +import redis.clients.jedis.Transaction; +import redis.embedded.RedisServer; + +/** + * Unit test for Redis Java library - Jedis. + */ +public class JedisTest { + + private Jedis jedis; + private static RedisServer redisServer; + + public JedisTest() { + jedis = new Jedis(); + } + + @BeforeClass + public static void setUp() throws IOException { + redisServer = new RedisServer(6379); + redisServer.start(); + } + + @AfterClass + public static void destroy() { + redisServer.stop(); + } + + @After + public void flush() { + jedis.flushAll(); + } + + @Test + public void givenAStringThenSaveItAsRedisStrings() { + String key = "key"; + String value = "value"; + + jedis.set(key, value); + String value2 = jedis.get(key); + + Assert.assertEquals(value, value2); + } + + @Test + public void givenListElementsThenSaveThemInRedisList() { + String queue = "queue#tasks"; + + String taskOne = "firstTask"; + String taskTwo = "secondTask"; + String taskThree = "thirdTask"; + + jedis.lpush(queue, taskOne, taskTwo); + + String taskReturnedOne = jedis.rpop(queue); + + jedis.lpush(queue, taskThree); + Assert.assertEquals(taskOne, taskReturnedOne); + + String taskReturnedTwo = jedis.rpop(queue); + String taskReturnedThree = jedis.rpop(queue); + + Assert.assertEquals(taskTwo, taskReturnedTwo); + Assert.assertEquals(taskThree, taskReturnedThree); + + String taskReturnedFour = jedis.rpop(queue); + Assert.assertNull(taskReturnedFour); + } + + @Test + public void givenSetElementsThenSaveThemInRedisSet() { + String countries = "countries"; + + String countryOne = "Spain"; + String countryTwo = "Ireland"; + String countryThree = "Ireland"; + + jedis.sadd(countries, countryOne); + + Set countriesSet = jedis.smembers(countries); + Assert.assertEquals(1, countriesSet.size()); + + jedis.sadd(countries, countryTwo); + countriesSet = jedis.smembers(countries); + Assert.assertEquals(2, countriesSet.size()); + + jedis.sadd(countries, countryThree); + countriesSet = jedis.smembers(countries); + Assert.assertEquals(2, countriesSet.size()); + + boolean exists = jedis.sismember(countries, countryThree); + Assert.assertTrue(exists); + } + + @Test + public void givenObjectFieldsThenSaveThemInRedisHash() { + String key = "user#1"; + + String field = "name"; + String value = "William"; + + String field2 = "job"; + String value2 = "politician"; + + jedis.hset(key, field, value); + jedis.hset(key, field2, value2); + + String value3 = jedis.hget(key, field); + Assert.assertEquals(value, value3); + + Map fields = jedis.hgetAll(key); + String value4 = fields.get(field2); + Assert.assertEquals(value2, value4); + } + + @Test + public void givenARankingThenSaveItInRedisSortedSet() { + String key = "ranking"; + + Map scores = new HashMap<>(); + + scores.put("PlayerOne", 3000.0); + scores.put("PlayerTwo", 1500.0); + scores.put("PlayerThree", 8200.0); + + for (String player : scores.keySet()) { + jedis.zadd(key, scores.get(player), player); + } + + Set players = jedis.zrevrange(key, 0, 1); + Assert.assertEquals("PlayerThree", players.iterator().next()); + + long rank = jedis.zrevrank(key, "PlayerOne"); + Assert.assertEquals(1, rank); + } + + @Test + public void givenMultipleOperationsThatNeedToBeExecutedAtomicallyThenWrapThemInATransaction() { + String friendsPrefix = "friends#"; + + String userOneId = "4352523"; + String userTwoId = "5552321"; + + Transaction t = jedis.multi(); + t.sadd(friendsPrefix + userOneId, userTwoId); + t.sadd(friendsPrefix + userTwoId, userOneId); + t.exec(); + + boolean exists = jedis.sismember(friendsPrefix + userOneId, userTwoId); + Assert.assertTrue(exists); + + exists = jedis.sismember(friendsPrefix + userTwoId, userOneId); + Assert.assertTrue(exists); + } + + @Test + public void givenMultipleIndependentOperationsWhenNetworkOptimizationIsImportantThenWrapThemInAPipeline() { + String userOneId = "4352523"; + String userTwoId = "4849888"; + + Pipeline p = jedis.pipelined(); + p.sadd("searched#" + userOneId, "paris"); + p.zadd("ranking", 126, userOneId); + p.zadd("ranking", 325, userTwoId); + Response pipeExists = p.sismember("searched#" + userOneId, "paris"); + Response> pipeRanking = p.zrange("ranking", 0, -1); + p.sync(); + + Assert.assertTrue(pipeExists.get()); + Assert.assertEquals(2, pipeRanking.get().size()); + } + + @Test + public void givenAPoolConfigurationThenCreateAJedisPool() { + final JedisPoolConfig poolConfig = buildPoolConfig(); + + try (JedisPool jedisPool = new JedisPool(poolConfig, "localhost"); + Jedis jedis = jedisPool.getResource()) { + + // do simple operation to verify that the Jedis resource is working properly + String key = "key"; + String value = "value"; + + jedis.set(key, value); + String value2 = jedis.get(key); + + Assert.assertEquals(value, value2); + + // flush Redis + jedis.flushAll(); + } + } + + private JedisPoolConfig buildPoolConfig() { + final JedisPoolConfig poolConfig = new JedisPoolConfig(); + poolConfig.setMaxTotal(128); + poolConfig.setMaxIdle(128); + poolConfig.setMinIdle(16); + poolConfig.setTestOnBorrow(true); + poolConfig.setTestOnReturn(true); + poolConfig.setTestWhileIdle(true); + poolConfig.setMinEvictableIdleTimeMillis(Duration.ofSeconds(60).toMillis()); + poolConfig.setTimeBetweenEvictionRunsMillis(Duration.ofSeconds(30).toMillis()); + poolConfig.setNumTestsPerEvictionRun(3); + poolConfig.setBlockWhenExhausted(true); + return poolConfig; + } +} From 0d1d3cbd8b9053548a7d480a4a80b8173c618c7d Mon Sep 17 00:00:00 2001 From: eugenp Date: Thu, 23 Jun 2016 10:11:56 +0300 Subject: [PATCH 100/283] minor cleanup --- jooq-spring/pom.xml | 43 +++++++++++++++++++++++++------------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/jooq-spring/pom.xml b/jooq-spring/pom.xml index 7a3ec0ac24..e77ff0cbfd 100644 --- a/jooq-spring/pom.xml +++ b/jooq-spring/pom.xml @@ -5,22 +5,13 @@ jooq-spring 0.0.1-SNAPSHOT - - 3.7.3 - 1.4.191 - 4.2.5.RELEASE - 1.7.18 - 1.1.3 - 4.12 - - org.springframework.boot spring-boot-dependencies - 1.3.3.RELEASE + 1.3.5.RELEASE pom import @@ -46,30 +37,25 @@ org.springframework spring-context - ${org.springframework.version} org.springframework spring-jdbc - ${org.springframework.version} org.springframework.boot spring-boot-starter-jooq - 1.3.3.RELEASE org.slf4j slf4j-api - ${org.slf4j.version} runtime ch.qos.logback logback-classic - ${ch.qos.logback.version} runtime @@ -77,15 +63,13 @@ junit junit - ${junit.version} test org.springframework spring-test - ${org.springframework.version} test - + @@ -166,6 +150,29 @@ + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + + 3.7.3 + 1.4.191 + 4.2.5.RELEASE + 1.7.18 + 1.1.3 + 4.12 + + 3.5.1 + + \ No newline at end of file From 920991ece1c696baf941937bcb091ea0b2eb8e80 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 23 Jun 2016 11:33:25 +0200 Subject: [PATCH 101/283] Pom fix --- assertj/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/assertj/pom.xml b/assertj/pom.xml index 21cd0c0121..ce97278a97 100644 --- a/assertj/pom.xml +++ b/assertj/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.baeldung - assertj-introduction + assertj 1.0.0-SNAPSHOT diff --git a/pom.xml b/pom.xml index 505b72e1ab..75281ce80d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ apache-fop - assertj-introduction + assertj core-java core-java-8 From b3e9b08887fbf46d05acb301d710e7bd6877396c Mon Sep 17 00:00:00 2001 From: Eugen Date: Thu, 23 Jun 2016 17:15:46 +0300 Subject: [PATCH 102/283] Update README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index da46989455..f0d3d29da7 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ The "REST with Spring" Classes ============================== -After 5 months of work, here's the Master Class:
+After 5 months of work, here's the Master Class of REST With Spring:
**[>> THE REST WITH SPRING MASTER CLASS](http://www.baeldung.com/rest-with-spring-course?utm_source=github&utm_medium=social&utm_content=tutorials&utm_campaign=rws#master-class)** @@ -19,3 +19,8 @@ Any IDE can be used to work with the projects, but if you're using Eclipse, cons - import the included **formatter** in Eclipse: `https://github.com/eugenp/tutorials/tree/master/eclipse` + + +CI - Jenkins +================================ +This tutorials project is being built **[>> HERE](https://rest-security.ci.cloudbees.com/job/tutorials/)** From 024b4f8f614debf5c20da774bd438534d03cdd4f Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Thu, 23 Jun 2016 17:33:59 +0200 Subject: [PATCH 103/283] Add additional AssertJ examples --- .gitignore | 1 + ...ertJDemoTest.java => AssertJCoreTest.java} | 68 ++++++++++++++++++- 2 files changed, 68 insertions(+), 1 deletion(-) rename assertj/src/test/java/com/baeldung/assertj/introduction/{AssertJDemoTest.java => AssertJCoreTest.java} (54%) diff --git a/.gitignore b/.gitignore index e841cc4bf5..319eb5ca2d 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ target/ spring-openid/src/main/resources/application.properties .recommenders/ + diff --git a/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJDemoTest.java b/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJCoreTest.java similarity index 54% rename from assertj/src/test/java/com/baeldung/assertj/introduction/AssertJDemoTest.java rename to assertj/src/test/java/com/baeldung/assertj/introduction/AssertJCoreTest.java index 729c252c3c..21bc40ae9f 100644 --- a/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJDemoTest.java +++ b/assertj/src/test/java/com/baeldung/assertj/introduction/AssertJCoreTest.java @@ -2,17 +2,23 @@ package com.baeldung.assertj.introduction; import com.baeldung.assertj.introduction.domain.Dog; import com.baeldung.assertj.introduction.domain.Person; +import org.assertj.core.util.Maps; import org.junit.Ignore; import org.junit.Test; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.InputStream; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.NoSuchElementException; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.entry; import static org.assertj.core.api.Assertions.withPrecision; -public class AssertJDemoTest { +public class AssertJCoreTest { @Test public void whenComparingReferences_thenNotEqual() throws Exception { @@ -42,6 +48,10 @@ public class AssertJDemoTest { public void whenCheckingForElement_thenMultipleAssertions() throws Exception { List list = Arrays.asList("1", "2", "3"); + assertThat(list).isNotEmpty(); + assertThat(list).startsWith("1"); + assertThat(list).doesNotContainNull(); + assertThat(list) .isNotEmpty() .contains("1") @@ -55,6 +65,17 @@ public class AssertJDemoTest { assertThat(Runnable.class).isInterface(); } + @Test + public void whenCheckingCharacter_thenIsUnicode() throws Exception { + char someCharacter = 'c'; + + assertThat(someCharacter) + .isNotEqualTo('a') + .inUnicode() + .isGreaterThanOrEqualTo('b') + .isLowerCase(); + } + @Test public void whenAssigningNSEExToException_thenIsAssignable() throws Exception { assertThat(Exception.class).isAssignableFrom(NoSuchElementException.class); @@ -65,6 +86,51 @@ public class AssertJDemoTest { assertThat(5.1).isEqualTo(5, withPrecision(1d)); } + @Test + public void whenCheckingString_then() throws Exception { + assertThat("".isEmpty()).isTrue(); + } + + @Test + public void whenCheckingFile_then() throws Exception { + final File someFile = File.createTempFile("aaa", "bbb"); + someFile.deleteOnExit(); + + assertThat(someFile) + .exists() + .isFile() + .canRead() + .canWrite(); + } + + @Test + public void whenCheckingIS_then() throws Exception { + InputStream given = new ByteArrayInputStream("foo".getBytes()); + InputStream expected = new ByteArrayInputStream("foo".getBytes()); + + assertThat(given).hasSameContentAs(expected); + } + + @Test + public void whenGivenMap_then() throws Exception { + Map map = Maps.newHashMap(2, "a"); + + assertThat(map) + .isNotEmpty() + .containsKey(2) + .doesNotContainKeys(10) + .contains(entry(2, "a")); + } + + @Test + public void whenGivenException_then() throws Exception { + Exception ex = new Exception("abc"); + + assertThat(ex) + .hasNoCause() + .hasMessageEndingWith("c"); + } + @Ignore // IN ORDER TO TEST, REMOVE THIS LINE @Test public void whenRunningAssertion_thenDescribed() throws Exception { From 57ed00a134839fb50b2bce7f0224121e6a0c3351 Mon Sep 17 00:00:00 2001 From: Dmytro Kulaiev Date: Fri, 24 Jun 2016 16:41:41 +0300 Subject: [PATCH 104/283] Code examples for Java 8 date migration (#460) --- .../baeldung/date_migration/Conversion.java | 19 ++++++ .../com/baeldung/date_migration/NewApi.java | 54 +++++++++++++++ .../com/baeldung/date_migration/OldApi.java | 68 +++++++++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 core-java-8/src/main/java/com/baeldung/date_migration/Conversion.java create mode 100644 core-java-8/src/main/java/com/baeldung/date_migration/NewApi.java create mode 100644 core-java-8/src/main/java/com/baeldung/date_migration/OldApi.java diff --git a/core-java-8/src/main/java/com/baeldung/date_migration/Conversion.java b/core-java-8/src/main/java/com/baeldung/date_migration/Conversion.java new file mode 100644 index 0000000000..c672b7ee44 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/date_migration/Conversion.java @@ -0,0 +1,19 @@ +package com.baeldung.date_migration; + +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +public class Conversion { + public static void main(String[] args) { + Instant instantFromCalendar = GregorianCalendar.getInstance().toInstant(); + ZonedDateTime zonedDateTimeFromCalendar = new GregorianCalendar().toZonedDateTime(); + Date dateFromInstant = Date.from(Instant.now()); + GregorianCalendar calendarFromZonedDateTime = GregorianCalendar.from(ZonedDateTime.now()); + Instant instantFromDate = new Date().toInstant(); + ZoneId zoneIdFromTimeZone = TimeZone.getTimeZone("PST").toZoneId(); + } +} diff --git a/core-java-8/src/main/java/com/baeldung/date_migration/NewApi.java b/core-java-8/src/main/java/com/baeldung/date_migration/NewApi.java new file mode 100644 index 0000000000..0abf7f7864 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/date_migration/NewApi.java @@ -0,0 +1,54 @@ +package com.baeldung.date_migration; + +import java.text.ParseException; +import java.time.*; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; + +public class NewApi { + public void currentTime() { + ZonedDateTime now = ZonedDateTime.now(); + } + + public void specificTime() { + LocalDate birthDay = LocalDate.of(1990, Month.DECEMBER, 15); + } + + public void extractMonth() { + Month month = LocalDateTime.now().getMonth(); + } + + public void subtractTime() { + LocalDateTime fiveHoursBefore = LocalDateTime.now().minusHours(5); + } + + public void alterField() { + LocalDateTime inJune = LocalDateTime.now().withMonth(Month.JUNE.getValue()); + } + + public void truncate() { + LocalTime truncated = LocalTime.now().truncatedTo(ChronoUnit.HOURS); + } + + public void convertTimeZone() { + ZonedDateTime centralEastern = LocalDateTime.now().atZone(ZoneId.of("CET")); + } + + public void getTimeSpan() { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime hourLater = LocalDateTime.now().plusHours(1); + Duration span = Duration.between(now, hourLater); + } + + public void formatAndParse() throws ParseException { + LocalDate now = LocalDate.now(); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String formattedDate = now.format(formatter); + LocalDate parsedDate = LocalDate.parse(formattedDate, formatter); + } + + public void daysInMonth() { + int daysInMonth = YearMonth.of(1990, 2).lengthOfMonth(); + } + +} diff --git a/core-java-8/src/main/java/com/baeldung/date_migration/OldApi.java b/core-java-8/src/main/java/com/baeldung/date_migration/OldApi.java new file mode 100644 index 0000000000..de4edf99e9 --- /dev/null +++ b/core-java-8/src/main/java/com/baeldung/date_migration/OldApi.java @@ -0,0 +1,68 @@ +package com.baeldung.date_migration; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +public class OldApi { + public void currentTime() { + Date now = new Date(); + } + + public void specificTime () { + Date birthDay = new GregorianCalendar(1990, Calendar.DECEMBER, 15).getTime(); + } + + public void extractMonth() { + int month = new GregorianCalendar().get(Calendar.MONTH); + } + + public void subtractTime() { + GregorianCalendar calendar = new GregorianCalendar(); + calendar.add(Calendar.HOUR_OF_DAY, -5); + Date fiveHoursBefore = calendar.getTime(); + } + + public void alterField() { + GregorianCalendar calendar = new GregorianCalendar(); + calendar.set(Calendar.MONTH, Calendar.JUNE); + Date inJune = calendar.getTime(); + } + + public void truncate() { + Calendar now = Calendar.getInstance(); + now.set(Calendar.MINUTE, 0); + now.set(Calendar.SECOND, 0); + now.set(Calendar.MILLISECOND, 0); + Date truncated = now.getTime(); + } + + public void convertTimeZone() { + GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTimeZone(TimeZone.getTimeZone("CET")); + Date centralEastern = calendar.getTime(); + } + + public void getTimeSpan() { + GregorianCalendar calendar = new GregorianCalendar(); + Date now = new Date(); + calendar.add(Calendar.HOUR, 1); + Date hourLater = calendar.getTime(); + long elapsed = hourLater.getTime() - now.getTime(); + } + + public void formatAndParse() throws ParseException { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date now = new Date(); + String formattedDate = dateFormat.format(now); + Date parsedDate = dateFormat.parse(formattedDate); + } + + public void daysInMonth() { + Calendar calendar = new GregorianCalendar(1990, Calendar.FEBRUARY, 20); + int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); + } +} From 19ba450c086de761e31e6991a3c6c80d2b77d418 Mon Sep 17 00:00:00 2001 From: Micah Silverman Date: Fri, 24 Jun 2016 12:14:11 -0400 Subject: [PATCH 105/283] Created jjwt tutorial --- jjwt/.gitignore | 3 + jjwt/pom.xml | 59 ++++++++++++++++++ .../jsonwebtoken/jjwtfun/DemoApplication.java | 12 ++++ .../controller/DynamicJWTController.java | 45 ++++++++++++++ .../controller/FixedJWTController.java | 61 +++++++++++++++++++ .../src/main/resources/application.properties | 0 .../jjwtfun/DemoApplicationTests.java | 18 ++++++ pom.xml | 1 + 8 files changed, 199 insertions(+) create mode 100644 jjwt/.gitignore create mode 100644 jjwt/pom.xml create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/DemoApplication.java create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FixedJWTController.java create mode 100644 jjwt/src/main/resources/application.properties create mode 100644 jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java diff --git a/jjwt/.gitignore b/jjwt/.gitignore new file mode 100644 index 0000000000..f83e8cf07c --- /dev/null +++ b/jjwt/.gitignore @@ -0,0 +1,3 @@ +.idea +target +*.iml diff --git a/jjwt/pom.xml b/jjwt/pom.xml new file mode 100644 index 0000000000..0764194803 --- /dev/null +++ b/jjwt/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + io.jsonwebtoken + jjwtfun + 0.0.1-SNAPSHOT + jar + + jjwtfun + Exercising the JJWT + + + org.springframework.boot + spring-boot-starter-parent + 1.3.5.RELEASE + + + + + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-devtools + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + + org.springframework.boot + spring-boot-starter-test + test + + + + io.jsonwebtoken + jjwt + 0.6.0 + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/DemoApplication.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/DemoApplication.java new file mode 100644 index 0000000000..2d09c182b6 --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/DemoApplication.java @@ -0,0 +1,12 @@ +package io.jsonwebtoken.jjwtfun; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DemoApplication { + + public static void main(String[] args) { + SpringApplication.run(DemoApplication.class, args); + } +} diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java new file mode 100644 index 0000000000..e1d98bb199 --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java @@ -0,0 +1,45 @@ +package io.jsonwebtoken.jjwtfun.controller; + +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import java.io.UnsupportedEncodingException; +import java.util.AbstractMap.SimpleEntry; +import java.util.Collections; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +@RestController +public class DynamicJWTController { + @Value("#{ @environment['jjwtfun.secret'] ?: 'secret' }") + String secret; + + Map map = Collections.unmodifiableMap(Stream.of( + new SimpleEntry<>("iss", ""), + new SimpleEntry<>("a", ""), + new SimpleEntry<>("b", ""), + new SimpleEntry<>("c", ""), + new SimpleEntry<>("d", ""), + new SimpleEntry<>("e", ""), + new SimpleEntry<>("f", ""), + new SimpleEntry<>("g", ""), + new SimpleEntry<>("h", "")) + .collect(Collectors.toMap((e) -> e.getKey(), (e) -> e.getValue()))); + + @RequestMapping(value = "/dynamic-builder", method = RequestMethod.POST) + public String dynamicBuilder(@RequestBody Map claims) throws UnsupportedEncodingException { + return Jwts.builder() + .setClaims(claims) + .signWith( + SignatureAlgorithm.HS256, + secret.getBytes("UTF-8") + ) + .compact(); + } +} diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FixedJWTController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FixedJWTController.java new file mode 100644 index 0000000000..7a648063ac --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FixedJWTController.java @@ -0,0 +1,61 @@ +package io.jsonwebtoken.jjwtfun.controller; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jws; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.MalformedJwtException; +import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.SignatureException; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +import java.io.UnsupportedEncodingException; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +@RestController +public class FixedJWTController { + + @RequestMapping("/fixed-builder") + public String fixedBuilder() throws UnsupportedEncodingException { + + String jws = Jwts.builder() + .setSubject("msilverman") + .setExpiration(Date.from(Instant.now().plus(1, ChronoUnit.DAYS))) + .claim("name", "Micah Silverman") + .claim("scope", "admins") + .signWith( + SignatureAlgorithm.HS256, + "secret".getBytes("UTF-8") + ) + .compact(); + + return jws; + } + + @RequestMapping("/fixed-parser") + public Jws fixedParser(@RequestParam String jws) throws UnsupportedEncodingException { + Jws claims = Jwts.parser() + .setSigningKey("secret".getBytes("UTF-8")) + .parseClaimsJws(jws); + + return claims; + } + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler({SignatureException.class, MalformedJwtException.class}) + public Map exception(Exception e) { + Map response = new HashMap<>(); + response.put("status", "ERROR"); + response.put("message", e.getMessage()); + response.put("exception-type", e.getClass().getName()); + return response; + } +} diff --git a/jjwt/src/main/resources/application.properties b/jjwt/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java b/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java new file mode 100644 index 0000000000..7e5b9b78f1 --- /dev/null +++ b/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java @@ -0,0 +1,18 @@ +package io.jsonwebtoken.jjwtfun; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.SpringApplicationConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +@RunWith(SpringJUnit4ClassRunner.class) +@SpringApplicationConfiguration(classes = DemoApplication.class) +@WebAppConfiguration +public class DemoApplicationTests { + + @Test + public void contextLoads() { + } + +} diff --git a/pom.xml b/pom.xml index 75281ce80d..9e1d7e44c2 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,7 @@ httpclient jackson javaxval + jjwt jooq-spring json-path mockito From bf9c5b3c917a261d0f026932acb8e6ee4240480b Mon Sep 17 00:00:00 2001 From: Micah Silverman Date: Fri, 24 Jun 2016 14:53:14 -0400 Subject: [PATCH 106/283] Added HomeController with usage. Updated static and dynamic jwt builders. --- ...plication.java => JJWTFunApplication.java} | 4 +- .../controller/DynamicJWTController.java | 63 +++++++++++++------ .../jjwtfun/controller/HomeController.java | 27 ++++++++ ...ntroller.java => StaticJWTController.java} | 12 ++-- .../jjwtfun/DemoApplicationTests.java | 2 +- 5 files changed, 82 insertions(+), 26 deletions(-) rename jjwt/src/main/java/io/jsonwebtoken/jjwtfun/{DemoApplication.java => JJWTFunApplication.java} (71%) create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/HomeController.java rename jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/{FixedJWTController.java => StaticJWTController.java} (84%) diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/DemoApplication.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/JJWTFunApplication.java similarity index 71% rename from jjwt/src/main/java/io/jsonwebtoken/jjwtfun/DemoApplication.java rename to jjwt/src/main/java/io/jsonwebtoken/jjwtfun/JJWTFunApplication.java index 2d09c182b6..7189617d55 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/DemoApplication.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/JJWTFunApplication.java @@ -4,9 +4,9 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication -public class DemoApplication { +public class JJWTFunApplication { public static void main(String[] args) { - SpringApplication.run(DemoApplication.class, args); + SpringApplication.run(JJWTFunApplication.class, args); } } diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java index e1d98bb199..fff7e1d6a2 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java @@ -1,39 +1,27 @@ package io.jsonwebtoken.jjwtfun.controller; +import io.jsonwebtoken.JwtBuilder; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.io.UnsupportedEncodingException; -import java.util.AbstractMap.SimpleEntry; -import java.util.Collections; +import java.time.Instant; +import java.util.Date; import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.Stream; + +import static org.springframework.web.bind.annotation.RequestMethod.POST; @RestController public class DynamicJWTController { @Value("#{ @environment['jjwtfun.secret'] ?: 'secret' }") String secret; - Map map = Collections.unmodifiableMap(Stream.of( - new SimpleEntry<>("iss", ""), - new SimpleEntry<>("a", ""), - new SimpleEntry<>("b", ""), - new SimpleEntry<>("c", ""), - new SimpleEntry<>("d", ""), - new SimpleEntry<>("e", ""), - new SimpleEntry<>("f", ""), - new SimpleEntry<>("g", ""), - new SimpleEntry<>("h", "")) - .collect(Collectors.toMap((e) -> e.getKey(), (e) -> e.getValue()))); - - @RequestMapping(value = "/dynamic-builder", method = RequestMethod.POST) - public String dynamicBuilder(@RequestBody Map claims) throws UnsupportedEncodingException { + @RequestMapping(value = "/dynamic-builder-general", method = POST) + public String dynamicBuilderGeneric(@RequestBody Map claims) throws UnsupportedEncodingException { return Jwts.builder() .setClaims(claims) .signWith( @@ -42,4 +30,41 @@ public class DynamicJWTController { ) .compact(); } + + @RequestMapping(value = "/dynamic-builder-specific", method = POST) + public String dynamicBuilderSpecific(@RequestBody Map claims) throws UnsupportedEncodingException { + JwtBuilder builder = Jwts.builder(); + + claims.forEach((key, value) -> { + switch (key) { + case "iss": + builder.setIssuer((String)value); + break; + case "sub": + builder.setSubject((String)value); + break; + case "aud": + builder.setAudience((String)value); + break; + case "exp": + builder.setExpiration(Date.from(Instant.ofEpochSecond(Long.parseLong((String)value)))); + break; + case "nbf": + builder.setNotBefore(Date.from(Instant.ofEpochSecond(Long.parseLong((String)value)))); + break; + case "iat": + builder.setIssuedAt(Date.from(Instant.ofEpochSecond(Long.parseLong((String)value)))); + break; + case "jti": + builder.setId((String)value); + break; + default: + builder.claim(key, value); + } + }); + + builder.signWith(SignatureAlgorithm.HS256, secret.getBytes("UTF-8")); + + return builder.compact(); + } } diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/HomeController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/HomeController.java new file mode 100644 index 0000000000..d6717e383f --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/HomeController.java @@ -0,0 +1,27 @@ +package io.jsonwebtoken.jjwtfun.controller; + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; + +@RestController +public class HomeController { + + @RequestMapping("/") + public String home(HttpServletRequest req) { + String requestUrl = getUrl(req); + return "Available commands (assumes httpie - https://github.com/jkbrzt/httpie):\n" + + " http " + requestUrl + "/\n\tThis usage\n" + + " http " + requestUrl + "/static-builder\n\tbuild JWT from hardcoded claims\n" + + " http " + requestUrl + "/dynamic-builder-general claim-1=value-1 ... [claim-n=value-n]\n\tbuild JWT from passed in claims (using general claims map)\n" + + " http " + requestUrl + "/dynamic-builder-specific claim-1=value-1 ... [claim-n=value-n]\n\tbuild JWT from passed in claims (using specific claims methods)\n" + + " http " + requestUrl + "/parser?jwt=\n\tParse passed in JWT\n"; + } + + private String getUrl(HttpServletRequest req) { + return req.getScheme() + "://" + + req.getServerName() + + ((req.getServerPort() == 80 || req.getServerPort() == 443) ? "" : ":" + req.getServerPort()); + } +} diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FixedJWTController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java similarity index 84% rename from jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FixedJWTController.java rename to jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java index 7a648063ac..6f98ffcd94 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FixedJWTController.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java @@ -9,6 +9,7 @@ import io.jsonwebtoken.SignatureException; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; @@ -20,10 +21,13 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; -@RestController -public class FixedJWTController { +import static org.springframework.web.bind.annotation.RequestMethod.GET; +import static org.springframework.web.bind.annotation.RequestMethod.POST; - @RequestMapping("/fixed-builder") +@RestController +public class StaticJWTController { + + @RequestMapping(value = "/static-builder", method = POST) public String fixedBuilder() throws UnsupportedEncodingException { String jws = Jwts.builder() @@ -40,7 +44,7 @@ public class FixedJWTController { return jws; } - @RequestMapping("/fixed-parser") + @RequestMapping(value = "/parser", method = GET) public Jws fixedParser(@RequestParam String jws) throws UnsupportedEncodingException { Jws claims = Jwts.parser() .setSigningKey("secret".getBytes("UTF-8")) diff --git a/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java b/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java index 7e5b9b78f1..357d91ed73 100644 --- a/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java +++ b/jjwt/src/test/java/io/jsonwebtoken/jjwtfun/DemoApplicationTests.java @@ -7,7 +7,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = DemoApplication.class) +@SpringApplicationConfiguration(classes = JJWTFunApplication.class) @WebAppConfiguration public class DemoApplicationTests { From 96182a2bf2a716f3c521a3381c7caa4129029ec2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 25 Jun 2016 17:11:51 +0200 Subject: [PATCH 107/283] Just setting encoding for module on mock comparison. (#461) * Add new module for mocks comparison. * Add sources for testing. * Changes on testCase. * Enter some tests for mockito. * More tests for Mockito. * Even more tests. * Add the rest of the mocking libraries. * Javadoc on test. * Test bare bones for EasyMock. * Fist kind of test and setup. * Add tests using EasyMock with a change on LoginService. * Create LoginControllerTest.java * Test setup * [JMockit] No method called test. * [JMockit] Two methods called test. * [JMockit] One method called test. * [JMockit] Exception mock test * [JMockit] Mocked object to pass around test. * [JMockit] Custom matcher test. * [JMockit] Partial mocking test. * [JMockit] Fix with IDE. * Not stubs. Mocks. MOCKS!!! * Remove unnecesary import. --- mock-comparisons/pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mock-comparisons/pom.xml b/mock-comparisons/pom.xml index 97e24c61cd..c5424d262d 100644 --- a/mock-comparisons/pom.xml +++ b/mock-comparisons/pom.xml @@ -12,6 +12,8 @@ 1.10.19 3.4 1.24 + + UTF-8 3.3 From a661e0e3c921d46c55406520be04d9c9bb0aa574 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sat, 25 Jun 2016 17:23:52 +0200 Subject: [PATCH 108/283] Add additional AssertJ examples --- core-java-8/pom.xml | 6 ++ .../com/baeldung/date_migration/NewApi.java | 54 ----------- .../com/baeldung/date_migration/OldApi.java | 68 -------------- .../baeldung/dateapi/ConversionExample.java} | 4 +- .../baeldung/dateapi/JavaUtilTimeTest.java | 89 +++++++++++++++++++ 5 files changed, 97 insertions(+), 124 deletions(-) delete mode 100644 core-java-8/src/main/java/com/baeldung/date_migration/NewApi.java delete mode 100644 core-java-8/src/main/java/com/baeldung/date_migration/OldApi.java rename core-java-8/src/{main/java/com/baeldung/date_migration/Conversion.java => test/java/com/baeldung/dateapi/ConversionExample.java} (91%) create mode 100644 core-java-8/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java diff --git a/core-java-8/pom.xml b/core-java-8/pom.xml index f99d85f564..8c9bb36f7d 100644 --- a/core-java-8/pom.xml +++ b/core-java-8/pom.xml @@ -63,6 +63,12 @@ test + + org.assertj + assertj-core + 3.4.1 + + org.mockito mockito-core diff --git a/core-java-8/src/main/java/com/baeldung/date_migration/NewApi.java b/core-java-8/src/main/java/com/baeldung/date_migration/NewApi.java deleted file mode 100644 index 0abf7f7864..0000000000 --- a/core-java-8/src/main/java/com/baeldung/date_migration/NewApi.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.date_migration; - -import java.text.ParseException; -import java.time.*; -import java.time.format.DateTimeFormatter; -import java.time.temporal.ChronoUnit; - -public class NewApi { - public void currentTime() { - ZonedDateTime now = ZonedDateTime.now(); - } - - public void specificTime() { - LocalDate birthDay = LocalDate.of(1990, Month.DECEMBER, 15); - } - - public void extractMonth() { - Month month = LocalDateTime.now().getMonth(); - } - - public void subtractTime() { - LocalDateTime fiveHoursBefore = LocalDateTime.now().minusHours(5); - } - - public void alterField() { - LocalDateTime inJune = LocalDateTime.now().withMonth(Month.JUNE.getValue()); - } - - public void truncate() { - LocalTime truncated = LocalTime.now().truncatedTo(ChronoUnit.HOURS); - } - - public void convertTimeZone() { - ZonedDateTime centralEastern = LocalDateTime.now().atZone(ZoneId.of("CET")); - } - - public void getTimeSpan() { - LocalDateTime now = LocalDateTime.now(); - LocalDateTime hourLater = LocalDateTime.now().plusHours(1); - Duration span = Duration.between(now, hourLater); - } - - public void formatAndParse() throws ParseException { - LocalDate now = LocalDate.now(); - DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - String formattedDate = now.format(formatter); - LocalDate parsedDate = LocalDate.parse(formattedDate, formatter); - } - - public void daysInMonth() { - int daysInMonth = YearMonth.of(1990, 2).lengthOfMonth(); - } - -} diff --git a/core-java-8/src/main/java/com/baeldung/date_migration/OldApi.java b/core-java-8/src/main/java/com/baeldung/date_migration/OldApi.java deleted file mode 100644 index de4edf99e9..0000000000 --- a/core-java-8/src/main/java/com/baeldung/date_migration/OldApi.java +++ /dev/null @@ -1,68 +0,0 @@ -package com.baeldung.date_migration; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.TimeZone; - -public class OldApi { - public void currentTime() { - Date now = new Date(); - } - - public void specificTime () { - Date birthDay = new GregorianCalendar(1990, Calendar.DECEMBER, 15).getTime(); - } - - public void extractMonth() { - int month = new GregorianCalendar().get(Calendar.MONTH); - } - - public void subtractTime() { - GregorianCalendar calendar = new GregorianCalendar(); - calendar.add(Calendar.HOUR_OF_DAY, -5); - Date fiveHoursBefore = calendar.getTime(); - } - - public void alterField() { - GregorianCalendar calendar = new GregorianCalendar(); - calendar.set(Calendar.MONTH, Calendar.JUNE); - Date inJune = calendar.getTime(); - } - - public void truncate() { - Calendar now = Calendar.getInstance(); - now.set(Calendar.MINUTE, 0); - now.set(Calendar.SECOND, 0); - now.set(Calendar.MILLISECOND, 0); - Date truncated = now.getTime(); - } - - public void convertTimeZone() { - GregorianCalendar calendar = new GregorianCalendar(); - calendar.setTimeZone(TimeZone.getTimeZone("CET")); - Date centralEastern = calendar.getTime(); - } - - public void getTimeSpan() { - GregorianCalendar calendar = new GregorianCalendar(); - Date now = new Date(); - calendar.add(Calendar.HOUR, 1); - Date hourLater = calendar.getTime(); - long elapsed = hourLater.getTime() - now.getTime(); - } - - public void formatAndParse() throws ParseException { - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); - Date now = new Date(); - String formattedDate = dateFormat.format(now); - Date parsedDate = dateFormat.parse(formattedDate); - } - - public void daysInMonth() { - Calendar calendar = new GregorianCalendar(1990, Calendar.FEBRUARY, 20); - int daysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); - } -} diff --git a/core-java-8/src/main/java/com/baeldung/date_migration/Conversion.java b/core-java-8/src/test/java/com/baeldung/dateapi/ConversionExample.java similarity index 91% rename from core-java-8/src/main/java/com/baeldung/date_migration/Conversion.java rename to core-java-8/src/test/java/com/baeldung/dateapi/ConversionExample.java index c672b7ee44..a543c80eaf 100644 --- a/core-java-8/src/main/java/com/baeldung/date_migration/Conversion.java +++ b/core-java-8/src/test/java/com/baeldung/dateapi/ConversionExample.java @@ -1,4 +1,4 @@ -package com.baeldung.date_migration; +package com.baeldung.dateapi; import java.time.Instant; import java.time.ZoneId; @@ -7,7 +7,7 @@ import java.util.Date; import java.util.GregorianCalendar; import java.util.TimeZone; -public class Conversion { +public class ConversionExample { public static void main(String[] args) { Instant instantFromCalendar = GregorianCalendar.getInstance().toInstant(); ZonedDateTime zonedDateTimeFromCalendar = new GregorianCalendar().toZonedDateTime(); diff --git a/core-java-8/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java b/core-java-8/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java new file mode 100644 index 0000000000..4bce40c2d9 --- /dev/null +++ b/core-java-8/src/test/java/com/baeldung/dateapi/JavaUtilTimeTest.java @@ -0,0 +1,89 @@ +package com.baeldung.dateapi; + +import org.junit.Test; + +import java.text.ParseException; +import java.time.Duration; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.Month; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; + +import static org.assertj.core.api.Assertions.assertThat; + +public class JavaUtilTimeTest { + + @Test + public void currentTime() { + final LocalDate now = LocalDate.now(); + + System.out.println(now); + // there is not much to test here + } + + @Test + public void specificTime() { + LocalDate birthDay = LocalDate.of(1990, Month.DECEMBER, 15); + + System.out.println(birthDay); + // there is not much to test here + } + + @Test + public void extractMonth() { + Month month = LocalDate.of(1990, Month.DECEMBER, 15).getMonth(); + + assertThat(month).isEqualTo(Month.DECEMBER); + } + + @Test + public void subtractTime() { + LocalDateTime fiveHoursBefore = LocalDateTime.of(1990, Month.DECEMBER, 15, 15, 0).minusHours(5); + + assertThat(fiveHoursBefore.getHour()).isEqualTo(10); + } + + @Test + public void alterField() { + LocalDateTime inJune = LocalDateTime.of(1990, Month.DECEMBER, 15, 15, 0).with(Month.JUNE); + + assertThat(inJune.getMonth()).isEqualTo(Month.JUNE); + } + + @Test + public void truncate() { + LocalTime truncated = LocalTime.of(15, 12, 34).truncatedTo(ChronoUnit.HOURS); + + assertThat(truncated).isEqualTo(LocalTime.of(15, 0, 0)); + } + + @Test + public void getTimeSpan() { + LocalDateTime now = LocalDateTime.now(); + LocalDateTime hourLater = now.plusHours(1); + Duration span = Duration.between(now, hourLater); + + assertThat(span).isEqualTo(Duration.ofHours(1)); + } + + @Test + public void formatAndParse() throws ParseException { + LocalDate someDate = LocalDate.of(2016, 12, 7); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String formattedDate = someDate.format(formatter); + LocalDate parsedDate = LocalDate.parse(formattedDate, formatter); + + assertThat(formattedDate).isEqualTo("2016-12-07"); + assertThat(parsedDate).isEqualTo(someDate); + } + + @Test + public void daysInMonth() { + int daysInMonth = YearMonth.of(1990, 2).lengthOfMonth(); + + assertThat(daysInMonth).isEqualTo(28); + } +} From df9e4d7ef5d74b5d76a2daef792450a056dc9651 Mon Sep 17 00:00:00 2001 From: Micah Silverman Date: Sat, 25 Jun 2016 21:11:56 -0400 Subject: [PATCH 109/283] Updated date method calls. --- .../io/jsonwebtoken/jjwtfun/controller/HomeController.java | 2 +- .../jjwtfun/controller/StaticJWTController.java | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/HomeController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/HomeController.java index d6717e383f..fabc6f1f2a 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/HomeController.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/HomeController.java @@ -12,7 +12,7 @@ public class HomeController { public String home(HttpServletRequest req) { String requestUrl = getUrl(req); return "Available commands (assumes httpie - https://github.com/jkbrzt/httpie):\n" + - " http " + requestUrl + "/\n\tThis usage\n" + + " http " + requestUrl + "/\n\tThis usage message\n" + " http " + requestUrl + "/static-builder\n\tbuild JWT from hardcoded claims\n" + " http " + requestUrl + "/dynamic-builder-general claim-1=value-1 ... [claim-n=value-n]\n\tbuild JWT from passed in claims (using general claims map)\n" + " http " + requestUrl + "/dynamic-builder-specific claim-1=value-1 ... [claim-n=value-n]\n\tbuild JWT from passed in claims (using specific claims methods)\n" + diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java index 6f98ffcd94..114900285f 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java @@ -27,14 +27,16 @@ import static org.springframework.web.bind.annotation.RequestMethod.POST; @RestController public class StaticJWTController { - @RequestMapping(value = "/static-builder", method = POST) + @RequestMapping(value = "/static-builder", method = GET) public String fixedBuilder() throws UnsupportedEncodingException { String jws = Jwts.builder() + .setIssuer("Stormpath") .setSubject("msilverman") - .setExpiration(Date.from(Instant.now().plus(1, ChronoUnit.DAYS))) .claim("name", "Micah Silverman") .claim("scope", "admins") + .setIssuedAt(Date.from(Instant.ofEpochSecond(1466796822))) // Fri Jun 24 2016 15:33:42 GMT-0400 (EDT) + .setExpiration(Date.from(Instant.ofEpochSecond(1466883222))) // Sat Jun 25 2016 15:33:42 GMT-0400 (EDT) .signWith( SignatureAlgorithm.HS256, "secret".getBytes("UTF-8") From 330c8680c938e54abf6606b9a9af9db4943c8911 Mon Sep 17 00:00:00 2001 From: Raquel Garrido Date: Sun, 26 Jun 2016 11:55:42 +0200 Subject: [PATCH 110/283] XML libraries support (#463) * dom4j * added more parsers * StaxParser * Jaxb binding * Jaxb binding * Finish article --- xml/pom.xml | 200 ++++++++---------- .../java/com/baeldung/xml/DefaultParser.java | 10 +- .../java/com/baeldung/xml/Dom4JParser.java | 131 ++++++++++++ .../java/com/baeldung/xml/JDomParser.java | 62 ++++++ .../java/com/baeldung/xml/JaxbParser.java | 69 ++++++ .../main/java/com/baeldung/xml/JaxenDemo.java | 57 +++++ .../java/com/baeldung/xml/StaxParser.java | 120 +++++++++++ .../com/baeldung/xml/binding/Tutorial.java | 61 ++++++ .../com/baeldung/xml/binding/Tutorials.java | 23 ++ .../java/com/baeldung/xml/model/Tutorial.java | 49 +++++ .../com/baeldung/xml/DefaultParserTest.java | 11 +- .../com/baeldung/xml/Dom4JParserTest.java | 88 ++++++++ .../java/com/baeldung/xml/JDomParserTest.java | 38 ++++ .../java/com/baeldung/xml/JaxbParserTest.java | 46 ++++ .../java/com/baeldung/xml/JaxenDemoTest.java | 25 +++ .../java/com/baeldung/xml/StaxParserTest.java | 28 +++ xml/src/test/resources/example.xml | 20 +- xml/src/test/resources/example_namespace.xml | 20 +- xml/src/test/resources/example_new.xml | 10 + xml/src/test/resources/example_updated.xml | 32 +++ 20 files changed, 957 insertions(+), 143 deletions(-) create mode 100644 xml/src/main/java/com/baeldung/xml/Dom4JParser.java create mode 100644 xml/src/main/java/com/baeldung/xml/JDomParser.java create mode 100644 xml/src/main/java/com/baeldung/xml/JaxbParser.java create mode 100644 xml/src/main/java/com/baeldung/xml/JaxenDemo.java create mode 100644 xml/src/main/java/com/baeldung/xml/StaxParser.java create mode 100644 xml/src/main/java/com/baeldung/xml/binding/Tutorial.java create mode 100644 xml/src/main/java/com/baeldung/xml/binding/Tutorials.java create mode 100644 xml/src/main/java/com/baeldung/xml/model/Tutorial.java create mode 100644 xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java create mode 100644 xml/src/test/java/com/baeldung/xml/JDomParserTest.java create mode 100644 xml/src/test/java/com/baeldung/xml/JaxbParserTest.java create mode 100644 xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java create mode 100644 xml/src/test/java/com/baeldung/xml/StaxParserTest.java create mode 100644 xml/src/test/resources/example_new.xml create mode 100644 xml/src/test/resources/example_updated.xml diff --git a/xml/pom.xml b/xml/pom.xml index fc158901e6..9d88bd75eb 100644 --- a/xml/pom.xml +++ b/xml/pom.xml @@ -1,139 +1,117 @@ - 4.0.0 - com.baeldung - xml - 0.1-SNAPSHOT + 4.0.0 + com.baeldung + xml + 0.1-SNAPSHOT - xml + xml - - + + + + dom4j + dom4j + 1.6.1 + + + jaxen + jaxen + 1.1.6 + - - com.google.guava - guava - ${guava.version} - - - commons-io - commons-io - 2.4 - + + org.jdom + jdom2 + 2.0.6 + - - org.apache.commons - commons-collections4 - 4.0 - + + xerces + xercesImpl + 2.9.1 + - - org.apache.commons - commons-lang3 - ${commons-lang3.version} - - - - + + + commons-io + commons-io + 2.4 + - - junit - junit - ${junit.version} - test - + + org.apache.commons + commons-collections4 + 4.0 + - - org.hamcrest - hamcrest-core - ${org.hamcrest.version} - test - - - org.hamcrest - hamcrest-library - ${org.hamcrest.version} - test - + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + - - org.mockito - mockito-core - ${mockito.version} - test - - + - - xml - - - src/main/resources - true - - + + junit + junit + ${junit.version} + test + - + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - 1.8 - 1.8 - - + + xml + + + src/main/resources + true + + - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - + - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + - - - 4.3.11.Final - 5.1.38 + - - 2.7.2 + - - 1.7.13 - 1.1.3 + - - 5.1.3.Final + + 19.0 + 3.4 - - 19.0 - 3.4 + + 4.12 - - 1.3 - 4.12 - 1.10.19 + + 3.5.1 + 2.6 + 2.19.1 + 2.7 + 1.4.18 - 4.4.1 - 4.5 - - 2.9.0 - - - 3.5.1 - 2.6 - 2.19.1 - 2.7 - 1.4.18 - - + diff --git a/xml/src/main/java/com/baeldung/xml/DefaultParser.java b/xml/src/main/java/com/baeldung/xml/DefaultParser.java index 89326f45c9..1f2a7418fb 100644 --- a/xml/src/main/java/com/baeldung/xml/DefaultParser.java +++ b/xml/src/main/java/com/baeldung/xml/DefaultParser.java @@ -39,7 +39,7 @@ public class DefaultParser { XPath xPath = XPathFactory.newInstance().newXPath(); - String expression = "/Tutorials/Tutorial"; + String expression = "/tutorials/tutorial"; nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); @@ -60,7 +60,7 @@ public class DefaultParser { XPath xPath = XPathFactory.newInstance().newXPath(); - String expression = "/Tutorials/Tutorial[@tutId=" + "'" + id + "'" + "]"; + String expression = "/tutorials/tutorial[@tutId=" + "'" + id + "'" + "]"; node = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE); @@ -83,7 +83,7 @@ public class DefaultParser { XPath xPath = XPathFactory.newInstance().newXPath(); - String expression = "//Tutorial[descendant::title[text()=" + "'" + name + "'" + "]]"; + String expression = "//tutorial[descendant::title[text()=" + "'" + name + "'" + "]]"; nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); @@ -107,7 +107,7 @@ public class DefaultParser { XPath xPath = XPathFactory.newInstance().newXPath(); - String expression = "//Tutorial[number(translate(date, '/', '')) > " + date + "]"; + String expression = "//tutorial[number(translate(date, '/', '')) > " + date + "]"; nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); @@ -151,7 +151,7 @@ public class DefaultParser { } }); - String expression = "/bdn:Tutorials/bdn:Tutorial"; + String expression = "/bdn:tutorials/bdn:tutorial"; nodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET); diff --git a/xml/src/main/java/com/baeldung/xml/Dom4JParser.java b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java new file mode 100644 index 0000000000..d9058ba236 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/Dom4JParser.java @@ -0,0 +1,131 @@ +package com.baeldung.xml; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; +import org.dom4j.Node; +import org.dom4j.io.OutputFormat; +import org.dom4j.io.SAXReader; +import org.dom4j.io.XMLWriter; + +public class Dom4JParser { + + private File file; + + public Dom4JParser(File file) { + this.file = file; + } + + public Element getRootElement() { + try { + SAXReader reader = new SAXReader(); + Document document = reader.read(file); + return document.getRootElement(); + } catch (DocumentException e) { + e.printStackTrace(); + return null; + } + } + + public List getFirstElementList() { + try { + SAXReader reader = new SAXReader(); + Document document = reader.read(file); + return document.getRootElement().elements(); + } catch (DocumentException e) { + e.printStackTrace(); + return null; + } + } + + public Node getNodeById(String id) { + try { + SAXReader reader = new SAXReader(); + Document document = reader.read(file); + List elements = document.selectNodes("//*[@tutId='" + id + "']"); + return elements.get(0); + } catch (DocumentException e) { + e.printStackTrace(); + return null; + } + } + + public Node getElementsListByTitle(String name) { + try { + SAXReader reader = new SAXReader(); + Document document = reader.read(file); + List elements = document + .selectNodes("//tutorial[descendant::title[text()=" + "'" + name + "'" + "]]"); + return elements.get(0); + } catch (DocumentException e) { + e.printStackTrace(); + return null; + } + } + + public void generateModifiedDocument() { + try { + SAXReader reader = new SAXReader(); + Document document = reader.read(file); + List nodes = document.selectNodes("/tutorials/tutorial"); + for (Node node : nodes) { + Element element = (Element) node; + Iterator iterator = element.elementIterator("title"); + while (iterator.hasNext()) { + Element title = (Element) iterator.next(); + title.setText(title.getText() + " updated"); + } + } + XMLWriter writer = new XMLWriter(new FileWriter(new File("src/test/resources/example_updated.xml"))); + writer.write(document); + writer.close(); + } catch (DocumentException e) { + e.printStackTrace(); + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public void generateNewDocument() { + try { + Document document = DocumentHelper.createDocument(); + Element root = document.addElement("XMLTutorials"); + Element tutorialElement = root.addElement("tutorial").addAttribute("tutId", "01"); + tutorialElement.addAttribute("type", "xml"); + + tutorialElement.addElement("title").addText("XML with Dom4J"); + + tutorialElement.addElement("description").addText("XML handling with Dom4J"); + + tutorialElement.addElement("date").addText("14/06/2016"); + + tutorialElement.addElement("author").addText("Dom4J tech writer"); + + OutputFormat format = OutputFormat.createPrettyPrint(); + XMLWriter writer = new XMLWriter(new FileWriter(new File("src/test/resources/example_new.xml")), format); + writer.write(document); + writer.close(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + +} diff --git a/xml/src/main/java/com/baeldung/xml/JDomParser.java b/xml/src/main/java/com/baeldung/xml/JDomParser.java new file mode 100644 index 0000000000..08676b44f8 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/JDomParser.java @@ -0,0 +1,62 @@ +package com.baeldung.xml; + +import java.io.File; +import java.io.IOException; +import java.util.List; + +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.JDOMException; +import org.jdom2.filter.Filters; +import org.jdom2.input.SAXBuilder; +import org.jdom2.xpath.XPathExpression; +import org.jdom2.xpath.XPathFactory; + + +public class JDomParser { + + private File file; + + public JDomParser(File file) { + this.file = file; + } + + public List getAllTitles() { + try { + SAXBuilder builder = new SAXBuilder(); + Document doc = builder.build(this.getFile()); + Element tutorials = doc.getRootElement(); + List titles = tutorials.getChildren("tutorial"); + return titles; + } catch (JDOMException | IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + return null; + } + } + + public Element getNodeById(String id) { + try { + SAXBuilder builder = new SAXBuilder(); + Document document = (Document) builder.build(file); + String filter = "//*[@tutId='" + id + "']"; + XPathFactory xFactory = XPathFactory.instance(); + XPathExpression expr = xFactory.compile(filter, Filters.element()); + List node = expr.evaluate(document); + + return node.get(0); + } catch (JDOMException | IOException e ) { + e.printStackTrace(); + return null; + } + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + +} diff --git a/xml/src/main/java/com/baeldung/xml/JaxbParser.java b/xml/src/main/java/com/baeldung/xml/JaxbParser.java new file mode 100644 index 0000000000..9c06ec5fba --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/JaxbParser.java @@ -0,0 +1,69 @@ +package com.baeldung.xml; + +import java.io.File; +import java.util.ArrayList; +import java.util.Date; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; + +import com.baeldung.xml.binding.Tutorial; +import com.baeldung.xml.binding.Tutorials; + +public class JaxbParser { + + private File file; + + public JaxbParser(File file) { + this.file = file; + } + + public Tutorials getFullDocument() { + try { + JAXBContext jaxbContext = JAXBContext.newInstance(Tutorials.class); + Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); + Tutorials tutorials = (Tutorials) jaxbUnmarshaller.unmarshal(this.getFile()); + return tutorials; + } catch (JAXBException e) { + e.printStackTrace(); + return null; + } + } + + public void createNewDocument() { + Tutorials tutorials = new Tutorials(); + tutorials.setTutorial(new ArrayList()); + Tutorial tut = new Tutorial(); + tut.setTutId("01"); + tut.setType("XML"); + tut.setTitle("XML with Jaxb"); + tut.setDescription("XML Binding with Jaxb"); + tut.setDate(new Date()); + tut.setAuthor("Jaxb author"); + tutorials.getTutorial().add(tut); + + try { + JAXBContext jaxbContext = JAXBContext.newInstance(Tutorials.class); + Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); + + jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); + + jaxbMarshaller.marshal(tutorials, file); + + } catch (JAXBException e) { + e.printStackTrace(); + } + + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + +} diff --git a/xml/src/main/java/com/baeldung/xml/JaxenDemo.java b/xml/src/main/java/com/baeldung/xml/JaxenDemo.java new file mode 100644 index 0000000000..0c2dca0573 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/JaxenDemo.java @@ -0,0 +1,57 @@ +package com.baeldung.xml; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.util.List; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.jaxen.JaxenException; +import org.jaxen.XPath; +import org.jaxen.dom.DOMXPath; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +public class JaxenDemo { + + private File file; + + public JaxenDemo(File file) { + this.file = file; + } + + public List getAllTutorial(){ + try { + FileInputStream fileIS = new FileInputStream(this.getFile()); + DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); + + DocumentBuilder builder = builderFactory.newDocumentBuilder(); + + Document xmlDocument = builder.parse(fileIS); + + String expression = "/tutorials/tutorial"; + + XPath path = new DOMXPath(expression); + List result = path.selectNodes(xmlDocument); + return result; + + } catch (SAXException | IOException | ParserConfigurationException | JaxenException e) { + e.printStackTrace(); + return null; + } + + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + + +} diff --git a/xml/src/main/java/com/baeldung/xml/StaxParser.java b/xml/src/main/java/com/baeldung/xml/StaxParser.java new file mode 100644 index 0000000000..6f83e022f8 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/StaxParser.java @@ -0,0 +1,120 @@ +package com.baeldung.xml; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.EndElement; +import javax.xml.stream.events.StartElement; +import javax.xml.stream.events.XMLEvent; + +import com.baeldung.xml.model.Tutorial; + +public class StaxParser { + + private File file; + + public StaxParser(File file) { + this.file = file; + } + + public List getAllTutorial() { + boolean bTitle = false; + boolean bDescription = false; + boolean bDate = false; + boolean bAuthor = false; + List tutorials = new ArrayList(); + try { + XMLInputFactory factory = XMLInputFactory.newInstance(); + XMLEventReader eventReader = factory.createXMLEventReader(new FileReader(this.getFile())); + Tutorial current = null; + while (eventReader.hasNext()) { + XMLEvent event = eventReader.nextEvent(); + switch (event.getEventType()) { + case XMLStreamConstants.START_ELEMENT: + StartElement startElement = event.asStartElement(); + String qName = startElement.getName().getLocalPart(); + if (qName.equalsIgnoreCase("tutorial")) { + current = new Tutorial(); + Iterator attributes = startElement.getAttributes(); + while (attributes.hasNext()) { + Attribute currentAt = attributes.next(); + if (currentAt.getName().toString().equalsIgnoreCase("tutId")) { + current.setTutId(currentAt.getValue()); + } else if (currentAt.getName().toString().equalsIgnoreCase("type")) { + current.setType(currentAt.getValue()); + } + } + } else if (qName.equalsIgnoreCase("title")) { + bTitle = true; + } else if (qName.equalsIgnoreCase("description")) { + bDescription = true; + } else if (qName.equalsIgnoreCase("date")) { + bDate = true; + } else if (qName.equalsIgnoreCase("author")) { + bAuthor = true; + } + break; + case XMLStreamConstants.CHARACTERS: + Characters characters = event.asCharacters(); + if (bTitle) { + if (current != null) { + current.setTitle(characters.getData()); + } + bTitle = false; + } + if (bDescription) { + if (current != null) { + current.setDescription(characters.getData()); + } + bDescription = false; + } + if (bDate) { + if (current != null) { + current.setDate(characters.getData()); + } + bDate = false; + } + if (bAuthor) { + if (current != null) { + current.setAuthor(characters.getData()); + } + bAuthor = false; + } + break; + case XMLStreamConstants.END_ELEMENT: + EndElement endElement = event.asEndElement(); + if (endElement.getName().getLocalPart().equalsIgnoreCase("tutorial")) { + if(current != null){ + tutorials.add(current); + } + } + break; + } + } + + } catch (FileNotFoundException | XMLStreamException e) { + e.printStackTrace(); + } + + return tutorials; + } + + public File getFile() { + return file; + } + + public void setFile(File file) { + this.file = file; + } + +} diff --git a/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java b/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java new file mode 100644 index 0000000000..c4668a9f77 --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java @@ -0,0 +1,61 @@ +package com.baeldung.xml.binding; + +import java.util.Date; + +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; + +public class Tutorial { + + private String tutId; + private String type; + private String title; + private String description; + private Date date; + private String author; + + + public String getTutId() { + return tutId; + } + + @XmlAttribute + public void setTutId(String tutId) { + this.tutId = tutId; + } + public String getType() { + return type; + } + @XmlAttribute + public void setType(String type) { + this.type = type; + } + public String getTitle() { + return title; + } + @XmlElement + public void setTitle(String title) { + this.title = title; + } + public String getDescription() { + return description; + } + @XmlElement + public void setDescription(String description) { + this.description = description; + } + public Date getDate() { + return date; + } + @XmlElement + public void setDate(Date date) { + this.date = date; + } + public String getAuthor() { + return author; + } + @XmlElement + public void setAuthor(String author) { + this.author = author; + } +} diff --git a/xml/src/main/java/com/baeldung/xml/binding/Tutorials.java b/xml/src/main/java/com/baeldung/xml/binding/Tutorials.java new file mode 100644 index 0000000000..ab6669c0ad --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/binding/Tutorials.java @@ -0,0 +1,23 @@ +package com.baeldung.xml.binding; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; + +@XmlRootElement +public class Tutorials { + + private List tutorial; + + public List getTutorial() { + return tutorial; + } + + @XmlElement + public void setTutorial(List tutorial) { + this.tutorial = tutorial; + } + + +} diff --git a/xml/src/main/java/com/baeldung/xml/model/Tutorial.java b/xml/src/main/java/com/baeldung/xml/model/Tutorial.java new file mode 100644 index 0000000000..40a3f858cf --- /dev/null +++ b/xml/src/main/java/com/baeldung/xml/model/Tutorial.java @@ -0,0 +1,49 @@ +package com.baeldung.xml.model; + +public class Tutorial { + + private String tutId; + private String type; + private String title; + private String description; + private String date; + private String author; + + + public String getTutId() { + return tutId; + } + public void setTutId(String tutId) { + this.tutId = tutId; + } + public String getType() { + return type; + } + public void setType(String type) { + this.type = type; + } + public String getTitle() { + return title; + } + public void setTitle(String title) { + this.title = title; + } + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + public String getDate() { + return date; + } + public void setDate(String date) { + this.date = date; + } + public String getAuthor() { + return author; + } + public void setAuthor(String author) { + this.author = author; + } +} diff --git a/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java index 451917a5da..734e7a93cb 100644 --- a/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java @@ -8,9 +8,6 @@ import org.junit.Test; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -/** - * Unit test for simple App. - */ public class DefaultParserTest { final String fileName = "src/test/resources/example.xml"; @@ -29,7 +26,7 @@ public class DefaultParserTest { } @Test - public void getNodeListByTitle() { + public void getNodeListByTitleTest() { parser = new DefaultParser(new File(fileName)); NodeList list = parser.getNodeListByTitle("XML"); @@ -47,7 +44,7 @@ public class DefaultParserTest { } @Test - public void getNodeById() { + public void getNodeByIdTest() { parser = new DefaultParser(new File(fileName)); Node node = parser.getNodeById("03"); @@ -56,7 +53,7 @@ public class DefaultParserTest { } @Test - public void getNodeListByDate(){ + public void getNodeListByDateTest(){ parser = new DefaultParser(new File(fileName)); NodeList list = parser.getNodeListByTitle("04022016"); for (int i = 0; null != list && i < list.getLength(); i++) { @@ -73,7 +70,7 @@ public class DefaultParserTest { } @Test - public void getNodeListWithNamespace(){ + public void getNodeListWithNamespaceTest(){ parser = new DefaultParser(new File(fileNameSpace)); NodeList list = parser.getAllTutorials(); assertNotNull(list); diff --git a/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java b/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java new file mode 100644 index 0000000000..277eca8355 --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java @@ -0,0 +1,88 @@ +package com.baeldung.xml; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.util.List; + +import org.dom4j.Element; +import org.dom4j.Node; +import org.junit.Test; + +public class Dom4JParserTest { + + final String fileName = "src/test/resources/example.xml"; + + Dom4JParser parser; + + @Test + public void getRootElementTest() { + parser = new Dom4JParser(new File(fileName)); + Element root = parser.getRootElement(); + + assertNotNull(root); + assertTrue(root.elements().size() == 4); + } + + @Test + public void getFirstElementListTest() { + parser = new Dom4JParser(new File(fileName)); + List firstList = parser.getFirstElementList(); + + assertNotNull(firstList); + assertTrue(firstList.size() == 4); + assertTrue(firstList.get(0).attributeValue("type").equals("java")); + } + + @Test + public void getElementByIdTest() { + parser = new Dom4JParser(new File(fileName)); + Node element = parser.getNodeById("03"); + + String type = element.valueOf("@type"); + assertEquals("android", type); + } + + @Test + public void getElementsListByTitleTest() { + parser = new Dom4JParser(new File(fileName)); + Node element = parser.getElementsListByTitle("XML"); + + assertEquals("java", element.valueOf("@type")); + assertEquals("02", element.valueOf("@tutId")); + assertEquals("XML", element.selectSingleNode("title").getText()); + assertEquals("title", element.selectSingleNode("title").getName()); + } + + @Test + public void generateModifiedDocumentTest() { + parser = new Dom4JParser(new File(fileName)); + parser.generateModifiedDocument(); + + File generatedFile = new File("src/test/resources/example_updated.xml"); + assertTrue(generatedFile.exists()); + + parser.setFile(generatedFile); + Node element = parser.getNodeById("02"); + + assertEquals("XML updated", element.selectSingleNode("title").getText()); + + } + + @Test + public void generateNewDocumentTest() { + parser = new Dom4JParser(new File(fileName)); + parser.generateNewDocument(); + + File newFile = new File("src/test/resources/example_new.xml"); + assertTrue(newFile.exists()); + + parser.setFile(newFile); + Node element = parser.getNodeById("01"); + + assertEquals("XML with Dom4J", element.selectSingleNode("title").getText()); + + } +} diff --git a/xml/src/test/java/com/baeldung/xml/JDomParserTest.java b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java new file mode 100644 index 0000000000..981458469f --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java @@ -0,0 +1,38 @@ +package com.baeldung.xml; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.util.List; + +import org.jdom2.Element; +import org.junit.Test; + +public class JDomParserTest { + + final String fileName = "src/test/resources/example.xml"; + + JDomParser parser; + + @Test + public void getFirstElementListTest() { + parser = new JDomParser(new File(fileName)); + List firstList = parser.getAllTitles(); + + assertNotNull(firstList); + assertTrue(firstList.size() == 4); + assertTrue(firstList.get(0).getAttributeValue("type").equals("java")); + } + + @Test + public void getElementByIdTest() { + parser = new JDomParser(new File(fileName)); + Element el = parser.getNodeById("03"); + + String type = el.getAttributeValue("type"); + assertEquals("android", type); + } + +} diff --git a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java new file mode 100644 index 0000000000..4d6ddf5f65 --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java @@ -0,0 +1,46 @@ +package com.baeldung.xml; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; + +import org.dom4j.Node; +import org.junit.Test; + +import com.baeldung.xml.binding.Tutorials; + +public class JaxbParserTest { + + + final String fileName = "src/test/resources/example.xml"; + + JaxbParser parser; + + @Test + public void getFullDocumentTest(){ + parser = new JaxbParser(new File(fileName)); + Tutorials tutorials = parser.getFullDocument(); + + assertNotNull(tutorials); + assertTrue(tutorials.getTutorial().size() == 4); + assertTrue(tutorials.getTutorial().get(0).getType().equalsIgnoreCase("java")); + } + + @Test + public void createNewDocumentTest(){ + File newFile = new File("src/test/resources/example_new.xml"); + parser = new JaxbParser(newFile); + parser.createNewDocument(); + + + assertTrue(newFile.exists()); + + Tutorials tutorials = parser.getFullDocument(); + + assertNotNull(tutorials); + assertTrue(tutorials.getTutorial().size() == 1); + assertTrue(tutorials.getTutorial().get(0).getTitle().equalsIgnoreCase("XML with Jaxb")); + } +} diff --git a/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java b/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java new file mode 100644 index 0000000000..2521fcaf8a --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java @@ -0,0 +1,25 @@ +package com.baeldung.xml; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.util.List; + +import org.junit.Test; + +public class JaxenDemoTest { + + final String fileName = "src/test/resources/example.xml"; + + JaxenDemo jaxenDemo; + + @Test + public void getFirstLevelNodeListTest() { + jaxenDemo = new JaxenDemo(new File(fileName)); + List list = jaxenDemo.getAllTutorial(); + + assertNotNull(list); + assertTrue(list.size() == 4); + } +} diff --git a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java new file mode 100644 index 0000000000..3188777a79 --- /dev/null +++ b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java @@ -0,0 +1,28 @@ +package com.baeldung.xml; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.util.List; + +import org.junit.Test; + +import com.baeldung.xml.model.Tutorial; + +public class StaxParserTest { + + final String fileName = "src/test/resources/example.xml"; + + StaxParser parser; + + @Test + public void getAllTutorialsTest(){ + parser = new StaxParser(new File(fileName)); + List tutorials = parser.getAllTutorial(); + + assertNotNull(tutorials); + assertTrue(tutorials.size() == 4); + assertTrue(tutorials.get(0).getType().equalsIgnoreCase("java")); + } +} diff --git a/xml/src/test/resources/example.xml b/xml/src/test/resources/example.xml index d546dd137b..0993b6240a 100644 --- a/xml/src/test/resources/example.xml +++ b/xml/src/test/resources/example.xml @@ -1,24 +1,24 @@ - - + + Guava Introduction to Guava 04/04/2016 GuavaAuthor - - + + XML Introduction to XPath 04/05/2016 XMLAuthor - - + + Android Introduction to Android 04/03/2016 AndroidAuthor - - + + Spring Introduction to Spring 04/02/2016 @@ -28,5 +28,5 @@
Spring MVC
Spring Batch
-
-
\ No newline at end of file +
+
\ No newline at end of file diff --git a/xml/src/test/resources/example_namespace.xml b/xml/src/test/resources/example_namespace.xml index 26131302ea..f1a880951a 100644 --- a/xml/src/test/resources/example_namespace.xml +++ b/xml/src/test/resources/example_namespace.xml @@ -1,24 +1,24 @@ - - + + Guava Introduction to Guava 04/04/2016 GuavaAuthor - - + + XML Introduction to XPath 04/05/2016 XMLAuthor - - + + Android Introduction to Android 04/03/2016 AndroidAuthor - - + + Spring Introduction to Spring 04/02/2016 @@ -28,5 +28,5 @@
Spring MVC
Spring Batch
-
-
\ No newline at end of file +
+
\ No newline at end of file diff --git a/xml/src/test/resources/example_new.xml b/xml/src/test/resources/example_new.xml new file mode 100644 index 0000000000..020760fdd3 --- /dev/null +++ b/xml/src/test/resources/example_new.xml @@ -0,0 +1,10 @@ + + + + + XML with Dom4J + XML handling with Dom4J + 14/06/2016 + Dom4J tech writer + + diff --git a/xml/src/test/resources/example_updated.xml b/xml/src/test/resources/example_updated.xml new file mode 100644 index 0000000000..962ca0c889 --- /dev/null +++ b/xml/src/test/resources/example_updated.xml @@ -0,0 +1,32 @@ + + + + Guava updated + Introduction to Guava + 04/04/2016 + GuavaAuthor + + + XML updated + Introduction to XPath + 04/05/2016 + XMLAuthor + + + Android updated + Introduction to Android + 04/03/2016 + AndroidAuthor + + + Spring updated + Introduction to Spring + 04/02/2016 + SpringAuthor + +
Spring Core
+
Spring MVC
+
Spring Batch
+
+
+
\ No newline at end of file From 40ed303abc75817d344c7cd736c828a846c88f74 Mon Sep 17 00:00:00 2001 From: Grzegorz Piwowarek Date: Sun, 26 Jun 2016 11:59:31 +0200 Subject: [PATCH 111/283] Refactor xml examples --- .../com/baeldung/xml/DefaultParserTest.java | 20 +++++++------ .../com/baeldung/xml/Dom4JParserTest.java | 30 +++++++++---------- .../java/com/baeldung/xml/JDomParserTest.java | 16 +++++----- .../java/com/baeldung/xml/JaxbParserTest.java | 15 ++++------ .../java/com/baeldung/xml/JaxenDemoTest.java | 10 +++---- .../java/com/baeldung/xml/StaxParserTest.java | 13 ++++---- 6 files changed, 51 insertions(+), 53 deletions(-) diff --git a/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java index 734e7a93cb..7408e41b92 100644 --- a/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java @@ -1,20 +1,22 @@ package com.baeldung.xml; -import static org.junit.Assert.*; - -import java.io.File; - import org.junit.Test; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + public class DefaultParserTest { - final String fileName = "src/test/resources/example.xml"; + private final String fileName = "src/test/resources/example.xml"; - final String fileNameSpace = "src/test/resources/example_namespace.xml"; + private final String fileNameSpace = "src/test/resources/example_namespace.xml"; - DefaultParser parser; + private DefaultParser parser; @Test public void getFirstLevelNodeListTest() { @@ -30,7 +32,7 @@ public class DefaultParserTest { parser = new DefaultParser(new File(fileName)); NodeList list = parser.getNodeListByTitle("XML"); - for (int i = 0; null != list && i < list.getLength(); i++) { + for (int i = 0; i < list.getLength(); i++) { Node nod = list.item(i); assertEquals("java", nod.getAttributes().getNamedItem("type").getTextContent()); assertEquals("02", nod.getAttributes().getNamedItem("tutId").getTextContent()); @@ -56,7 +58,7 @@ public class DefaultParserTest { public void getNodeListByDateTest(){ parser = new DefaultParser(new File(fileName)); NodeList list = parser.getNodeListByTitle("04022016"); - for (int i = 0; null != list && i < list.getLength(); i++) { + for (int i = 0; i < list.getLength(); i++) { Node nod = list.item(i); assertEquals("java", nod.getAttributes().getNamedItem("type").getTextContent()); assertEquals("04", nod.getAttributes().getNamedItem("tutId").getTextContent()); diff --git a/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java b/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java index 277eca8355..77e5fcdcda 100644 --- a/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java @@ -1,25 +1,25 @@ package com.baeldung.xml; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import java.io.File; -import java.util.List; - import org.dom4j.Element; import org.dom4j.Node; import org.junit.Test; +import java.io.File; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + public class Dom4JParserTest { - final String fileName = "src/test/resources/example.xml"; + private static final String FILE_NAME = "src/test/resources/example.xml"; - Dom4JParser parser; + private Dom4JParser parser; @Test public void getRootElementTest() { - parser = new Dom4JParser(new File(fileName)); + parser = new Dom4JParser(new File(FILE_NAME)); Element root = parser.getRootElement(); assertNotNull(root); @@ -28,7 +28,7 @@ public class Dom4JParserTest { @Test public void getFirstElementListTest() { - parser = new Dom4JParser(new File(fileName)); + parser = new Dom4JParser(new File(FILE_NAME)); List firstList = parser.getFirstElementList(); assertNotNull(firstList); @@ -38,7 +38,7 @@ public class Dom4JParserTest { @Test public void getElementByIdTest() { - parser = new Dom4JParser(new File(fileName)); + parser = new Dom4JParser(new File(FILE_NAME)); Node element = parser.getNodeById("03"); String type = element.valueOf("@type"); @@ -47,7 +47,7 @@ public class Dom4JParserTest { @Test public void getElementsListByTitleTest() { - parser = new Dom4JParser(new File(fileName)); + parser = new Dom4JParser(new File(FILE_NAME)); Node element = parser.getElementsListByTitle("XML"); assertEquals("java", element.valueOf("@type")); @@ -58,7 +58,7 @@ public class Dom4JParserTest { @Test public void generateModifiedDocumentTest() { - parser = new Dom4JParser(new File(fileName)); + parser = new Dom4JParser(new File(FILE_NAME)); parser.generateModifiedDocument(); File generatedFile = new File("src/test/resources/example_updated.xml"); @@ -73,7 +73,7 @@ public class Dom4JParserTest { @Test public void generateNewDocumentTest() { - parser = new Dom4JParser(new File(fileName)); + parser = new Dom4JParser(new File(FILE_NAME)); parser.generateNewDocument(); File newFile = new File("src/test/resources/example_new.xml"); diff --git a/xml/src/test/java/com/baeldung/xml/JDomParserTest.java b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java index 981458469f..e4034c48f0 100644 --- a/xml/src/test/java/com/baeldung/xml/JDomParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java @@ -1,20 +1,20 @@ package com.baeldung.xml; +import org.jdom2.Element; +import org.junit.Test; + +import java.io.File; +import java.util.List; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; -import java.io.File; -import java.util.List; - -import org.jdom2.Element; -import org.junit.Test; - public class JDomParserTest { - final String fileName = "src/test/resources/example.xml"; + private final String fileName = "src/test/resources/example.xml"; - JDomParser parser; + private JDomParser parser; @Test public void getFirstElementListTest() { diff --git a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java index 4d6ddf5f65..6e1a201b59 100644 --- a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java @@ -1,22 +1,19 @@ package com.baeldung.xml; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import com.baeldung.xml.binding.Tutorials; +import org.junit.Test; import java.io.File; -import org.dom4j.Node; -import org.junit.Test; - -import com.baeldung.xml.binding.Tutorials; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; public class JaxbParserTest { - final String fileName = "src/test/resources/example.xml"; + private final String fileName = "src/test/resources/example.xml"; - JaxbParser parser; + private JaxbParser parser; @Test public void getFullDocumentTest(){ diff --git a/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java b/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java index 2521fcaf8a..8a88484f11 100644 --- a/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java +++ b/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java @@ -1,18 +1,18 @@ package com.baeldung.xml; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import org.junit.Test; import java.io.File; import java.util.List; -import org.junit.Test; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; public class JaxenDemoTest { - final String fileName = "src/test/resources/example.xml"; + private final String fileName = "src/test/resources/example.xml"; - JaxenDemo jaxenDemo; + private JaxenDemo jaxenDemo; @Test public void getFirstLevelNodeListTest() { diff --git a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java index 3188777a79..d1080c88ac 100644 --- a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java @@ -1,20 +1,19 @@ package com.baeldung.xml; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import com.baeldung.xml.model.Tutorial; +import org.junit.Test; import java.io.File; import java.util.List; -import org.junit.Test; - -import com.baeldung.xml.model.Tutorial; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; public class StaxParserTest { - final String fileName = "src/test/resources/example.xml"; + private final String fileName = "src/test/resources/example.xml"; - StaxParser parser; + private StaxParser parser; @Test public void getAllTutorialsTest(){ From 29a33c3407035423a79ead55f14692647ccead0f Mon Sep 17 00:00:00 2001 From: Micah Silverman Date: Mon, 27 Jun 2016 02:30:09 -0400 Subject: [PATCH 112/283] Made BaseController to provide uniform exception response. Made JwtResponse for uniform responses. Added ensureType method to enforce type on registered claims. --- .../jjwtfun/JJWTFunApplication.java | 6 +- .../jjwtfun/controller/BaseController.java | 23 ++++++ .../controller/DynamicJWTController.java | 51 ++++++++++---- .../controller/StaticJWTController.java | 35 +++------- .../jjwtfun/model/JwtResponse.java | 70 +++++++++++++++++++ 5 files changed, 143 insertions(+), 42 deletions(-) create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/BaseController.java create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/model/JwtResponse.java diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/JJWTFunApplication.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/JJWTFunApplication.java index 7189617d55..5c106aac70 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/JJWTFunApplication.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/JJWTFunApplication.java @@ -6,7 +6,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class JJWTFunApplication { - public static void main(String[] args) { - SpringApplication.run(JJWTFunApplication.class, args); - } + public static void main(String[] args) { + SpringApplication.run(JJWTFunApplication.class, args); + } } diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/BaseController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/BaseController.java new file mode 100644 index 0000000000..e1e195c6ab --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/BaseController.java @@ -0,0 +1,23 @@ +package io.jsonwebtoken.jjwtfun.controller; + +import io.jsonwebtoken.JwtException; +import io.jsonwebtoken.MalformedJwtException; +import io.jsonwebtoken.SignatureException; +import io.jsonwebtoken.jjwtfun.model.JwtResponse; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; + +public class BaseController { + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler({SignatureException.class, MalformedJwtException.class, JwtException.class}) + public JwtResponse exception(Exception e) { + JwtResponse response = new JwtResponse(); + response.setStatus(JwtResponse.Status.ERROR); + response.setMessage(e.getMessage()); + response.setExceptionType(e.getClass().getName()); + + return response; + } +} diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java index fff7e1d6a2..72bc491b00 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java @@ -1,8 +1,10 @@ package io.jsonwebtoken.jjwtfun.controller; import io.jsonwebtoken.JwtBuilder; +import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.jjwtfun.model.JwtResponse; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -16,47 +18,55 @@ import java.util.Map; import static org.springframework.web.bind.annotation.RequestMethod.POST; @RestController -public class DynamicJWTController { +public class DynamicJWTController extends BaseController { @Value("#{ @environment['jjwtfun.secret'] ?: 'secret' }") String secret; @RequestMapping(value = "/dynamic-builder-general", method = POST) - public String dynamicBuilderGeneric(@RequestBody Map claims) throws UnsupportedEncodingException { - return Jwts.builder() + public JwtResponse dynamicBuilderGeneric(@RequestBody Map claims) throws UnsupportedEncodingException { + String jws = Jwts.builder() .setClaims(claims) .signWith( SignatureAlgorithm.HS256, secret.getBytes("UTF-8") ) .compact(); + return new JwtResponse(jws); } @RequestMapping(value = "/dynamic-builder-specific", method = POST) - public String dynamicBuilderSpecific(@RequestBody Map claims) throws UnsupportedEncodingException { + public JwtResponse dynamicBuilderSpecific(@RequestBody Map claims) throws UnsupportedEncodingException { JwtBuilder builder = Jwts.builder(); claims.forEach((key, value) -> { switch (key) { case "iss": - builder.setIssuer((String)value); + ensureType(key, value, String.class); + builder.setIssuer((String) value); break; case "sub": - builder.setSubject((String)value); + ensureType(key, value, String.class); + builder.setSubject((String) value); break; case "aud": - builder.setAudience((String)value); + ensureType(key, value, String.class); + builder.setAudience((String) value); break; case "exp": - builder.setExpiration(Date.from(Instant.ofEpochSecond(Long.parseLong((String)value)))); + value = ensureType(key, value, Long.class); + builder.setExpiration(Date.from(Instant.ofEpochSecond((Long) value))); break; case "nbf": - builder.setNotBefore(Date.from(Instant.ofEpochSecond(Long.parseLong((String)value)))); + value = ensureType(key, value, Long.class); + builder.setNotBefore(Date.from(Instant.ofEpochSecond((Long) value))); break; case "iat": - builder.setIssuedAt(Date.from(Instant.ofEpochSecond(Long.parseLong((String)value)))); + value = ensureType(key, value, Long.class); + builder.setIssuedAt(Date.from(Instant.ofEpochSecond((Long) value))); break; case "jti": - builder.setId((String)value); + ensureType(key, value, String.class); + builder.setId((String) value); break; default: builder.claim(key, value); @@ -65,6 +75,23 @@ public class DynamicJWTController { builder.signWith(SignatureAlgorithm.HS256, secret.getBytes("UTF-8")); - return builder.compact(); + return new JwtResponse(builder.compact()); + } + + private Object ensureType(String registeredClaim, Object value, Class expectedType) { + // we want to promote Integers to Longs in this case + if (expectedType == Long.class && value instanceof Integer) { + value = ((Integer) value).longValue(); + } + + boolean isCorrectType = expectedType.isInstance(value); + + if (!isCorrectType) { + String msg = "Expected type: " + expectedType.getCanonicalName() + " for registered claim: '" + + registeredClaim + "', but got value: " + value + " of type: " + value.getClass().getCanonicalName(); + throw new JwtException(msg); + } + + return value; } } diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java index 114900285f..960ac46043 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java @@ -3,65 +3,46 @@ package io.jsonwebtoken.jjwtfun.controller; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jws; import io.jsonwebtoken.Jwts; -import io.jsonwebtoken.MalformedJwtException; import io.jsonwebtoken.SignatureAlgorithm; -import io.jsonwebtoken.SignatureException; -import org.springframework.http.HttpStatus; -import org.springframework.web.bind.annotation.ExceptionHandler; +import io.jsonwebtoken.jjwtfun.model.JwtResponse; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; import java.io.UnsupportedEncodingException; import java.time.Instant; -import java.time.temporal.ChronoUnit; import java.util.Date; -import java.util.HashMap; -import java.util.Map; import static org.springframework.web.bind.annotation.RequestMethod.GET; -import static org.springframework.web.bind.annotation.RequestMethod.POST; @RestController -public class StaticJWTController { +public class StaticJWTController extends BaseController { @RequestMapping(value = "/static-builder", method = GET) - public String fixedBuilder() throws UnsupportedEncodingException { + public JwtResponse fixedBuilder() throws UnsupportedEncodingException { String jws = Jwts.builder() .setIssuer("Stormpath") .setSubject("msilverman") .claim("name", "Micah Silverman") .claim("scope", "admins") - .setIssuedAt(Date.from(Instant.ofEpochSecond(1466796822))) // Fri Jun 24 2016 15:33:42 GMT-0400 (EDT) - .setExpiration(Date.from(Instant.ofEpochSecond(1466883222))) // Sat Jun 25 2016 15:33:42 GMT-0400 (EDT) + .setIssuedAt(Date.from(Instant.ofEpochSecond(1466796822L))) // Fri Jun 24 2016 15:33:42 GMT-0400 (EDT) + .setExpiration(Date.from(Instant.ofEpochSecond(4622470422L))) // Sat Jun 24 2116 15:33:42 GMT-0400 (EDT) .signWith( SignatureAlgorithm.HS256, "secret".getBytes("UTF-8") ) .compact(); - return jws; + return new JwtResponse(jws); } @RequestMapping(value = "/parser", method = GET) - public Jws fixedParser(@RequestParam String jws) throws UnsupportedEncodingException { + public JwtResponse fixedParser(@RequestParam String jws) throws UnsupportedEncodingException { Jws claims = Jwts.parser() .setSigningKey("secret".getBytes("UTF-8")) .parseClaimsJws(jws); - return claims; - } - - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler({SignatureException.class, MalformedJwtException.class}) - public Map exception(Exception e) { - Map response = new HashMap<>(); - response.put("status", "ERROR"); - response.put("message", e.getMessage()); - response.put("exception-type", e.getClass().getName()); - return response; + return new JwtResponse(claims); } } diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/model/JwtResponse.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/model/JwtResponse.java new file mode 100644 index 0000000000..4c664bc5f7 --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/model/JwtResponse.java @@ -0,0 +1,70 @@ +package io.jsonwebtoken.jjwtfun.model; + +import com.fasterxml.jackson.annotation.JsonInclude; +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jws; + +@JsonInclude(JsonInclude.Include.NON_NULL) +public class JwtResponse { + private String message; + private Status status; + private String exceptionType; + private String jwt; + private Jws claims; + + public enum Status { + SUCCESS, ERROR + } + + public JwtResponse() {} + + public JwtResponse(String jwt) { + this.jwt = jwt; + this.status = Status.SUCCESS; + } + + public JwtResponse(Jws claims) { + this.claims = claims; + this.status = Status.SUCCESS; + } + + public String getMessage() { + return message; + } + + public void setMessage(String message) { + this.message = message; + } + + public Status getStatus() { + return status; + } + + public void setStatus(Status status) { + this.status = status; + } + + public String getExceptionType() { + return exceptionType; + } + + public void setExceptionType(String exceptionType) { + this.exceptionType = exceptionType; + } + + public String getJwt() { + return jwt; + } + + public void setJwt(String jwt) { + this.jwt = jwt; + } + + public Jws getClaims() { + return claims; + } + + public void setClaims(Jws claims) { + this.claims = claims; + } +} From 14905fae11672ad54eee5fdaf2bddee28abccc7a Mon Sep 17 00:00:00 2001 From: Micah Silverman Date: Mon, 27 Jun 2016 09:05:44 -0400 Subject: [PATCH 113/283] Simplified type checking. --- .../controller/DynamicJWTController.java | 33 ++++++++----------- 1 file changed, 14 insertions(+), 19 deletions(-) diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java index 72bc491b00..184b4b1055 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/DynamicJWTController.java @@ -41,31 +41,31 @@ public class DynamicJWTController extends BaseController { claims.forEach((key, value) -> { switch (key) { case "iss": - ensureType(key, value, String.class); + ensureType(key, value, String.class); builder.setIssuer((String) value); break; case "sub": - ensureType(key, value, String.class); + ensureType(key, value, String.class); builder.setSubject((String) value); break; case "aud": - ensureType(key, value, String.class); + ensureType(key, value, String.class); builder.setAudience((String) value); break; case "exp": - value = ensureType(key, value, Long.class); - builder.setExpiration(Date.from(Instant.ofEpochSecond((Long) value))); + ensureType(key, value, Long.class); + builder.setExpiration(Date.from(Instant.ofEpochSecond(Long.parseLong(value.toString())))); break; case "nbf": - value = ensureType(key, value, Long.class); - builder.setNotBefore(Date.from(Instant.ofEpochSecond((Long) value))); + ensureType(key, value, Long.class); + builder.setNotBefore(Date.from(Instant.ofEpochSecond(Long.parseLong(value.toString())))); break; case "iat": - value = ensureType(key, value, Long.class); - builder.setIssuedAt(Date.from(Instant.ofEpochSecond((Long) value))); + ensureType(key, value, Long.class); + builder.setIssuedAt(Date.from(Instant.ofEpochSecond(Long.parseLong(value.toString())))); break; case "jti": - ensureType(key, value, String.class); + ensureType(key, value, String.class); builder.setId((String) value); break; default: @@ -78,20 +78,15 @@ public class DynamicJWTController extends BaseController { return new JwtResponse(builder.compact()); } - private Object ensureType(String registeredClaim, Object value, Class expectedType) { - // we want to promote Integers to Longs in this case - if (expectedType == Long.class && value instanceof Integer) { - value = ((Integer) value).longValue(); - } - - boolean isCorrectType = expectedType.isInstance(value); + private void ensureType(String registeredClaim, Object value, Class expectedType) { + boolean isCorrectType = + expectedType.isInstance(value) || + expectedType == Long.class && value instanceof Integer; if (!isCorrectType) { String msg = "Expected type: " + expectedType.getCanonicalName() + " for registered claim: '" + registeredClaim + "', but got value: " + value + " of type: " + value.getClass().getCanonicalName(); throw new JwtException(msg); } - - return value; } } From 6a057f33b1e8cc2d717997cf82979eeb57a6f491 Mon Sep 17 00:00:00 2001 From: Micah Silverman Date: Mon, 27 Jun 2016 09:21:42 -0400 Subject: [PATCH 114/283] Set configurable secret for parsing. --- .../jjwtfun/controller/StaticJWTController.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java index 960ac46043..9bf4ab2e45 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/StaticJWTController.java @@ -5,6 +5,7 @@ import io.jsonwebtoken.Jws; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.jjwtfun.model.JwtResponse; +import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -18,6 +19,9 @@ import static org.springframework.web.bind.annotation.RequestMethod.GET; @RestController public class StaticJWTController extends BaseController { + @Value("#{ @environment['jjwtfun.secret'] ?: 'secret' }") + String secret; + @RequestMapping(value = "/static-builder", method = GET) public JwtResponse fixedBuilder() throws UnsupportedEncodingException { @@ -38,10 +42,10 @@ public class StaticJWTController extends BaseController { } @RequestMapping(value = "/parser", method = GET) - public JwtResponse fixedParser(@RequestParam String jws) throws UnsupportedEncodingException { + public JwtResponse parser(@RequestParam String jwt) throws UnsupportedEncodingException { Jws claims = Jwts.parser() - .setSigningKey("secret".getBytes("UTF-8")) - .parseClaimsJws(jws); + .setSigningKey(secret.getBytes("UTF-8")) + .parseClaimsJws(jwt); return new JwtResponse(claims); } From f1630a0199f96fb179c1279e9db1b32311262509 Mon Sep 17 00:00:00 2001 From: Micah Silverman Date: Mon, 27 Jun 2016 13:26:58 -0400 Subject: [PATCH 115/283] Added support for JWT CSRF in Spring Security --- jjwt/pom.xml | 6 ++ .../jjwtfun/config/CSRFConfig.java | 25 ++++++ .../config/JWTCsrfTokenRepository.java | 76 +++++++++++++++++++ .../jjwtfun/config/WebSecurityConfig.java | 23 ++++++ .../jjwtfun/controller/FormController.java | 26 +++++++ .../resources/templates/fragments/head.html | 21 +++++ .../templates/jwt-csrf-form-result.html | 18 +++++ .../resources/templates/jwt-csrf-form.html | 18 +++++ 8 files changed, 213 insertions(+) create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/CSRFConfig.java create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/JWTCsrfTokenRepository.java create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/WebSecurityConfig.java create mode 100644 jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FormController.java create mode 100644 jjwt/src/main/resources/templates/fragments/head.html create mode 100644 jjwt/src/main/resources/templates/jwt-csrf-form-result.html create mode 100644 jjwt/src/main/resources/templates/jwt-csrf-form.html diff --git a/jjwt/pom.xml b/jjwt/pom.xml index 0764194803..24f1c5c5ab 100644 --- a/jjwt/pom.xml +++ b/jjwt/pom.xml @@ -28,11 +28,17 @@ org.springframework.boot spring-boot-devtools
+ org.springframework.boot spring-boot-starter-thymeleaf + + org.springframework.boot + spring-boot-starter-security + + org.springframework.boot spring-boot-starter-test diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/CSRFConfig.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/CSRFConfig.java new file mode 100644 index 0000000000..1a8f05359c --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/CSRFConfig.java @@ -0,0 +1,25 @@ +package io.jsonwebtoken.jjwtfun.config; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.web.csrf.CsrfTokenRepository; + +@Configuration +public class CSRFConfig { + + + private static final Logger log = LoggerFactory.getLogger(CSRFConfig.class); + + @Value("#{ @environment['jjwtfun.secret'] ?: 'secret' }") + String secret; + + @Bean + @ConditionalOnMissingBean + public CsrfTokenRepository jwtCsrfTokenRepository() { + return new JWTCsrfTokenRepository(secret); + } +} diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/JWTCsrfTokenRepository.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/JWTCsrfTokenRepository.java new file mode 100644 index 0000000000..2489beb76e --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/JWTCsrfTokenRepository.java @@ -0,0 +1,76 @@ +package io.jsonwebtoken.jjwtfun.config; + +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.web.csrf.CsrfToken; +import org.springframework.security.web.csrf.CsrfTokenRepository; +import org.springframework.security.web.csrf.DefaultCsrfToken; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.UnsupportedEncodingException; +import java.util.Date; +import java.util.UUID; + +public class JWTCsrfTokenRepository implements CsrfTokenRepository { + + private static final Logger log = LoggerFactory.getLogger(JWTCsrfTokenRepository.class); + private static final String DEFAULT_CSRF_TOKEN_ATTR_NAME = CSRFConfig.class.getName().concat(".CSRF_TOKEN"); + + private String secret; + + public JWTCsrfTokenRepository(String secret) { + this.secret = secret; + } + + @Override + public CsrfToken generateToken(HttpServletRequest request) { + + String id = UUID.randomUUID().toString().replace("-", ""); + + Date now = new Date(); + Date exp = new Date(System.currentTimeMillis() + (1000*60)); // 1 minute + + String token; + try { + token = Jwts.builder() + .setId(id) + .setIssuedAt(now) + .setNotBefore(now) + .setExpiration(exp) + .signWith(SignatureAlgorithm.HS256, secret.getBytes("UTF-8")) + .compact(); + } catch (UnsupportedEncodingException e) { + log.error("Unable to create CSRf JWT: {}", e.getMessage(), e); + token = id; + } + + return new DefaultCsrfToken("X-CSRF-TOKEN", "_csrf", token); + } + + @Override + public void saveToken(CsrfToken token, HttpServletRequest request, HttpServletResponse response) { + if (token == null) { + HttpSession session = request.getSession(false); + if (session != null) { + session.removeAttribute(DEFAULT_CSRF_TOKEN_ATTR_NAME); + } + } + else { + HttpSession session = request.getSession(); + session.setAttribute(DEFAULT_CSRF_TOKEN_ATTR_NAME, token); + } + } + + @Override + public CsrfToken loadToken(HttpServletRequest request) { + HttpSession session = request.getSession(false); + if (session == null) { + return null; + } + return (CsrfToken) session.getAttribute(DEFAULT_CSRF_TOKEN_ATTR_NAME); + } +} diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/WebSecurityConfig.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/WebSecurityConfig.java new file mode 100644 index 0000000000..2715990d38 --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/WebSecurityConfig.java @@ -0,0 +1,23 @@ +package io.jsonwebtoken.jjwtfun.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.csrf.CsrfTokenRepository; + +@Configuration +public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + + @Autowired + CsrfTokenRepository jwtCsrfTokenRepository; + + @Override + protected void configure(HttpSecurity http) throws Exception { + http + .csrf().csrfTokenRepository(jwtCsrfTokenRepository).and() + .authorizeRequests() + .antMatchers("/**") + .permitAll(); + } +} diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FormController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FormController.java new file mode 100644 index 0000000000..178af2f48d --- /dev/null +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FormController.java @@ -0,0 +1,26 @@ +package io.jsonwebtoken.jjwtfun.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import static org.springframework.web.bind.annotation.RequestMethod.GET; +import static org.springframework.web.bind.annotation.RequestMethod.POST; + +@Controller +public class FormController { + + @RequestMapping(value = "/jwt-csrf-form", method = GET) + public String csrfFormGet() { + return "jwt-csrf-form"; + } + + @RequestMapping(value = "/jwt-csrf-form", method = POST) + public String csrfFormPost(@RequestParam(name = "_csrf") String csrf, Model model) { + + model.addAttribute("csrf", csrf); + + return "jwt-csrf-form-result"; + } +} diff --git a/jjwt/src/main/resources/templates/fragments/head.html b/jjwt/src/main/resources/templates/fragments/head.html new file mode 100644 index 0000000000..ce76b0e655 --- /dev/null +++ b/jjwt/src/main/resources/templates/fragments/head.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + +

Nothing to see here, move along.

+ + \ No newline at end of file diff --git a/jjwt/src/main/resources/templates/jwt-csrf-form-result.html b/jjwt/src/main/resources/templates/jwt-csrf-form-result.html new file mode 100644 index 0000000000..6547459c27 --- /dev/null +++ b/jjwt/src/main/resources/templates/jwt-csrf-form-result.html @@ -0,0 +1,18 @@ + + + + + + +
+
+
+

You made it!

+
+

BLARG

+
+
+
+
+ + \ No newline at end of file diff --git a/jjwt/src/main/resources/templates/jwt-csrf-form.html b/jjwt/src/main/resources/templates/jwt-csrf-form.html new file mode 100644 index 0000000000..dcdb664647 --- /dev/null +++ b/jjwt/src/main/resources/templates/jwt-csrf-form.html @@ -0,0 +1,18 @@ + + + + + + +
+
+
+

+

+ +
+
+
+
+ + \ No newline at end of file From 38e829ef35a09e705c95c639da6410a157b90fdc Mon Sep 17 00:00:00 2001 From: Micah Silverman Date: Mon, 27 Jun 2016 18:51:07 -0400 Subject: [PATCH 116/283] Added JWT CSRF expired handling. --- .../jjwtfun/config/CSRFConfig.java | 5 -- .../config/JWTCsrfTokenRepository.java | 6 +- .../jjwtfun/config/WebSecurityConfig.java | 57 +++++++++++++++++-- .../jjwtfun/controller/FormController.java | 7 ++- .../main/resources/templates/expired-jwt.html | 17 ++++++ .../resources/templates/fragments/head.html | 11 ++++ .../templates/jwt-csrf-form-result.html | 2 +- .../resources/templates/jwt-csrf-form.html | 2 +- 8 files changed, 91 insertions(+), 16 deletions(-) create mode 100644 jjwt/src/main/resources/templates/expired-jwt.html diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/CSRFConfig.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/CSRFConfig.java index 1a8f05359c..b3d3bdedfd 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/CSRFConfig.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/CSRFConfig.java @@ -1,7 +1,5 @@ package io.jsonwebtoken.jjwtfun.config; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; @@ -11,9 +9,6 @@ import org.springframework.security.web.csrf.CsrfTokenRepository; @Configuration public class CSRFConfig { - - private static final Logger log = LoggerFactory.getLogger(CSRFConfig.class); - @Value("#{ @environment['jjwtfun.secret'] ?: 'secret' }") String secret; diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/JWTCsrfTokenRepository.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/JWTCsrfTokenRepository.java index 2489beb76e..0a68e4624d 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/JWTCsrfTokenRepository.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/JWTCsrfTokenRepository.java @@ -17,9 +17,9 @@ import java.util.UUID; public class JWTCsrfTokenRepository implements CsrfTokenRepository { - private static final Logger log = LoggerFactory.getLogger(JWTCsrfTokenRepository.class); private static final String DEFAULT_CSRF_TOKEN_ATTR_NAME = CSRFConfig.class.getName().concat(".CSRF_TOKEN"); + private static final Logger log = LoggerFactory.getLogger(JWTCsrfTokenRepository.class); private String secret; public JWTCsrfTokenRepository(String secret) { @@ -32,7 +32,7 @@ public class JWTCsrfTokenRepository implements CsrfTokenRepository { String id = UUID.randomUUID().toString().replace("-", ""); Date now = new Date(); - Date exp = new Date(System.currentTimeMillis() + (1000*60)); // 1 minute + Date exp = new Date(System.currentTimeMillis() + (1000*30)); // 30 seconds String token; try { @@ -68,7 +68,7 @@ public class JWTCsrfTokenRepository implements CsrfTokenRepository { @Override public CsrfToken loadToken(HttpServletRequest request) { HttpSession session = request.getSession(false); - if (session == null) { + if (session == null || "GET".equals(request.getMethod())) { return null; } return (CsrfToken) session.getAttribute(DEFAULT_CSRF_TOKEN_ATTR_NAME); diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/WebSecurityConfig.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/WebSecurityConfig.java index 2715990d38..c09e8cd179 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/WebSecurityConfig.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/config/WebSecurityConfig.java @@ -1,23 +1,72 @@ package io.jsonwebtoken.jjwtfun.config; +import io.jsonwebtoken.JwtException; +import io.jsonwebtoken.Jwts; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.web.csrf.CsrfFilter; +import org.springframework.security.web.csrf.CsrfToken; import org.springframework.security.web.csrf.CsrfTokenRepository; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { + @Value("#{ @environment['jjwtfun.secret'] ?: 'secret' }") + String secret; + @Autowired CsrfTokenRepository jwtCsrfTokenRepository; @Override protected void configure(HttpSecurity http) throws Exception { http - .csrf().csrfTokenRepository(jwtCsrfTokenRepository).and() - .authorizeRequests() - .antMatchers("/**") - .permitAll(); + .addFilterAfter(new JwtCsrfValidatorFilter(), CsrfFilter.class) + .csrf() + .csrfTokenRepository(jwtCsrfTokenRepository) + .ignoringAntMatchers("/dynamic-builder-general") + .ignoringAntMatchers("/dynamic-builder-specific") + .and().authorizeRequests() + .antMatchers("/**") + .permitAll(); + } + + private class JwtCsrfValidatorFilter extends OncePerRequestFilter { + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + // NOTE: A real implementation should have a nonce cache so the token cannot be reused + + CsrfToken token = (CsrfToken) request.getAttribute("_csrf"); + + // CsrfFilter already made sure the token matched. + // Here, we'll make sure it's not expired + if ("POST".equals(request.getMethod()) && token != null) { + try { + Jwts.parser() + .setSigningKey(secret.getBytes("UTF-8")) + .parseClaimsJws(token.getToken()); + } catch (JwtException e) { + // most likely an ExpiredJwtException, but this will handle any + request.setAttribute("exception", e); + response.setStatus(HttpServletResponse.SC_BAD_REQUEST); + RequestDispatcher dispatcher = request.getRequestDispatcher("expired-jwt"); + dispatcher.forward(request, response); + } + } + + filterChain.doFilter(request, response); + } } } diff --git a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FormController.java b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FormController.java index 178af2f48d..54123c63cb 100644 --- a/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FormController.java +++ b/jjwt/src/main/java/io/jsonwebtoken/jjwtfun/controller/FormController.java @@ -18,9 +18,12 @@ public class FormController { @RequestMapping(value = "/jwt-csrf-form", method = POST) public String csrfFormPost(@RequestParam(name = "_csrf") String csrf, Model model) { - model.addAttribute("csrf", csrf); - return "jwt-csrf-form-result"; } + + @RequestMapping("/expired-jwt") + public String expiredJwt() { + return "expired-jwt"; + } } diff --git a/jjwt/src/main/resources/templates/expired-jwt.html b/jjwt/src/main/resources/templates/expired-jwt.html new file mode 100644 index 0000000000..7bf9ff258e --- /dev/null +++ b/jjwt/src/main/resources/templates/expired-jwt.html @@ -0,0 +1,17 @@ + + + + + +
+
+
+

JWT CSRF Token expired

+

+ + Back +
+
+
+ + \ No newline at end of file diff --git a/jjwt/src/main/resources/templates/fragments/head.html b/jjwt/src/main/resources/templates/fragments/head.html index ce76b0e655..2d5f54e5a0 100644 --- a/jjwt/src/main/resources/templates/fragments/head.html +++ b/jjwt/src/main/resources/templates/fragments/head.html @@ -8,6 +8,17 @@ + + + + - log4j - log4j - 1.2.16 + org.springframework.boot + spring-boot-starter-test + test + + org.springframework.data + spring-data-neo4j + ${spring-data-neo4j.version} + test-jar + + + + org.neo4j + neo4j-kernel + ${neo4j.version} + test-jar + + + + org.neo4j.app + neo4j-server + ${neo4j.version} + test-jar + + + + org.neo4j + neo4j-ogm-test + 2.0.2 + test + + + + org.neo4j.test + neo4j-harness + ${neo4j.version} + test + + + junit + junit + 4.12 + junit junit 4.12 - org.springframework spring-test - ${spring.version} + 4.2.3.RELEASE +
- + + + + + maven-compiler-plugin + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + + spring-milestones + http://repo.spring.io/libs-snapshot + + true + + + + + + spring-milestones + http://repo.spring.io/libs-snapshot + + true + + + diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/LibraryNeo4jConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/LibraryNeo4jConfiguration.java deleted file mode 100644 index c497c944d1..0000000000 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/LibraryNeo4jConfiguration.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.baeldung.spring.data.neo4j.config; - - -import org.neo4j.ogm.session.SessionFactory; -import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; -import org.springframework.data.neo4j.config.Neo4jConfiguration; -import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; -import org.springframework.data.neo4j.server.Neo4jServer; -import org.springframework.data.neo4j.server.RemoteServer; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.transaction.annotation.EnableTransactionManagement; - - -@Configuration -@ComponentScan("com.baeldung.spring.data.neo4j") -@EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") -public class LibraryNeo4jConfiguration extends Neo4jConfiguration { - - public static final String URL = System.getenv("NEO4J_URL") != null ? System.getenv("NEO4J_URL") : "http://localhost:7474"; - - @Override - public Neo4jServer neo4jServer() { - return new RemoteServer(URL,"neo4j","password"); - } - - @Override - public SessionFactory getSessionFactory() { - return new SessionFactory("com.baeldung.spring.data.neo4j.model"); - } -} \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java new file mode 100644 index 0000000000..6e57eb1f36 --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java @@ -0,0 +1,38 @@ +package com.baeldung.spring.data.neo4j.config; + +import org.neo4j.ogm.session.SessionFactory; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.neo4j.config.Neo4jConfiguration; +import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +@EnableTransactionManagement +@EnableScheduling +@EnableAutoConfiguration +@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"}) +@Configuration +@EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") +public class MovieDatabaseNeo4jConfiguration extends Neo4jConfiguration { + + public static final String URL = System.getenv("NEO4J_URL") != null ? System.getenv("NEO4J_URL") : "http://neo4j:movies@localhost:7474"; + + @Bean + public org.neo4j.ogm.config.Configuration getConfiguration() { + org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration(); + config + .driverConfiguration() + .setDriverClassName("org.neo4j.ogm.drivers.http.driver.HttpDriver") + .setURI(URL); + return config; + } + + @Override + public SessionFactory getSessionFactory() { + return new SessionFactory(getConfiguration(), "com.baeldung.spring.data.neo4j.domain"); + } +} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java new file mode 100644 index 0000000000..2b6394184d --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jTestConfiguration.java @@ -0,0 +1,34 @@ +package com.baeldung.spring.data.neo4j.config; + +import org.neo4j.ogm.session.SessionFactory; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Profile; +import org.springframework.data.neo4j.config.Neo4jConfiguration; +import org.springframework.data.neo4j.repository.config.EnableNeo4jRepositories; +import org.springframework.data.neo4j.server.Neo4jServer; +import org.springframework.transaction.annotation.EnableTransactionManagement; + + +@EnableTransactionManagement +@ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"}) +@Configuration +@EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") +@Profile({"embedded", "test"}) +public class MovieDatabaseNeo4jTestConfiguration extends Neo4jConfiguration { + + @Bean + public org.neo4j.ogm.config.Configuration getConfiguration() { + org.neo4j.ogm.config.Configuration config = new org.neo4j.ogm.config.Configuration(); + config + .driverConfiguration() + .setDriverClassName("org.neo4j.ogm.drivers.embedded.driver.EmbeddedDriver"); + return config; + } + + @Override + public SessionFactory getSessionFactory() { + return new SessionFactory(getConfiguration(), "com.baeldung.spring.data.neo4j.domain"); + } +} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java new file mode 100644 index 0000000000..8d68b69c05 --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java @@ -0,0 +1,63 @@ +package com.baeldung.spring.data.neo4j.domain; + +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.voodoodyne.jackson.jsog.JSOGGenerator; +import org.neo4j.ogm.annotation.GraphId; +import org.neo4j.ogm.annotation.NodeEntity; +import org.neo4j.ogm.annotation.Relationship; + +import java.util.Collection; +import java.util.List; + +@JsonIdentityInfo(generator=JSOGGenerator.class) + +@NodeEntity +public class Movie { + @GraphId + Long id; + + private String title; + + private int released; + private String tagline; + + @Relationship(type="ACTED_IN", direction = Relationship.INCOMING) private List roles; + +// end::movie[] + + public Movie() { } + + public String getTitle() { + return title; + } + + public int getReleased() { + return released; + } + + public String getTagline() { + return tagline; + } + + public Collection getRoles() { + return roles; + } + + public void setTitle(String title) { + this.title = title; + } + + public void setReleased(int released) { + this.released = released; + } + + public void setTagline(String tagline) { + this.tagline = tagline; + } + + public void setRoles(List roles) { + this.roles = roles; + } + + +} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java new file mode 100644 index 0000000000..d96dc07530 --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Person.java @@ -0,0 +1,50 @@ +package com.baeldung.spring.data.neo4j.domain; + + +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.voodoodyne.jackson.jsog.JSOGGenerator; +import org.neo4j.ogm.annotation.GraphId; +import org.neo4j.ogm.annotation.NodeEntity; +import org.neo4j.ogm.annotation.Relationship; + +import java.util.List; + +@JsonIdentityInfo(generator=JSOGGenerator.class) +@NodeEntity +public class Person { + @GraphId + Long id; + + private String name; + private int born; + + @Relationship(type = "ACTED_IN") + private List movies; + + public Person() { } + + public String getName() { + return name; + } + + public int getBorn() { + return born; + } + + public List getMovies() { + return movies; + } + + public void setName(String name) { + this.name = name; + } + + public void setBorn(int born) { + this.born = born; + } + + public void setMovies(List movies) { + this.movies = movies; + } + +} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java new file mode 100644 index 0000000000..20512a10ad --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Role.java @@ -0,0 +1,50 @@ +package com.baeldung.spring.data.neo4j.domain; + + +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.voodoodyne.jackson.jsog.JSOGGenerator; +import org.neo4j.ogm.annotation.EndNode; +import org.neo4j.ogm.annotation.GraphId; +import org.neo4j.ogm.annotation.RelationshipEntity; +import org.neo4j.ogm.annotation.StartNode; + +import java.util.Collection; + +@JsonIdentityInfo(generator=JSOGGenerator.class) +@RelationshipEntity(type = "ACTED_IN") +public class Role { + @GraphId + Long id; + private Collection roles; + @StartNode + private Person person; + @EndNode + private Movie movie; + + public Role() { + } + + public Collection getRoles() { + return roles; + } + + public Person getPerson() { + return person; + } + + public Movie getMovie() { + return movie; + } + + public void setRoles(Collection roles) { + this.roles = roles; + } + + public void setPerson(Person person) { + this.person = person; + } + + public void setMovie(Movie movie) { + this.movie = movie; + } +} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Book.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Book.java deleted file mode 100644 index 2c643a4b7c..0000000000 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Book.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.baeldung.spring.data.neo4j.model; - -import org.neo4j.graphdb.Direction; -import org.neo4j.ogm.annotation.*; - -import java.util.Collection; -import java.util.List; -import java.util.concurrent.atomic.AtomicLong; - -@NodeEntity -public class Book { - - private static final AtomicLong TS = new AtomicLong(); - - @GraphId - private Long id; - private String title; - private int released; - - @Relationship(type="AUTHORED_BY", direction = Relationship.INCOMING) - private Person person; - - public Book() { - this.id = TS.getAndIncrement(); - } - - public Long getId() { - return id; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public int getReleased() { - return released; - } - - public void setReleased(int released) { - this.released = released; - } - - public Person getPerson() { - return person; - } - - public void setPerson(Person person) { - this.person = person; - } -} \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Person.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Person.java deleted file mode 100644 index 53444c8f6c..0000000000 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/model/Person.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.baeldung.spring.data.neo4j.model; - -import org.neo4j.ogm.annotation.*; - -import java.util.List; -import java.util.concurrent.atomic.AtomicLong; - -@NodeEntity -public class Person { - - private static final AtomicLong TS = new AtomicLong(); - - @GraphId - private Long id; - private String name; - private int born; - - @Relationship(type = "AUTHORED_BY") - private List books; - - public Person() { - this.id = TS.incrementAndGet(); - } - - public Long getId() { - return id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getBorn() { - return born; - } - - public void setBorn(int born) { - this.born = born; - } - - public List getBooks() { - return books; - } - - public void setBooks(List books) { - this.books = books; - } -} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java deleted file mode 100644 index c76d2862fc..0000000000 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/BookRepository.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.baeldung.spring.data.neo4j.repostory; - -import com.baeldung.spring.data.neo4j.model.Book; -import org.springframework.data.neo4j.annotation.Query; -import org.springframework.data.neo4j.repository.GraphRepository; -import org.springframework.data.repository.query.Param; -import org.springframework.stereotype.Repository; - -import java.util.Collection; -import java.util.List; -import java.util.Map; - -@Repository -public interface BookRepository extends GraphRepository { - -} \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java new file mode 100644 index 0000000000..3c5953eff3 --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java @@ -0,0 +1,25 @@ +package com.baeldung.spring.data.neo4j.repostory; + +import com.baeldung.spring.data.neo4j.domain.Movie; +import org.springframework.data.neo4j.annotation.Query; +import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.data.repository.query.Param; +import org.springframework.data.rest.core.annotation.RepositoryRestResource; + +import java.util.Collection; +import java.util.List; +import java.util.Map; + + +@RepositoryRestResource(collectionResourceRel = "movies", path = "movies") +public interface MovieRepository extends GraphRepository { + Movie findByTitle(@Param("title") String title); + + @Query("MATCH (m:Movie) WHERE m.title =~ ('(?i).*'+{title}+'.*') RETURN m") + Collection findByTitleContaining(@Param("title") String title); + + @Query("MATCH (m:Movie)<-[:ACTED_IN]-(a:Person) RETURN m.title as movie, collect(a.name) as cast LIMIT {limit}") + List> graph(@Param("limit") int limit); +} + + diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java new file mode 100644 index 0000000000..4c287f99a4 --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/PersonRepository.java @@ -0,0 +1,11 @@ +package com.baeldung.spring.data.neo4j.repostory; + +import com.baeldung.spring.data.neo4j.domain.Person; +import org.springframework.data.neo4j.repository.GraphRepository; +import org.springframework.stereotype.Repository; + + +@Repository +public interface PersonRepository extends GraphRepository { + +} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java deleted file mode 100644 index daa988c92d..0000000000 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookService.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.baeldung.spring.data.neo4j.service; - -import com.baeldung.spring.data.neo4j.model.Book; - -import java.util.Map; - -public interface BookService { - - Book save(Book book); - - void delete(long bookId); - - long bookCount(); - - Book findBookById(Long id); - - void deleteAllInGraph(); -} diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java deleted file mode 100644 index 0c07e4acd9..0000000000 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/service/BookServiceImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.baeldung.spring.data.neo4j.service; - - -import com.baeldung.spring.data.neo4j.model.Book; -import com.baeldung.spring.data.neo4j.repostory.BookRepository; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.*; - -@Service -public class BookServiceImpl implements BookService { - - @Autowired - private BookRepository bookRepository; - - public Book save(final Book book){ - return bookRepository.save(book); - } - - public long bookCount(){ - return bookRepository.count(); - } - - public Book findBookById(final Long id){ - return bookRepository.findOne(id); - } - - public void delete(final long bookId){ - bookRepository.delete(bookId); - } - - public void deleteAllInGraph(){ - bookRepository.deleteAll(); - } - - -} \ No newline at end of file diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java new file mode 100644 index 0000000000..532cc79091 --- /dev/null +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/services/MovieService.java @@ -0,0 +1,50 @@ +package com.baeldung.spring.data.neo4j.services; + +import com.baeldung.spring.data.neo4j.repostory.MovieRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +@Service +@Transactional +public class MovieService { + + @Autowired + MovieRepository movieRepository; + + private Map toD3Format(Iterator> result) { + List> nodes = new ArrayList>(); + List> rels= new ArrayList>(); + int i=0; + while (result.hasNext()) { + Map row = result.next(); + nodes.add(map("title",row.get("movie"),"label","movie")); + int target=i; + i++; + for (Object name : (Collection) row.get("cast")) { + Map actor = map("title", name,"label","actor"); + int source = nodes.indexOf(actor); + if (source == -1) { + nodes.add(actor); + source = i++; + } + rels.add(map("source",source,"target",target)); + } + } + return map("nodes", nodes, "links", rels); + } + + private Map map(String key1, Object value1, String key2, Object value2) { + Map result = new HashMap(2); + result.put(key1,value1); + result.put(key2,value2); + return result; + } + + public Map graph(int limit) { + Iterator> result = movieRepository.graph(limit).iterator(); + return toD3Format(result); + } +} diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java deleted file mode 100644 index 17c75a1921..0000000000 --- a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/BookServiceTest.java +++ /dev/null @@ -1,79 +0,0 @@ -package com.baeldung.spring.data.neo4j; - -import com.baeldung.spring.data.neo4j.config.LibraryNeo4jConfiguration; -import com.baeldung.spring.data.neo4j.model.Book; -import com.baeldung.spring.data.neo4j.model.Person; -import com.baeldung.spring.data.neo4j.service.BookService; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@RunWith(SpringJUnit4ClassRunner.class) -@ContextConfiguration(classes = LibraryNeo4jConfiguration.class) -public class BookServiceTest { - - @Autowired - private BookService bookServiceImpl; - - @Test - public void testSavingBook() { - final Person author1 = new Person(); - author1.setName("Mark Twain"); - author1.setBorn(1835); - final Book book = new Book(); - book.setTitle("The Adventures of Tom Sawyer"); - book.setReleased(1876); - book.setPerson(author1); - - final Book savedBook = bookServiceImpl.save(book); - assertEquals(book.getTitle(), savedBook.getTitle()); - } - - @Test - public void testFindingTheSavedBook() { - final Person author1 = new Person(); - author1.setName("Edgar Allan Poe"); - author1.setBorn(1809); - final Book book = new Book(); - book.setTitle("The Cask of Amontillado"); - book.setReleased(1846); - book.setPerson(author1); - - bookServiceImpl.save(book); - final Book retrievedBook = bookServiceImpl.findBookById(book.getId()); - assertEquals(book.getTitle(), retrievedBook.getTitle()); - } - - @Test - public void testCountTheSavedBooks() { - long bookCount = bookServiceImpl.bookCount(); - assertEquals(bookCount, 2); - } - @Test - public void testDeletingASavedBook() { - final Person author1 = new Person(); - author1.setName("Rider Haggard"); - author1.setBorn(1856); - final Book book = new Book(); - book.setTitle("King Solomon's Mines"); - book.setReleased(1885); - book.setPerson(author1); - - final Book savedBook = bookServiceImpl.save(book); - bookServiceImpl.delete(savedBook.getId()); - final Book retrievedBook = bookServiceImpl.findBookById(book.getId()); - assertNull(retrievedBook); - } - - @Test - public void testDeleteAllSavedBook() { - bookServiceImpl.deleteAllInGraph(); - final long bookCount = bookServiceImpl.bookCount(); - assertEquals(bookCount, 0); - } -} diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java new file mode 100644 index 0000000000..4f09284b6a --- /dev/null +++ b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java @@ -0,0 +1,131 @@ +package com.baeldung.spring.data.neo4j; + +import com.baeldung.spring.data.neo4j.config.MovieDatabaseNeo4jTestConfiguration; +import com.baeldung.spring.data.neo4j.domain.Movie; +import com.baeldung.spring.data.neo4j.domain.Person; +import com.baeldung.spring.data.neo4j.domain.Role; +import com.baeldung.spring.data.neo4j.repostory.MovieRepository; +import com.baeldung.spring.data.neo4j.repostory.PersonRepository; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +import java.util.*; + +import static junit.framework.TestCase.assertNull; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = MovieDatabaseNeo4jTestConfiguration.class) +@ActiveProfiles(profiles = "test") +public class MovieRepositoryTest { + + @Autowired + private MovieRepository instance; + + @Autowired + private PersonRepository personRepository; + + public MovieRepositoryTest() { + } + + @Before + public void initializeDatabase() { + System.out.println("seeding embedded database"); + Movie matrix = new Movie(); + matrix.setTitle("The Italian Job"); + matrix.setReleased(1999); + instance.save(matrix); + + Person mark = new Person(); + mark.setName("Mark Wahlberg"); + personRepository.save(mark); + + Role neo = new Role(); + neo.setMovie(matrix); + neo.setPerson(mark); + Collection roleNames = new HashSet(); + roleNames.add("Charlie Croker"); + neo.setRoles(roleNames); + List roles = new ArrayList(); + roles.add(neo); + matrix.setRoles(roles); + instance.save(matrix); + } + + @Test + @DirtiesContext + public void testFindByTitle() { + System.out.println("findByTitle"); + String title = "The Italian Job"; + Movie result = instance.findByTitle(title); + assertNotNull(result); + assertEquals(1999, result.getReleased()); + } + + @Test + @DirtiesContext + public void testCount() { + System.out.println("count"); + long result = instance.count(); + assertNotNull(result); + assertEquals(1, result); + } + + @Test + @DirtiesContext + public void testFindAll() { + System.out.println("findAll"); + Collection result = (Collection) instance.findAll(); + assertNotNull(result); + assertEquals(1, result.size()); + } + + @Test + @DirtiesContext + public void testFindByTitleContaining() { + System.out.println("findByTitleContaining"); + String title = "Italian"; + Collection result = instance.findByTitleContaining(title); + assertNotNull(result); + assertEquals(1,result.size()); + } + + @Test + @DirtiesContext + public void testGraph() { + System.out.println("graph"); + List> graph = instance.graph(5); + assertEquals(1,graph.size()); + Map map = graph.get(0); + assertEquals(2,map.size()); + String[] cast = (String[])map.get("cast"); + String movie = (String)map.get("movie"); + assertEquals("The Italian Job",movie); + assertEquals("Mark Wahlberg", cast[0]); + } + + @Test + @DirtiesContext + public void testDeleteMovie() { + System.out.println("deleteMovie"); + instance.delete( + instance.findByTitle("The Italian Job")); + assertNull(instance.findByTitle("The Italian Job")); + } + + @Test + @DirtiesContext + public void testDeleteAll() { + System.out.println("deleteAll"); + instance.deleteAll(); + Collection result = (Collection) instance.findAll(); + assertEquals(0,result.size()); + } +} From 6d897e664b78f0771224f78b38238eb11b3c1704 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:14:10 +0300 Subject: [PATCH 120/283] Update README.md --- httpclient/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/httpclient/README.md b/httpclient/README.md index e06c57da71..a848edfea6 100644 --- a/httpclient/README.md +++ b/httpclient/README.md @@ -1,7 +1,9 @@ ========= - ## HttpClient 4.x Cookbooks and Examples +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring + ### Relevant Articles: From d232553cbf0a34ea30277600106f3f9d91992a80 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:16:18 +0300 Subject: [PATCH 121/283] Update README.md --- jackson/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jackson/README.md b/jackson/README.md index 53b9c7c31d..68765de686 100644 --- a/jackson/README.md +++ b/jackson/README.md @@ -2,6 +2,9 @@ ## Jackson Cookbooks and Examples +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring + ### Relevant Articles: - [Jackson Ignore Properties on Marshalling](http://www.baeldung.com/jackson-ignore-properties-on-serialization) - [Jackson – Unmarshall to Collection/Array](http://www.baeldung.com/jackson-collection-array) From 594ab38b16d5a4bd66c2b4405c05c59af65f6e23 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:20:19 +0300 Subject: [PATCH 122/283] Update README.md --- rest-testing/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rest-testing/README.md b/rest-testing/README.md index db7f0c8a86..54a2e98dda 100644 --- a/rest-testing/README.md +++ b/rest-testing/README.md @@ -2,6 +2,8 @@ ## REST Testing and Examples +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: - [Test a REST API with Java](http://www.baeldung.com/2011/10/13/integration-testing-a-rest-api/) From 49e996888f586ecf25d29917c93a3f32d73e70de Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:21:06 +0300 Subject: [PATCH 123/283] Update README.md --- spring-all/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-all/README.md b/spring-all/README.md index 977b8b7357..3188d0a42c 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -2,6 +2,9 @@ ## Spring General Example Project +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring + This project is used to replicate Spring Exceptions only. From 92d44e3dcdbe415532864ac12434d26f5c04a219 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:21:31 +0300 Subject: [PATCH 124/283] Update README.md --- spring-all/README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spring-all/README.md b/spring-all/README.md index 3188d0a42c..47c947a414 100644 --- a/spring-all/README.md +++ b/spring-all/README.md @@ -2,11 +2,10 @@ ## Spring General Example Project -###The Course -The "REST With Spring" Classes: http://bit.ly/restwithspring - This project is used to replicate Spring Exceptions only. +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant articles: - [Properties with Spring](http://www.baeldung.com/2012/02/06/properties-with-spring) - checkout the `org.baeldung.properties` package for all scenarios of properties injection and usage From 862c13eb9244f0f57bc927adceb8038fb390c9ea Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:22:26 +0300 Subject: [PATCH 125/283] Update README.md --- spring-data-rest/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-data-rest/README.md b/spring-data-rest/README.md index d9be83113b..7dc439206b 100644 --- a/spring-data-rest/README.md +++ b/spring-data-rest/README.md @@ -1,3 +1,6 @@ +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring + # About this project This project contains examples from the [Introduction to Spring Data REST](http://www.baeldung.com/spring-data-rest-intro) article from Baeldung. From 413ccc79c268aef96df59eba9b3024555a13f40f Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:24:40 +0300 Subject: [PATCH 126/283] Update README.md --- spring-katharsis/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-katharsis/README.md b/spring-katharsis/README.md index ec0141f41a..cf2a001760 100644 --- a/spring-katharsis/README.md +++ b/spring-katharsis/README.md @@ -2,5 +2,8 @@ ## Java Web Application +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring + ### Relevant Articles: - [JSON API in a Java Web Application](http://www.baeldung.com/json-api-java-spring-web-app) From 7d1d6327174b6be40435eaa2748cc0dcdc923799 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:26:30 +0300 Subject: [PATCH 127/283] Create README.MD --- raml/README.MD | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 raml/README.MD diff --git a/raml/README.MD b/raml/README.MD new file mode 100644 index 0000000000..2a87b46021 --- /dev/null +++ b/raml/README.MD @@ -0,0 +1,2 @@ +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring From 779b8ecfd64ca93367ea0fbc86c964c39e5f7a4b Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:27:04 +0300 Subject: [PATCH 128/283] Create README.MD --- spring-boot/README.MD | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 spring-boot/README.MD diff --git a/spring-boot/README.MD b/spring-boot/README.MD new file mode 100644 index 0000000000..2a87b46021 --- /dev/null +++ b/spring-boot/README.MD @@ -0,0 +1,2 @@ +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring From 46d5938ab63335c214e0903020a176b38cf2784d Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:27:43 +0300 Subject: [PATCH 129/283] Update README.md --- spring-mvc-java/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-mvc-java/README.md b/spring-mvc-java/README.md index e5264b0370..951d80033e 100644 --- a/spring-mvc-java/README.md +++ b/spring-mvc-java/README.md @@ -2,6 +2,8 @@ ## Spring MVC with Java Configuration Example Project +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: - [Spring Bean Annotations](http://www.baeldung.com/spring-bean-annotations) From 2d65d5227434b6b8ba63dedd60edfaedd20dd72c Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:28:30 +0300 Subject: [PATCH 130/283] Update README.md --- spring-mvc-no-xml/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-mvc-no-xml/README.md b/spring-mvc-no-xml/README.md index 5ffe2385b5..208cb35f78 100644 --- a/spring-mvc-no-xml/README.md +++ b/spring-mvc-no-xml/README.md @@ -2,6 +2,8 @@ ## Spring MVC with NO XML Configuration Example Project +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: -- \ No newline at end of file +- From 1f2666090c39959d0782d90c302979bcbe7d4f54 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:29:00 +0300 Subject: [PATCH 131/283] Update README.md --- spring-mvc-xml/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-mvc-xml/README.md b/spring-mvc-xml/README.md index 2409ec8174..ce823a9682 100644 --- a/spring-mvc-xml/README.md +++ b/spring-mvc-xml/README.md @@ -1,5 +1,8 @@ ========= +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring + ## Spring MVC with XML Configuration Example Project - access a sample jsp page at: `http://localhost:8080/spring-mvc-xml/sample.html` From 96e903feebb8e4441530558ec4775e9061bd819e Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:29:36 +0300 Subject: [PATCH 132/283] Create README.MD --- spring-rest-docs/README.MD | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 spring-rest-docs/README.MD diff --git a/spring-rest-docs/README.MD b/spring-rest-docs/README.MD new file mode 100644 index 0000000000..2a87b46021 --- /dev/null +++ b/spring-rest-docs/README.MD @@ -0,0 +1,2 @@ +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring From 7d7c5f3d8a86249177f0dce8ee0806a0d7c22cc4 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:30:06 +0300 Subject: [PATCH 133/283] Update README.md --- spring-rest/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-rest/README.md b/spring-rest/README.md index 9d373962c4..7d993b38b8 100644 --- a/spring-rest/README.md +++ b/spring-rest/README.md @@ -2,6 +2,8 @@ ## Spring REST Example Project +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: - [Spring @RequestMapping](http://www.baeldung.com/spring-requestmapping) From 89cae684875290955a524217bedc6f224d2785e7 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:30:45 +0300 Subject: [PATCH 134/283] Update README.md --- spring-security-basic-auth/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-security-basic-auth/README.md b/spring-security-basic-auth/README.md index 95e45ae519..f3c29e1777 100644 --- a/spring-security-basic-auth/README.md +++ b/spring-security-basic-auth/README.md @@ -2,6 +2,8 @@ ## Spring Security with Basic Authentication Example Project +###The Course +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Article: - [Spring Security - security none, filters none, access permitAll](http://www.baeldung.com/security-none-filters-none-access-permitAll) @@ -9,4 +11,4 @@ ### Notes -- the project includes both views as well as a REST layer \ No newline at end of file +- the project includes both views as well as a REST layer From 134a4a0e1ae2415491596fbdb3172fde3b2e8c16 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:31:19 +0300 Subject: [PATCH 135/283] Create README.MD --- spring-security-client/README.MD | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 spring-security-client/README.MD diff --git a/spring-security-client/README.MD b/spring-security-client/README.MD new file mode 100644 index 0000000000..2a87b46021 --- /dev/null +++ b/spring-security-client/README.MD @@ -0,0 +1,2 @@ +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring From 4e183efda376f63d89dc25e8565e6927eee2f401 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:32:12 +0300 Subject: [PATCH 136/283] Create README.MD --- spring-scurity-custom-permission/README.MD | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 spring-scurity-custom-permission/README.MD diff --git a/spring-scurity-custom-permission/README.MD b/spring-scurity-custom-permission/README.MD new file mode 100644 index 0000000000..8fb14fa522 --- /dev/null +++ b/spring-scurity-custom-permission/README.MD @@ -0,0 +1,2 @@ +###The Course +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity From f0e103b1911e8eb808f6d4d955a055a2cf350646 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:32:45 +0300 Subject: [PATCH 137/283] Update README.md --- spring-security-mvc-custom/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-security-mvc-custom/README.md b/spring-security-mvc-custom/README.md index 17f32e4a2f..cbf5fc6a97 100644 --- a/spring-security-mvc-custom/README.md +++ b/spring-security-mvc-custom/README.md @@ -2,6 +2,8 @@ ## Spring Security Login Example Project +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring ### Relevant Articles: - [Spring Security Remember Me](http://www.baeldung.com/spring-security-remember-me) From 915fa89f8949c6ca5966ad93df3cee64d6dbaa50 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:33:11 +0300 Subject: [PATCH 138/283] Update README.md --- spring-security-rest-custom/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spring-security-rest-custom/README.md b/spring-security-rest-custom/README.md index f19af32d41..38dc638e8d 100644 --- a/spring-security-rest-custom/README.md +++ b/spring-security-rest-custom/README.md @@ -2,6 +2,9 @@ ## Spring Security for REST Example Project +###The Course +The "REST With Spring" Classes: http://bit.ly/restwithspring + ### Relevant Articles: - [Spring Security Authentication Provider](http://www.baeldung.com/spring-security-authentication-provider) - [Retrieve User Information in Spring Security](http://www.baeldung.com/get-user-in-spring-security) From 5b80cbd556d8bd95afa08e09daada41310ce9559 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:33:40 +0300 Subject: [PATCH 139/283] Update README.md --- spring-security-mvc-digest-auth/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-security-mvc-digest-auth/README.md b/spring-security-mvc-digest-auth/README.md index 3b93a84505..21835266bf 100644 --- a/spring-security-mvc-digest-auth/README.md +++ b/spring-security-mvc-digest-auth/README.md @@ -2,6 +2,8 @@ ## Spring Security with Digest Authentication Example Project +###The Course +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Article: - [Spring Security Digest Authentication](http://www.baeldung.com/spring-security-digest-authentication) From 71e18a28a09e8d447ad21c0650b6398ca4535177 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:34:22 +0300 Subject: [PATCH 140/283] Update README.md --- spring-security-mvc-ldap/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-security-mvc-ldap/README.md b/spring-security-mvc-ldap/README.md index 686f611f99..1eb3b75405 100644 --- a/spring-security-mvc-ldap/README.md +++ b/spring-security-mvc-ldap/README.md @@ -1,6 +1,8 @@ ## Spring Security with LDAP Example Project +###The Course +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Article: - [Spring Security - security none, filters none, access permitAll](http://www.baeldung.com/security-none-filters-none-access-permitAll) From 2018411b14a8e10f7b64aed233403a1c74f7e378 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:35:04 +0300 Subject: [PATCH 141/283] Update README.md --- spring-security-mvc-login/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-security-mvc-login/README.md b/spring-security-mvc-login/README.md index 256078f4b6..448c25d27b 100644 --- a/spring-security-mvc-login/README.md +++ b/spring-security-mvc-login/README.md @@ -2,11 +2,13 @@ ## Spring Security Login Example Project +###The Course +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Articles: - [Spring Security Form Login](http://www.baeldung.com/spring-security-login) - [Spring Security Logout](http://www.baeldung.com/spring-security-logout) -- [Spring Security Expressions – hasRole Example](http://www.baeldung.com/spring-security-expressions-basic) +- [Spring Security Expressions – hasRole Example](http://www.baeldung.com/spring-security-expressions-basic) ### Build the Project From 4c912d8a5107e8c11837efa3ae5fb698547779c8 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:35:35 +0300 Subject: [PATCH 142/283] Update README.md --- spring-security-mvc-persisted-remember-me/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-security-mvc-persisted-remember-me/README.md b/spring-security-mvc-persisted-remember-me/README.md index df83fd3d77..0d5f4f5f0e 100644 --- a/spring-security-mvc-persisted-remember-me/README.md +++ b/spring-security-mvc-persisted-remember-me/README.md @@ -2,6 +2,8 @@ ## Spring Security Persisted Remember Me Example Project +###The Course +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Articles: - [Spring Security Persisted Remember Me](http://www.baeldung.com/spring-security-persistent-remember-me) From ed9a36bd31738271a47b89cfc7f575edb1280fdb Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:36:02 +0300 Subject: [PATCH 143/283] Update README.md --- spring-security-mvc-session/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spring-security-mvc-session/README.md b/spring-security-mvc-session/README.md index 0df728688a..28f216c130 100644 --- a/spring-security-mvc-session/README.md +++ b/spring-security-mvc-session/README.md @@ -2,9 +2,11 @@ ## Spring Security Login Example Project +###The Course +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Articles: -- [HttpSessionListener Example – Monitoring](http://www.baeldung.com/httpsessionlistener_with_metrics) +- [HttpSessionListener Example – Monitoring](http://www.baeldung.com/httpsessionlistener_with_metrics) - [Spring Security Session Management](http://www.baeldung.com/spring-security-session) From 4162c4671e9bff40e950cd19e3850617ab6bb234 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:36:31 +0300 Subject: [PATCH 144/283] Update README.md --- spring-security-rest-basic-auth/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-security-rest-basic-auth/README.md b/spring-security-rest-basic-auth/README.md index 723bcebbdd..9621773d91 100644 --- a/spring-security-rest-basic-auth/README.md +++ b/spring-security-rest-basic-auth/README.md @@ -2,6 +2,8 @@ ## REST API with Basic Authentication - Example Project +###The Course +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Articles: - [RestTemplate with Basic Authentication in Spring](http://www.baeldung.com/2012/04/16/how-to-use-resttemplate-with-basic-authentication-in-spring-3-1) From e3fc9bca7de968c634819edfbed483fdcf6b0d5e Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:36:58 +0300 Subject: [PATCH 145/283] Update README.md --- spring-security-rest-digest-auth/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spring-security-rest-digest-auth/README.md b/spring-security-rest-digest-auth/README.md index 06e847edad..4fdc934fe5 100644 --- a/spring-security-rest-digest-auth/README.md +++ b/spring-security-rest-digest-auth/README.md @@ -2,6 +2,8 @@ ## REST API with Digest Authentication - Example Project +###The Course +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Articles: - [RestTemplate with Digest Authentication](http://www.baeldung.com/resttemplate-digest-authentication) From 9b7cf1152d2709df58b0e8bab9503ded68343d55 Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:37:34 +0300 Subject: [PATCH 146/283] Update README.md --- spring-security-rest-full/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spring-security-rest-full/README.md b/spring-security-rest-full/README.md index 72e8636df1..ca18ebe79a 100644 --- a/spring-security-rest-full/README.md +++ b/spring-security-rest-full/README.md @@ -2,8 +2,9 @@ ## REST Example Project with Spring Security -### The Course - The "REST With Spring" Classes: http://bit.ly/restwithspring +### Courses +The "REST With Spring" Classes: http://bit.ly/restwithspring +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Articles: - [Spring Security Expressions - hasRole Example](http://www.baeldung.com/spring-security-expressions-basic) From ea0907bd383cd5fbcfcf111fbba084932f34852c Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:38:19 +0300 Subject: [PATCH 147/283] Update README.md --- spring-security-rest-full/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-security-rest-full/README.md b/spring-security-rest-full/README.md index ca18ebe79a..947d32e87c 100644 --- a/spring-security-rest-full/README.md +++ b/spring-security-rest-full/README.md @@ -4,6 +4,7 @@ ### Courses The "REST With Spring" Classes: http://bit.ly/restwithspring + The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Articles: From a79e7b7ea24ba8285a858d1ef06d52165b86969b Mon Sep 17 00:00:00 2001 From: m0cacin0 Date: Tue, 28 Jun 2016 12:38:51 +0300 Subject: [PATCH 148/283] Update README.md --- spring-security-rest/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/spring-security-rest/README.md b/spring-security-rest/README.md index 290cd491e0..87f14a9047 100644 --- a/spring-security-rest/README.md +++ b/spring-security-rest/README.md @@ -2,6 +2,10 @@ ## Spring Security for REST Example Project +### Courses +The "REST With Spring" Classes: http://bit.ly/restwithspring + +The "Learn Spring Security" Classes: http://bit.ly/learnspringsecurity ### Relevant Articles: - [Spring REST Service Security](http://www.baeldung.com/2011/10/31/securing-a-restful-web-service-with-spring-security-3-1-part-3/) From 1a3e005442fc76b9b1428eb21fd94a8bc4af81fe Mon Sep 17 00:00:00 2001 From: Sameera Date: Tue, 28 Jun 2016 23:17:24 +0530 Subject: [PATCH 149/283] updating test cases --- spring-data-neo4j/pom.xml | 42 ------------------- .../MovieDatabaseNeo4jConfiguration.java | 2 - .../data/neo4j/repostory/MovieRepository.java | 2 - .../data/neo4j/MovieRepositoryTest.java | 12 +++--- 4 files changed, 7 insertions(+), 51 deletions(-) diff --git a/spring-data-neo4j/pom.xml b/spring-data-neo4j/pom.xml index 320b6ce019..a5a2e9220a 100644 --- a/spring-data-neo4j/pom.xml +++ b/spring-data-neo4j/pom.xml @@ -13,15 +13,8 @@ UTF-8 3.0.1 4.1.1.RELEASE - Hopper-SR1 - - org.springframework.boot - spring-boot-starter-parent - 1.3.0.RELEASE - - org.springframework.data @@ -29,11 +22,6 @@ ${spring-data-neo4j.version} - - org.springframework.boot - spring-boot-starter-data-rest - - com.voodoodyne.jackson.jsog jackson-jsog @@ -41,9 +29,6 @@ compile - - - org.springframework.boot spring-boot-starter-test @@ -89,11 +74,6 @@ junit 4.12 - - junit - junit - 4.12 - org.springframework spring-test @@ -107,29 +87,7 @@ maven-compiler-plugin - - org.springframework.boot - spring-boot-maven-plugin - - - - spring-milestones - http://repo.spring.io/libs-snapshot - - true - - - - - - spring-milestones - http://repo.spring.io/libs-snapshot - - true - - - diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java index 6e57eb1f36..003e72971a 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java @@ -1,7 +1,6 @@ package com.baeldung.spring.data.neo4j.config; import org.neo4j.ogm.session.SessionFactory; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @@ -13,7 +12,6 @@ import org.springframework.transaction.annotation.EnableTransactionManagement; @EnableTransactionManagement @EnableScheduling -@EnableAutoConfiguration @ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"}) @Configuration @EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java index 3c5953eff3..90833d7c70 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java @@ -4,14 +4,12 @@ import com.baeldung.spring.data.neo4j.domain.Movie; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.repository.GraphRepository; import org.springframework.data.repository.query.Param; -import org.springframework.data.rest.core.annotation.RepositoryRestResource; import java.util.Collection; import java.util.List; import java.util.Map; -@RepositoryRestResource(collectionResourceRel = "movies", path = "movies") public interface MovieRepository extends GraphRepository { Movie findByTitle(@Param("title") String title); diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java index 4f09284b6a..53ef380dbd 100644 --- a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java +++ b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java @@ -82,7 +82,8 @@ public class MovieRepositoryTest { @DirtiesContext public void testFindAll() { System.out.println("findAll"); - Collection result = (Collection) instance.findAll(); + Collection result = + (Collection) instance.findAll(); assertNotNull(result); assertEquals(1, result.size()); } @@ -92,7 +93,8 @@ public class MovieRepositoryTest { public void testFindByTitleContaining() { System.out.println("findByTitleContaining"); String title = "Italian"; - Collection result = instance.findByTitleContaining(title); + Collection result = + instance.findByTitleContaining(title); assertNotNull(result); assertEquals(1,result.size()); } @@ -115,8 +117,7 @@ public class MovieRepositoryTest { @DirtiesContext public void testDeleteMovie() { System.out.println("deleteMovie"); - instance.delete( - instance.findByTitle("The Italian Job")); + instance.delete(instance.findByTitle("The Italian Job")); assertNull(instance.findByTitle("The Italian Job")); } @@ -125,7 +126,8 @@ public class MovieRepositoryTest { public void testDeleteAll() { System.out.println("deleteAll"); instance.deleteAll(); - Collection result = (Collection) instance.findAll(); + Collection result = + (Collection) instance.findAll(); assertEquals(0,result.size()); } } From 548365130aa9d1230eb2c21e2915857c40a2cd9f Mon Sep 17 00:00:00 2001 From: Sameera Date: Tue, 28 Jun 2016 23:38:40 +0530 Subject: [PATCH 150/283] updating test cases --- .../data/neo4j/config/MovieDatabaseNeo4jConfiguration.java | 2 -- .../baeldung/spring/data/neo4j/repostory/MovieRepository.java | 3 ++- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java index 003e72971a..ac9a7260be 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/config/MovieDatabaseNeo4jConfiguration.java @@ -10,8 +10,6 @@ import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.transaction.annotation.EnableTransactionManagement; -@EnableTransactionManagement -@EnableScheduling @ComponentScan(basePackages = {"com.baeldung.spring.data.neo4j.services"}) @Configuration @EnableNeo4jRepositories(basePackages = "com.baeldung.spring.data.neo4j.repostory") diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java index 90833d7c70..850d2336ba 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/repostory/MovieRepository.java @@ -4,12 +4,13 @@ import com.baeldung.spring.data.neo4j.domain.Movie; import org.springframework.data.neo4j.annotation.Query; import org.springframework.data.neo4j.repository.GraphRepository; import org.springframework.data.repository.query.Param; +import org.springframework.stereotype.Repository; import java.util.Collection; import java.util.List; import java.util.Map; - +@Repository public interface MovieRepository extends GraphRepository { Movie findByTitle(@Param("title") String title); From 31b3e0fa167dc56af6b6144361db3d03382ee5d5 Mon Sep 17 00:00:00 2001 From: Sameera Date: Tue, 28 Jun 2016 23:48:45 +0530 Subject: [PATCH 151/283] updating test cases --- .../spring/data/neo4j/domain/Movie.java | 2 - .../data/neo4j/MovieRepositoryTest.java | 66 +++++++++---------- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java index 8d68b69c05..e48dfaf276 100644 --- a/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java +++ b/spring-data-neo4j/src/main/java/com/baeldung/spring/data/neo4j/domain/Movie.java @@ -23,8 +23,6 @@ public class Movie { @Relationship(type="ACTED_IN", direction = Relationship.INCOMING) private List roles; -// end::movie[] - public Movie() { } public String getTitle() { diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java index 53ef380dbd..92d27d2a1e 100644 --- a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java +++ b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java @@ -25,38 +25,38 @@ import static org.junit.Assert.assertNotNull; @ContextConfiguration(classes = MovieDatabaseNeo4jTestConfiguration.class) @ActiveProfiles(profiles = "test") public class MovieRepositoryTest { - + @Autowired private MovieRepository instance; @Autowired private PersonRepository personRepository; - + public MovieRepositoryTest() { } - - @Before + + @Before public void initializeDatabase() { - System.out.println("seeding embedded database"); - Movie matrix = new Movie(); - matrix.setTitle("The Italian Job"); - matrix.setReleased(1999); - instance.save(matrix); - - Person mark = new Person(); - mark.setName("Mark Wahlberg"); - personRepository.save(mark); - - Role neo = new Role(); - neo.setMovie(matrix); - neo.setPerson(mark); - Collection roleNames = new HashSet(); - roleNames.add("Charlie Croker"); - neo.setRoles(roleNames); - List roles = new ArrayList(); - roles.add(neo); - matrix.setRoles(roles); - instance.save(matrix); + System.out.println("seeding embedded database"); + Movie italianJob = new Movie(); + italianJob.setTitle("The Italian Job"); + italianJob.setReleased(1999); + instance.save(italianJob); + + Person mark = new Person(); + mark.setName("Mark Wahlberg"); + personRepository.save(mark); + + Role charlie = new Role(); + charlie.setMovie(italianJob); + charlie.setPerson(mark); + Collection roleNames = new HashSet(); + roleNames.add("Charlie Croker"); + charlie.setRoles(roleNames); + List roles = new ArrayList(); + roles.add(charlie); + italianJob.setRoles(roles); + instance.save(italianJob); } @Test @@ -96,20 +96,20 @@ public class MovieRepositoryTest { Collection result = instance.findByTitleContaining(title); assertNotNull(result); - assertEquals(1,result.size()); + assertEquals(1, result.size()); } @Test @DirtiesContext public void testGraph() { System.out.println("graph"); - List> graph = instance.graph(5); - assertEquals(1,graph.size()); - Map map = graph.get(0); - assertEquals(2,map.size()); - String[] cast = (String[])map.get("cast"); - String movie = (String)map.get("movie"); - assertEquals("The Italian Job",movie); + List> graph = instance.graph(5); + assertEquals(1, graph.size()); + Map map = graph.get(0); + assertEquals(2, map.size()); + String[] cast = (String[]) map.get("cast"); + String movie = (String) map.get("movie"); + assertEquals("The Italian Job", movie); assertEquals("Mark Wahlberg", cast[0]); } @@ -128,6 +128,6 @@ public class MovieRepositoryTest { instance.deleteAll(); Collection result = (Collection) instance.findAll(); - assertEquals(0,result.size()); + assertEquals(0, result.size()); } } From d4c2d508a407e4011e1fa87937fa71287c2acff9 Mon Sep 17 00:00:00 2001 From: Sameera Date: Wed, 29 Jun 2016 00:31:38 +0530 Subject: [PATCH 152/283] updating test cases --- .../data/neo4j/MovieRepositoryTest.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java index 92d27d2a1e..8061b3c2a7 100644 --- a/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java +++ b/spring-data-neo4j/src/test/java/com/baeldung/spring/data/neo4j/MovieRepositoryTest.java @@ -27,7 +27,7 @@ import static org.junit.Assert.assertNotNull; public class MovieRepositoryTest { @Autowired - private MovieRepository instance; + private MovieRepository movieRepository; @Autowired private PersonRepository personRepository; @@ -41,7 +41,7 @@ public class MovieRepositoryTest { Movie italianJob = new Movie(); italianJob.setTitle("The Italian Job"); italianJob.setReleased(1999); - instance.save(italianJob); + movieRepository.save(italianJob); Person mark = new Person(); mark.setName("Mark Wahlberg"); @@ -56,7 +56,7 @@ public class MovieRepositoryTest { List roles = new ArrayList(); roles.add(charlie); italianJob.setRoles(roles); - instance.save(italianJob); + movieRepository.save(italianJob); } @Test @@ -64,7 +64,7 @@ public class MovieRepositoryTest { public void testFindByTitle() { System.out.println("findByTitle"); String title = "The Italian Job"; - Movie result = instance.findByTitle(title); + Movie result = movieRepository.findByTitle(title); assertNotNull(result); assertEquals(1999, result.getReleased()); } @@ -73,9 +73,9 @@ public class MovieRepositoryTest { @DirtiesContext public void testCount() { System.out.println("count"); - long result = instance.count(); - assertNotNull(result); - assertEquals(1, result); + long movieCount = movieRepository.count(); + assertNotNull(movieCount); + assertEquals(1, movieCount); } @Test @@ -83,7 +83,7 @@ public class MovieRepositoryTest { public void testFindAll() { System.out.println("findAll"); Collection result = - (Collection) instance.findAll(); + (Collection) movieRepository.findAll(); assertNotNull(result); assertEquals(1, result.size()); } @@ -94,7 +94,7 @@ public class MovieRepositoryTest { System.out.println("findByTitleContaining"); String title = "Italian"; Collection result = - instance.findByTitleContaining(title); + movieRepository.findByTitleContaining(title); assertNotNull(result); assertEquals(1, result.size()); } @@ -103,7 +103,7 @@ public class MovieRepositoryTest { @DirtiesContext public void testGraph() { System.out.println("graph"); - List> graph = instance.graph(5); + List> graph = movieRepository.graph(5); assertEquals(1, graph.size()); Map map = graph.get(0); assertEquals(2, map.size()); @@ -117,17 +117,17 @@ public class MovieRepositoryTest { @DirtiesContext public void testDeleteMovie() { System.out.println("deleteMovie"); - instance.delete(instance.findByTitle("The Italian Job")); - assertNull(instance.findByTitle("The Italian Job")); + movieRepository.delete(movieRepository.findByTitle("The Italian Job")); + assertNull(movieRepository.findByTitle("The Italian Job")); } @Test @DirtiesContext public void testDeleteAll() { System.out.println("deleteAll"); - instance.deleteAll(); + movieRepository.deleteAll(); Collection result = - (Collection) instance.findAll(); + (Collection) movieRepository.findAll(); assertEquals(0, result.size()); } } From 0ab62700ca6edb512da1db470589cad995afa7c6 Mon Sep 17 00:00:00 2001 From: Raquel Garrido Date: Tue, 28 Jun 2016 21:11:04 +0200 Subject: [PATCH 153/283] Last changes (#468) * dom4j * added more parsers * StaxParser * Jaxb binding * Jaxb binding * Finish article * apply some changes * Organize imports --- .../java/com/baeldung/xml/JaxbParser.java | 3 +- .../java/com/baeldung/xml/StaxParser.java | 2 +- .../com/baeldung/xml/binding/Tutorial.java | 8 ++- .../java/com/baeldung/xml/model/Tutorial.java | 49 ------------------- .../com/baeldung/xml/DefaultParserTest.java | 20 ++++---- .../com/baeldung/xml/Dom4JParserTest.java | 30 ++++++------ .../java/com/baeldung/xml/JDomParserTest.java | 16 +++--- .../java/com/baeldung/xml/JaxbParserTest.java | 15 +++--- .../java/com/baeldung/xml/JaxenDemoTest.java | 14 +++--- .../java/com/baeldung/xml/StaxParserTest.java | 17 ++++--- 10 files changed, 61 insertions(+), 113 deletions(-) delete mode 100644 xml/src/main/java/com/baeldung/xml/model/Tutorial.java diff --git a/xml/src/main/java/com/baeldung/xml/JaxbParser.java b/xml/src/main/java/com/baeldung/xml/JaxbParser.java index 9c06ec5fba..758ebb969c 100644 --- a/xml/src/main/java/com/baeldung/xml/JaxbParser.java +++ b/xml/src/main/java/com/baeldung/xml/JaxbParser.java @@ -2,7 +2,6 @@ package com.baeldung.xml; import java.io.File; import java.util.ArrayList; -import java.util.Date; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; @@ -40,7 +39,7 @@ public class JaxbParser { tut.setType("XML"); tut.setTitle("XML with Jaxb"); tut.setDescription("XML Binding with Jaxb"); - tut.setDate(new Date()); + tut.setDate("04/02/2015"); tut.setAuthor("Jaxb author"); tutorials.getTutorial().add(tut); diff --git a/xml/src/main/java/com/baeldung/xml/StaxParser.java b/xml/src/main/java/com/baeldung/xml/StaxParser.java index 6f83e022f8..e14d872831 100644 --- a/xml/src/main/java/com/baeldung/xml/StaxParser.java +++ b/xml/src/main/java/com/baeldung/xml/StaxParser.java @@ -17,7 +17,7 @@ import javax.xml.stream.events.EndElement; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; -import com.baeldung.xml.model.Tutorial; +import com.baeldung.xml.binding.Tutorial; public class StaxParser { diff --git a/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java b/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java index c4668a9f77..7201d499d0 100644 --- a/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java +++ b/xml/src/main/java/com/baeldung/xml/binding/Tutorial.java @@ -1,7 +1,5 @@ package com.baeldung.xml.binding; -import java.util.Date; - import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; @@ -11,7 +9,7 @@ public class Tutorial { private String type; private String title; private String description; - private Date date; + private String date; private String author; @@ -44,11 +42,11 @@ public class Tutorial { public void setDescription(String description) { this.description = description; } - public Date getDate() { + public String getDate() { return date; } @XmlElement - public void setDate(Date date) { + public void setDate(String date) { this.date = date; } public String getAuthor() { diff --git a/xml/src/main/java/com/baeldung/xml/model/Tutorial.java b/xml/src/main/java/com/baeldung/xml/model/Tutorial.java deleted file mode 100644 index 40a3f858cf..0000000000 --- a/xml/src/main/java/com/baeldung/xml/model/Tutorial.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.baeldung.xml.model; - -public class Tutorial { - - private String tutId; - private String type; - private String title; - private String description; - private String date; - private String author; - - - public String getTutId() { - return tutId; - } - public void setTutId(String tutId) { - this.tutId = tutId; - } - public String getType() { - return type; - } - public void setType(String type) { - this.type = type; - } - public String getTitle() { - return title; - } - public void setTitle(String title) { - this.title = title; - } - public String getDescription() { - return description; - } - public void setDescription(String description) { - this.description = description; - } - public String getDate() { - return date; - } - public void setDate(String date) { - this.date = date; - } - public String getAuthor() { - return author; - } - public void setAuthor(String author) { - this.author = author; - } -} diff --git a/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java index 7408e41b92..734e7a93cb 100644 --- a/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/DefaultParserTest.java @@ -1,22 +1,20 @@ package com.baeldung.xml; +import static org.junit.Assert.*; + +import java.io.File; + import org.junit.Test; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import java.io.File; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - public class DefaultParserTest { - private final String fileName = "src/test/resources/example.xml"; + final String fileName = "src/test/resources/example.xml"; - private final String fileNameSpace = "src/test/resources/example_namespace.xml"; + final String fileNameSpace = "src/test/resources/example_namespace.xml"; - private DefaultParser parser; + DefaultParser parser; @Test public void getFirstLevelNodeListTest() { @@ -32,7 +30,7 @@ public class DefaultParserTest { parser = new DefaultParser(new File(fileName)); NodeList list = parser.getNodeListByTitle("XML"); - for (int i = 0; i < list.getLength(); i++) { + for (int i = 0; null != list && i < list.getLength(); i++) { Node nod = list.item(i); assertEquals("java", nod.getAttributes().getNamedItem("type").getTextContent()); assertEquals("02", nod.getAttributes().getNamedItem("tutId").getTextContent()); @@ -58,7 +56,7 @@ public class DefaultParserTest { public void getNodeListByDateTest(){ parser = new DefaultParser(new File(fileName)); NodeList list = parser.getNodeListByTitle("04022016"); - for (int i = 0; i < list.getLength(); i++) { + for (int i = 0; null != list && i < list.getLength(); i++) { Node nod = list.item(i); assertEquals("java", nod.getAttributes().getNamedItem("type").getTextContent()); assertEquals("04", nod.getAttributes().getNamedItem("tutId").getTextContent()); diff --git a/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java b/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java index 77e5fcdcda..277eca8355 100644 --- a/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/Dom4JParserTest.java @@ -1,25 +1,25 @@ package com.baeldung.xml; -import org.dom4j.Element; -import org.dom4j.Node; -import org.junit.Test; - -import java.io.File; -import java.util.List; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.io.File; +import java.util.List; + +import org.dom4j.Element; +import org.dom4j.Node; +import org.junit.Test; + public class Dom4JParserTest { - private static final String FILE_NAME = "src/test/resources/example.xml"; + final String fileName = "src/test/resources/example.xml"; - private Dom4JParser parser; + Dom4JParser parser; @Test public void getRootElementTest() { - parser = new Dom4JParser(new File(FILE_NAME)); + parser = new Dom4JParser(new File(fileName)); Element root = parser.getRootElement(); assertNotNull(root); @@ -28,7 +28,7 @@ public class Dom4JParserTest { @Test public void getFirstElementListTest() { - parser = new Dom4JParser(new File(FILE_NAME)); + parser = new Dom4JParser(new File(fileName)); List firstList = parser.getFirstElementList(); assertNotNull(firstList); @@ -38,7 +38,7 @@ public class Dom4JParserTest { @Test public void getElementByIdTest() { - parser = new Dom4JParser(new File(FILE_NAME)); + parser = new Dom4JParser(new File(fileName)); Node element = parser.getNodeById("03"); String type = element.valueOf("@type"); @@ -47,7 +47,7 @@ public class Dom4JParserTest { @Test public void getElementsListByTitleTest() { - parser = new Dom4JParser(new File(FILE_NAME)); + parser = new Dom4JParser(new File(fileName)); Node element = parser.getElementsListByTitle("XML"); assertEquals("java", element.valueOf("@type")); @@ -58,7 +58,7 @@ public class Dom4JParserTest { @Test public void generateModifiedDocumentTest() { - parser = new Dom4JParser(new File(FILE_NAME)); + parser = new Dom4JParser(new File(fileName)); parser.generateModifiedDocument(); File generatedFile = new File("src/test/resources/example_updated.xml"); @@ -73,7 +73,7 @@ public class Dom4JParserTest { @Test public void generateNewDocumentTest() { - parser = new Dom4JParser(new File(FILE_NAME)); + parser = new Dom4JParser(new File(fileName)); parser.generateNewDocument(); File newFile = new File("src/test/resources/example_new.xml"); diff --git a/xml/src/test/java/com/baeldung/xml/JDomParserTest.java b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java index e4034c48f0..981458469f 100644 --- a/xml/src/test/java/com/baeldung/xml/JDomParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/JDomParserTest.java @@ -1,20 +1,20 @@ package com.baeldung.xml; -import org.jdom2.Element; -import org.junit.Test; - -import java.io.File; -import java.util.List; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.io.File; +import java.util.List; + +import org.jdom2.Element; +import org.junit.Test; + public class JDomParserTest { - private final String fileName = "src/test/resources/example.xml"; + final String fileName = "src/test/resources/example.xml"; - private JDomParser parser; + JDomParser parser; @Test public void getFirstElementListTest() { diff --git a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java index 6e1a201b59..6c31a7bfdd 100644 --- a/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/JaxbParserTest.java @@ -1,19 +1,20 @@ package com.baeldung.xml; -import com.baeldung.xml.binding.Tutorials; -import org.junit.Test; - -import java.io.File; - import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.io.File; + +import org.junit.Test; + +import com.baeldung.xml.binding.Tutorials; + public class JaxbParserTest { - private final String fileName = "src/test/resources/example.xml"; + final String fileName = "src/test/resources/example.xml"; - private JaxbParser parser; + JaxbParser parser; @Test public void getFullDocumentTest(){ diff --git a/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java b/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java index 8a88484f11..2521fcaf8a 100644 --- a/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java +++ b/xml/src/test/java/com/baeldung/xml/JaxenDemoTest.java @@ -1,18 +1,18 @@ package com.baeldung.xml; -import org.junit.Test; - -import java.io.File; -import java.util.List; - import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.io.File; +import java.util.List; + +import org.junit.Test; + public class JaxenDemoTest { - private final String fileName = "src/test/resources/example.xml"; + final String fileName = "src/test/resources/example.xml"; - private JaxenDemo jaxenDemo; + JaxenDemo jaxenDemo; @Test public void getFirstLevelNodeListTest() { diff --git a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java index d1080c88ac..cf7ee1ee75 100644 --- a/xml/src/test/java/com/baeldung/xml/StaxParserTest.java +++ b/xml/src/test/java/com/baeldung/xml/StaxParserTest.java @@ -1,19 +1,20 @@ package com.baeldung.xml; -import com.baeldung.xml.model.Tutorial; -import org.junit.Test; - -import java.io.File; -import java.util.List; - import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import java.io.File; +import java.util.List; + +import org.junit.Test; + +import com.baeldung.xml.binding.Tutorial; + public class StaxParserTest { - private final String fileName = "src/test/resources/example.xml"; + final String fileName = "src/test/resources/example.xml"; - private StaxParser parser; + StaxParser parser; @Test public void getAllTutorialsTest(){ From 51372775ca7e5aef953f8ca667da6b06c0c9e667 Mon Sep 17 00:00:00 2001 From: reymalahay Date: Wed, 1 Jun 2016 06:47:26 -0600 Subject: [PATCH 154/283] Code and related files for the dependency injection demos. --- .gitignore | 1 - .../docs/autowired-name-demo-classdiagram.png | Bin 48700 -> 0 bytes .../docs/autowired-type-demo-classdiagram.png | Bin 23197 -> 0 bytes .../docs/autowired-type-demo-classdiagram.xml | 1 - .../docs/inject-demo-classdiagram.png | Bin 38729 -> 0 bytes .../docs/inject-field-demo-classdiagram.png | Bin 19402 -> 0 bytes .../docs/inject-field-demo-classdiagram.xml | 1 - .../docs/inject-name-demo-classdiagram.png | Bin 23358 -> 0 bytes .../docs/inject-name-demo-classdiagram.xml | 1 - .../inject-qualifier-demo-classdiagram.png | Bin 37170 -> 43724 bytes .../inject-qualifier-demo-classdiagram.xml | 2 +- .../docs/resource-demo-classdiagram.png | Bin 46095 -> 0 bytes .../docs/resource-field-demo-classdiagram.png | Bin 17692 -> 0 bytes .../docs/resource-field-demo-classdiagram.xml | 1 - ...source-method-byname-demo-classdiagram.png | Bin 29579 -> 0 bytes .../resource-method-demo-classdiagram.png | Bin 19905 -> 0 bytes .../resource-method-demo-classdiagram.xml | 1 - dependency-injection/pom.xml | 2 +- ...eDemo.java => FieldAutowiredNameTest.java} | 14 ++++-- ...wiredDemo.java => FieldAutowiredTest.java} | 11 +++-- ....java => FieldQualifierAutowiredTest.java} | 16 ++++--- .../ApplicationContextTestAutowiredName.java | 9 ++++ ...licationContextTestAutowiredQualifier.java | 25 ++++++++++ .../ApplicationContextTestAutowiredType.java | 16 +++++++ .../ApplicationContextTestInjectName.java | 17 +++++++ ...ApplicationContextTestInjectQualifier.java | 23 ++++++++++ .../ApplicationContextTestInjectType.java | 16 +++++++ ...pplicationContextTestResourceNameType.java | 16 +++++++ ...plicationContextTestResourceQualifier.java | 22 +++++++++ .../AnotherArbitraryDependency.java | 3 ++ .../dependency/ArbitraryDependency.java | 3 ++ .../YetAnotherArbitraryDependency.java | 3 ++ ...ctDemo.java => FieldByNameInjectTest.java} | 14 ++++-- .../com/baeldung/inject/FieldInjectDemo.java | 27 ----------- .../com/baeldung/inject/FieldInjectTest.java | 31 +++++++++++++ ...emo.java => FieldQualifierInjectTest.java} | 18 +++++--- .../resource/FieldResourceInjectionDemo.java | 25 ---------- .../resource/FieldResourceInjectionTest.java | 31 +++++++++++++ ...ava => MethodByQualifierResourceTest.java} | 12 +++-- ...emo.java => MethodByTypeResourceTest.java} | 14 ++++-- ....java => MethodResourceInjectionTest.java} | 15 ++++-- .../baeldung/resource/NamedResourceTest.java | 13 ++++-- .../QualifierResourceInjectionDemo.java | 35 -------------- .../QualifierResourceInjectionTest.java | 43 ++++++++++++++++++ ....java => SetterResourceInjectionTest.java} | 14 ++++-- 45 files changed, 353 insertions(+), 143 deletions(-) delete mode 100644 dependency-injection/docs/autowired-name-demo-classdiagram.png delete mode 100644 dependency-injection/docs/autowired-type-demo-classdiagram.png delete mode 100644 dependency-injection/docs/autowired-type-demo-classdiagram.xml delete mode 100644 dependency-injection/docs/inject-demo-classdiagram.png delete mode 100644 dependency-injection/docs/inject-field-demo-classdiagram.png delete mode 100644 dependency-injection/docs/inject-field-demo-classdiagram.xml delete mode 100644 dependency-injection/docs/inject-name-demo-classdiagram.png delete mode 100644 dependency-injection/docs/inject-name-demo-classdiagram.xml delete mode 100644 dependency-injection/docs/resource-demo-classdiagram.png delete mode 100644 dependency-injection/docs/resource-field-demo-classdiagram.png delete mode 100644 dependency-injection/docs/resource-field-demo-classdiagram.xml delete mode 100644 dependency-injection/docs/resource-method-byname-demo-classdiagram.png delete mode 100644 dependency-injection/docs/resource-method-demo-classdiagram.png delete mode 100644 dependency-injection/docs/resource-method-demo-classdiagram.xml rename dependency-injection/src/test/java/com/baeldung/autowired/{FieldAutowiredNameDemo.java => FieldAutowiredNameTest.java} (55%) rename dependency-injection/src/test/java/com/baeldung/autowired/{FieldAutowiredDemo.java => FieldAutowiredTest.java} (63%) rename dependency-injection/src/test/java/com/baeldung/autowired/{FieldQualifierAutowiredDemo.java => FieldQualifierAutowiredTest.java} (62%) create mode 100644 dependency-injection/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredName.java create mode 100644 dependency-injection/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredQualifier.java create mode 100644 dependency-injection/src/test/java/com/baeldung/configuration/ApplicationContextTestAutowiredType.java create mode 100644 dependency-injection/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectName.java create mode 100644 dependency-injection/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectQualifier.java create mode 100644 dependency-injection/src/test/java/com/baeldung/configuration/ApplicationContextTestInjectType.java create mode 100644 dependency-injection/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceNameType.java create mode 100644 dependency-injection/src/test/java/com/baeldung/configuration/ApplicationContextTestResourceQualifier.java rename dependency-injection/src/test/java/com/baeldung/inject/{FieldByNameInjectDemo.java => FieldByNameInjectTest.java} (56%) delete mode 100644 dependency-injection/src/test/java/com/baeldung/inject/FieldInjectDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/inject/FieldInjectTest.java rename dependency-injection/src/test/java/com/baeldung/inject/{FieldQualifierInjectDemo.java => FieldQualifierInjectTest.java} (54%) delete mode 100644 dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/resource/FieldResourceInjectionTest.java rename dependency-injection/src/test/java/com/baeldung/resource/{MethodByQualifierResourceDemo.java => MethodByQualifierResourceTest.java} (72%) rename dependency-injection/src/test/java/com/baeldung/resource/{MethodByTypeResourceDemo.java => MethodByTypeResourceTest.java} (52%) rename dependency-injection/src/test/java/com/baeldung/resource/{MethodResourceInjectionDemo.java => MethodResourceInjectionTest.java} (53%) delete mode 100644 dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionDemo.java create mode 100644 dependency-injection/src/test/java/com/baeldung/resource/QualifierResourceInjectionTest.java rename dependency-injection/src/test/java/com/baeldung/resource/{SetterResourceInjectionDemo.java => SetterResourceInjectionTest.java} (51%) diff --git a/.gitignore b/.gitignore index 319eb5ca2d..e841cc4bf5 100644 --- a/.gitignore +++ b/.gitignore @@ -27,4 +27,3 @@ target/ spring-openid/src/main/resources/application.properties .recommenders/ - diff --git a/dependency-injection/docs/autowired-name-demo-classdiagram.png b/dependency-injection/docs/autowired-name-demo-classdiagram.png deleted file mode 100644 index f367fdbf415f93423568c1df91bc5e1e693b0f8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48700 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 Y=MFcICm*DEk>$xlrR+D#GC1P*e`SQA6#xJL diff --git a/dependency-injection/docs/autowired-type-demo-classdiagram.png b/dependency-injection/docs/autowired-type-demo-classdiagram.png deleted file mode 100644 index 5f3f3415566893568d451f5ba4f7028e9b256a14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23197 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 \ No newline at end of file diff --git a/dependency-injection/docs/inject-demo-classdiagram.png b/dependency-injection/docs/inject-demo-classdiagram.png deleted file mode 100644 index 9996fdc733f23d2ced4d5587a2d0cbe4b7d552bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38729 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 \ No newline at end of file diff --git a/dependency-injection/docs/inject-name-demo-classdiagram.png b/dependency-injection/docs/inject-name-demo-classdiagram.png deleted file mode 100644 index 96a6a3425e0e6fe8ec6982cbf0470a692163abfa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23358 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