From 641eed62557daeb4bf2b4fdf469e20172fa61140 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Mon, 10 Apr 2017 01:12:45 +0300 Subject: [PATCH 1/8] dynamic validation --- .../dynamicvalidation/ContactInfo.java | 26 +++++++++ .../ContactInfoValidator.java | 35 ++++++++++++ .../DynamicValidationApp.java | 15 ++++++ .../config/CustomerController.java | 54 +++++++++++++++++++ .../config/PersistenceConfig.java | 30 +++++++++++ .../dao/ContactInfoExpressionRepository.java | 9 ++++ .../model/ContactInfoExpression.java | 41 ++++++++++++++ .../dynamicvalidation/model/Customer.java | 45 ++++++++++++++++ .../src/main/resources/data-expressions.sql | 3 ++ .../src/main/resources/schema-expressions.sql | 5 ++ .../main/resources/templates/customer.html | 41 ++++++++++++++ 11 files changed, 304 insertions(+) create mode 100644 spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfo.java create mode 100644 spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java create mode 100644 spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java create mode 100644 spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java create mode 100644 spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java create mode 100644 spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java create mode 100644 spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java create mode 100644 spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java create mode 100644 spring-boot/src/main/resources/data-expressions.sql create mode 100644 spring-boot/src/main/resources/schema-expressions.sql create mode 100644 spring-boot/src/main/resources/templates/customer.html diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfo.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfo.java new file mode 100644 index 000000000000..41f873b42a2d --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfo.java @@ -0,0 +1,26 @@ +package com.baeldung.dynamicvalidation; + +import static java.lang.annotation.ElementType.ANNOTATION_TYPE; +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import javax.validation.Constraint; +import javax.validation.Payload; + +@Constraint(validatedBy = { ContactInfoValidator.class }) +@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) +@Retention(RetentionPolicy.RUNTIME) +public @interface ContactInfo { + String message() default "Invalid value"; + + Class[] groups() default {}; + + Class[] payload() default {}; + +} diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java new file mode 100644 index 000000000000..9a742e93083f --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java @@ -0,0 +1,35 @@ +package com.baeldung.dynamicvalidation; + +import java.util.regex.Pattern; + +import javax.validation.ConstraintValidator; +import javax.validation.ConstraintValidatorContext; + +import org.springframework.beans.factory.annotation.Autowired; + +import com.baeldung.dynamicvalidation.dao.ContactInfoExpressionRepository; +import com.baeldung.dynamicvalidation.model.ContactInfoExpression; + +public class ContactInfoValidator implements ConstraintValidator { + + @Autowired + private ContactInfoExpressionRepository expressionRepository; + + @Override + public void initialize(final ContactInfo contactInfo) { + } + + @Override + public boolean isValid(final String value, final ConstraintValidatorContext context) { + String expressionType = System.getProperty("contactInfoType"); + System.out.println(expressionType); + final ContactInfoExpression expression = expressionRepository.getOne(expressionType); + if (expression != null) { + final String pattern = expression.getPattern(); + if (Pattern.matches(pattern, value)) + return true; + } + return false; + } + +} diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java new file mode 100644 index 000000000000..361a7b1c03e5 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/DynamicValidationApp.java @@ -0,0 +1,15 @@ +package com.baeldung.dynamicvalidation; + +import javax.annotation.security.RolesAllowed; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class DynamicValidationApp { + @RolesAllowed("*") + public static void main(String[] args) { + System.setProperty("security.basic.enabled", "false"); + SpringApplication.run(DynamicValidationApp.class, args); + } +} diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java new file mode 100644 index 000000000000..44db2d5228d6 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java @@ -0,0 +1,54 @@ +package com.baeldung.dynamicvalidation.config; + +import java.util.List; + +import javax.validation.Valid; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.validation.BindingResult; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import com.baeldung.dynamicvalidation.dao.ContactInfoExpressionRepository; +import com.baeldung.dynamicvalidation.model.ContactInfoExpression; +import com.baeldung.dynamicvalidation.model.Customer; + +@Controller +public class CustomerController { + + @Autowired + private ContactInfoExpressionRepository expressionRepository; + + @GetMapping("/customer") + public String getCustomerPage(Model model) { + model.addAttribute("contactInfoType", System.getProperty("contactInfoType")); + return "customer"; + } + + @PostMapping("/customer") + public String validateCustomer(@Valid final Customer customer, final BindingResult result, final Model model) { + if (result.hasErrors()) { + model.addAttribute("message", "The information is invalid!"); + } else { + model.addAttribute("message", "The information is valid!"); + } + model.addAttribute("contactInfoType", System.getProperty("contactInfoType")); + return "customer"; + } + + @PostMapping("/updateContactInfoType") + @ResponseBody + public void updateContactInfoType(@RequestParam final String type) { + System.setProperty("contactInfoType", type); + } + + @GetMapping("/contactInfoTypes") + @ResponseBody + public List getContactInfoType(Model model) { + return expressionRepository.findAll(); + } + +} diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java new file mode 100644 index 000000000000..0eeac2a8dccc --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java @@ -0,0 +1,30 @@ +package com.baeldung.dynamicvalidation.config; + +import javax.sql.DataSource; + +import org.springframework.boot.autoconfigure.domain.EntityScan; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.jpa.repository.config.EnableJpaRepositories; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; +import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; + +@EnableJpaRepositories("com.baeldung.dynamicvalidation.dao") +@EntityScan("com.baeldung.dynamicvalidation.model") +@Configuration +public class PersistenceConfig { + + @Bean + public JdbcTemplate getJdbcTemplate() { + return new JdbcTemplate(dataSource()); + } + + @Bean + public DataSource dataSource() { + EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); + EmbeddedDatabase db = builder.setType(EmbeddedDatabaseType.H2).addScript("schema-expressions.sql").addScript("data-expressions.sql").build(); + return db; + } +} diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java new file mode 100644 index 000000000000..ccacc297a590 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java @@ -0,0 +1,9 @@ +package com.baeldung.dynamicvalidation.dao; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.baeldung.dynamicvalidation.model.ContactInfoExpression; + +public interface ContactInfoExpressionRepository extends JpaRepository { + +} diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java new file mode 100644 index 000000000000..c529c8ce3c77 --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java @@ -0,0 +1,41 @@ +package com.baeldung.dynamicvalidation.model; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.Id; + +@Entity +public class ContactInfoExpression { + + @Id + @Column(name = "expression_type") + private String type; + private String pattern; + + public ContactInfoExpression() { + + } + + public ContactInfoExpression(final String type, final String pattern) { + super(); + this.type = type; + this.pattern = pattern; + } + + public String getType() { + return type; + } + + public void setType(final String type) { + this.type = type; + } + + public String getPattern() { + return pattern; + } + + public void setPattern(final String pattern) { + this.pattern = pattern; + } + +} diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java new file mode 100644 index 000000000000..d729283fb21b --- /dev/null +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java @@ -0,0 +1,45 @@ +package com.baeldung.dynamicvalidation.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +import com.baeldung.dynamicvalidation.ContactInfo; + +@Entity +public class Customer { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @ContactInfo + private String contactInfo; + + public Customer() { + } + + public Customer(final long id, final String contactInfo) { + super(); + this.id = id; + this.contactInfo = contactInfo; + } + + public String getContactInfo() { + return contactInfo; + } + + public void setContactInfo(final String contactInfo) { + this.contactInfo = contactInfo; + } + + public long getId() { + return id; + } + + public void setId(final long id) { + this.id = id; + } + +} diff --git a/spring-boot/src/main/resources/data-expressions.sql b/spring-boot/src/main/resources/data-expressions.sql new file mode 100644 index 000000000000..3e702a759d0d --- /dev/null +++ b/spring-boot/src/main/resources/data-expressions.sql @@ -0,0 +1,3 @@ +insert into contact_info_expression values ('email','[a-z0-9!#$%&*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?') +insert into contact_info_expression values ('phone','^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$') +insert into contact_info_expression values ('website','^(http:\/\/www\.|https:\/\/www\.|http:\/\/|https:\/\/)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$') \ No newline at end of file diff --git a/spring-boot/src/main/resources/schema-expressions.sql b/spring-boot/src/main/resources/schema-expressions.sql new file mode 100644 index 000000000000..59f6ab05ebbc --- /dev/null +++ b/spring-boot/src/main/resources/schema-expressions.sql @@ -0,0 +1,5 @@ +create table contact_info_expression( + expression_type varchar(50) not null, + pattern varchar(500) not null, + PRIMARY KEY ( expression_type ) +); \ No newline at end of file diff --git a/spring-boot/src/main/resources/templates/customer.html b/spring-boot/src/main/resources/templates/customer.html new file mode 100644 index 000000000000..6aec5ab59018 --- /dev/null +++ b/spring-boot/src/main/resources/templates/customer.html @@ -0,0 +1,41 @@ + + + +Customer Page + + + + +
+
+Contact Info:
+Contact Info Type:
+ +
+

+
+
+ + \ No newline at end of file From c306d225ec76039755bb8f00c831eaf2b0f69810 Mon Sep 17 00:00:00 2001 From: Loredana Date: Tue, 11 Apr 2017 09:50:58 +0300 Subject: [PATCH 2/8] small fixes --- .../com/baeldung/dynamicvalidation/ContactInfoValidator.java | 2 +- .../baeldung/dynamicvalidation/model/ContactInfoExpression.java | 1 - .../java/com/baeldung/dynamicvalidation/model/Customer.java | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java index 9a742e93083f..a8393e27392a 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java @@ -23,7 +23,7 @@ public void initialize(final ContactInfo contactInfo) { public boolean isValid(final String value, final ConstraintValidatorContext context) { String expressionType = System.getProperty("contactInfoType"); System.out.println(expressionType); - final ContactInfoExpression expression = expressionRepository.getOne(expressionType); + final ContactInfoExpression expression = expressionRepository.findOne(expressionType); if (expression != null) { final String pattern = expression.getPattern(); if (Pattern.matches(pattern, value)) diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java index c529c8ce3c77..9c202b07c8fa 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/ContactInfoExpression.java @@ -17,7 +17,6 @@ public ContactInfoExpression() { } public ContactInfoExpression(final String type, final String pattern) { - super(); this.type = type; this.pattern = pattern; } diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java index d729283fb21b..f043458fce7c 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/model/Customer.java @@ -21,7 +21,6 @@ public Customer() { } public Customer(final long id, final String contactInfo) { - super(); this.id = id; this.contactInfo = contactInfo; } From aac42f351a8f8c2a4a029b2ccd662640f98fd376 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 13 Apr 2017 22:52:46 +0300 Subject: [PATCH 3/8] remove set property --- .../ContactInfoValidator.java | 19 ++++++++------ .../config/CustomerController.java | 23 ----------------- .../src/main/resources/application.properties | 4 ++- .../main/resources/templates/customer.html | 25 ------------------- 4 files changed, 15 insertions(+), 56 deletions(-) diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java index 9a742e93083f..ae2a06ab240e 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java @@ -6,6 +6,8 @@ import javax.validation.ConstraintValidatorContext; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.thymeleaf.util.StringUtils; import com.baeldung.dynamicvalidation.dao.ContactInfoExpressionRepository; import com.baeldung.dynamicvalidation.model.ContactInfoExpression; @@ -15,19 +17,22 @@ public class ContactInfoValidator implements ConstraintValidator getContactInfoType(Model model) { - return expressionRepository.findAll(); - } - } diff --git a/spring-boot/src/main/resources/application.properties b/spring-boot/src/main/resources/application.properties index 84315a2477e3..444f68d50adc 100644 --- a/spring-boot/src/main/resources/application.properties +++ b/spring-boot/src/main/resources/application.properties @@ -43,4 +43,6 @@ servlet.mapping=/dispatcherExampleURL #banner.image.width= //TODO #banner.image.height= //TODO #banner.image.margin= //TODO -#banner.image.invert= //TODO \ No newline at end of file +#banner.image.invert= //TODO + +contactInfoType=email \ No newline at end of file diff --git a/spring-boot/src/main/resources/templates/customer.html b/spring-boot/src/main/resources/templates/customer.html index 6aec5ab59018..c8f5a25d5e30 100644 --- a/spring-boot/src/main/resources/templates/customer.html +++ b/spring-boot/src/main/resources/templates/customer.html @@ -3,39 +3,14 @@ Customer Page -
Contact Info:
-Contact Info Type:



-
\ No newline at end of file From 2008f84ddadac063a30aa99bf4cb98ac174d0a6d Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 13 Apr 2017 23:00:42 +0300 Subject: [PATCH 4/8] fix conflicts --- .../com/baeldung/dynamicvalidation/ContactInfoValidator.java | 1 + 1 file changed, 1 insertion(+) diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java index 5561a17fbecb..e37f3ae54174 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java @@ -20,6 +20,7 @@ public class ContactInfoValidator implements ConstraintValidator Date: Thu, 13 Apr 2017 23:02:34 +0300 Subject: [PATCH 5/8] fix conflicts --- .../config/CustomerController.java | 1 - .../main/resources/templates/customer.html | 34 ------------------- 2 files changed, 35 deletions(-) diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java index fa1d8e3801a2..d1e6b845d7ab 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java @@ -17,7 +17,6 @@ public class CustomerController { @GetMapping("/customer") public String getCustomerPage(Model model) { - model.addAttribute("contactInfoType", System.getProperty("contactInfoType")); return "customer"; } diff --git a/spring-boot/src/main/resources/templates/customer.html b/spring-boot/src/main/resources/templates/customer.html index 2b5bc67baef8..c8f5a25d5e30 100644 --- a/spring-boot/src/main/resources/templates/customer.html +++ b/spring-boot/src/main/resources/templates/customer.html @@ -3,48 +3,14 @@ Customer Page -<<<<<<< HEAD -======= - ->>>>>>> 2ac22b3ffc39d35518b0819757e79f3fecde4073
Contact Info:
-<<<<<<< HEAD -======= -Contact Info Type:
->>>>>>> 2ac22b3ffc39d35518b0819757e79f3fecde4073



-<<<<<<< HEAD -======= -
->>>>>>> 2ac22b3ffc39d35518b0819757e79f3fecde4073 \ No newline at end of file From e85e33f2d07978442e4e05de37c9c10f1bc5fe60 Mon Sep 17 00:00:00 2001 From: Loredana Crusoveanu Date: Thu, 13 Apr 2017 23:34:50 +0300 Subject: [PATCH 6/8] add optional --- .../dynamicvalidation/ContactInfoValidator.java | 12 +++++------- .../dao/ContactInfoExpressionRepository.java | 8 +++++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java index e37f3ae54174..53fb418ad65c 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java @@ -20,20 +20,18 @@ public class ContactInfoValidator implements ConstraintValidator { +import com.baeldung.dynamicvalidation.model.ContactInfoExpression; +public interface ContactInfoExpressionRepository extends Repository { + Optional findOne(String id); } From dac95ee100b92200c8cb84c1aabdb6155679dda9 Mon Sep 17 00:00:00 2001 From: Loredana Date: Wed, 19 Apr 2017 14:25:20 +0300 Subject: [PATCH 7/8] small fix --- .../ContactInfoValidator.java | 37 +++++++++++++------ .../config/CustomerController.java | 25 ------------- .../config/PersistenceConfig.java | 6 --- .../dao/ContactInfoExpressionRepository.java | 8 ++-- 4 files changed, 30 insertions(+), 46 deletions(-) diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java index a8393e27392a..7cf9601aa5f3 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java @@ -1,34 +1,47 @@ package com.baeldung.dynamicvalidation; -import java.util.regex.Pattern; +import com.baeldung.dynamicvalidation.dao.ContactInfoExpressionRepository; +import com.baeldung.dynamicvalidation.model.ContactInfoExpression; + +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.thymeleaf.util.StringUtils; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; -import org.springframework.beans.factory.annotation.Autowired; - -import com.baeldung.dynamicvalidation.dao.ContactInfoExpressionRepository; -import com.baeldung.dynamicvalidation.model.ContactInfoExpression; +import java.util.regex.Pattern; public class ContactInfoValidator implements ConstraintValidator { + private static final Logger LOG = Logger.getLogger(ContactInfoValidator.class); + @Autowired private ContactInfoExpressionRepository expressionRepository; + @Value("${contactInfoType}") + String expressionType; + + private String pattern; + @Override public void initialize(final ContactInfo contactInfo) { + if (StringUtils.isEmptyOrWhitespace(expressionType)) { + LOG.error("Contact info type missing!"); + } else { + pattern = expressionRepository.findOne(expressionType) + .map(ContactInfoExpression::getPattern) + .get(); + } } @Override public boolean isValid(final String value, final ConstraintValidatorContext context) { - String expressionType = System.getProperty("contactInfoType"); - System.out.println(expressionType); - final ContactInfoExpression expression = expressionRepository.findOne(expressionType); - if (expression != null) { - final String pattern = expression.getPattern(); - if (Pattern.matches(pattern, value)) - return true; + if (!StringUtils.isEmptyOrWhitespace(pattern)) { + return Pattern.matches(pattern, value); } + LOG.error("Contact info pattern missing!"); return false; } diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java index 44db2d5228d6..f08271f30704 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/CustomerController.java @@ -1,30 +1,19 @@ package com.baeldung.dynamicvalidation.config; -import java.util.List; - import javax.validation.Valid; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; -import com.baeldung.dynamicvalidation.dao.ContactInfoExpressionRepository; -import com.baeldung.dynamicvalidation.model.ContactInfoExpression; import com.baeldung.dynamicvalidation.model.Customer; @Controller public class CustomerController { - @Autowired - private ContactInfoExpressionRepository expressionRepository; - @GetMapping("/customer") public String getCustomerPage(Model model) { - model.addAttribute("contactInfoType", System.getProperty("contactInfoType")); return "customer"; } @@ -35,20 +24,6 @@ public String validateCustomer(@Valid final Customer customer, final BindingResu } else { model.addAttribute("message", "The information is valid!"); } - model.addAttribute("contactInfoType", System.getProperty("contactInfoType")); return "customer"; } - - @PostMapping("/updateContactInfoType") - @ResponseBody - public void updateContactInfoType(@RequestParam final String type) { - System.setProperty("contactInfoType", type); - } - - @GetMapping("/contactInfoTypes") - @ResponseBody - public List getContactInfoType(Model model) { - return expressionRepository.findAll(); - } - } diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java index 0eeac2a8dccc..d89dfc5fcd62 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/config/PersistenceConfig.java @@ -6,7 +6,6 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; -import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; @@ -16,11 +15,6 @@ @Configuration public class PersistenceConfig { - @Bean - public JdbcTemplate getJdbcTemplate() { - return new JdbcTemplate(dataSource()); - } - @Bean public DataSource dataSource() { EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder(); diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java index ccacc297a590..0d7797b9961b 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/dao/ContactInfoExpressionRepository.java @@ -1,9 +1,11 @@ package com.baeldung.dynamicvalidation.dao; -import org.springframework.data.jpa.repository.JpaRepository; +import java.util.Optional; -import com.baeldung.dynamicvalidation.model.ContactInfoExpression; +import org.springframework.data.repository.Repository; -public interface ContactInfoExpressionRepository extends JpaRepository { +import com.baeldung.dynamicvalidation.model.ContactInfoExpression; +public interface ContactInfoExpressionRepository extends Repository { + Optional findOne(String id); } From 1d5bf3c6c7fe29c8bd028e91f7559781e34e68f4 Mon Sep 17 00:00:00 2001 From: Loredana Date: Wed, 19 Apr 2017 14:44:34 +0300 Subject: [PATCH 8/8] update get --- .../com/baeldung/dynamicvalidation/ContactInfoValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java index e32c39d74680..c12c28d00aa2 100644 --- a/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java +++ b/spring-boot/src/main/java/com/baeldung/dynamicvalidation/ContactInfoValidator.java @@ -30,7 +30,7 @@ public void initialize(final ContactInfo contactInfo) { } else { pattern = expressionRepository.findOne(expressionType) .map(ContactInfoExpression::getPattern) - .get(); + .orElse(""); } }