diff --git a/.gitignore b/.gitignore index 60c38ed8f5..1890e8bd0e 100644 --- a/.gitignore +++ b/.gitignore @@ -33,3 +33,11 @@ spring-openid/src/main/resources/application.properties spring-security-openid/src/main/resources/application.properties spring-all/*.log + +*.jar + +SpringDataInjectionDemo/.mvn/wrapper/maven-wrapper.properties + +spring-call-getters-using-reflection/.mvn/wrapper/maven-wrapper.properties + +spring-check-if-a-property-is-null/.mvn/wrapper/maven-wrapper.properties diff --git a/SpringDataInjectionDemo/.gitignore b/SpringDataInjectionDemo/.gitignore new file mode 100644 index 0000000000..2af7cefb0a --- /dev/null +++ b/SpringDataInjectionDemo/.gitignore @@ -0,0 +1,24 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ \ No newline at end of file diff --git a/SpringDataInjectionDemo/pom.xml b/SpringDataInjectionDemo/pom.xml new file mode 100644 index 0000000000..afb5b985ba --- /dev/null +++ b/SpringDataInjectionDemo/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + baeldung + springdatainjectiondemo + 0.0.1-SNAPSHOT + jar + + SpringDataInjectionDemo + Spring Data Injection Demp + + + org.springframework.boot + spring-boot-starter-parent + 1.5.3.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/SpringDataInjectionDemo/src/main/java/com/baeldung/SpringDataInjectionDemoApplication.java b/SpringDataInjectionDemo/src/main/java/com/baeldung/SpringDataInjectionDemoApplication.java new file mode 100644 index 0000000000..5a166bf9f9 --- /dev/null +++ b/SpringDataInjectionDemo/src/main/java/com/baeldung/SpringDataInjectionDemoApplication.java @@ -0,0 +1,12 @@ +package com.baeldung; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringDataInjectionDemoApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringDataInjectionDemoApplication.class, args); + } +} diff --git a/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/controller/OrderController.java b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/controller/OrderController.java new file mode 100644 index 0000000000..75a325a6e4 --- /dev/null +++ b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/controller/OrderController.java @@ -0,0 +1,46 @@ +package com.baeldung.didemo.controller; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +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.RestController; + +import com.baeldung.didemo.model.Order; +import com.baeldung.didemo.service.CustomerServiceConstructorDI; +import com.baeldung.didemo.service.CustomerServiceConstructorWithoutSpringDI; +import com.baeldung.didemo.service.CustomerServiceFieldDI; +import com.baeldung.didemo.service.CustomerServiceSetterDI; +import com.baeldung.didemo.service.OrderService; + +@RestController +@RequestMapping(value = "/orders") +public class OrderController { + + @Autowired + CustomerServiceConstructorDI constructorDI; + + @Autowired + CustomerServiceFieldDI fieldDI; + + @Autowired + CustomerServiceSetterDI setterDI; + + @RequestMapping(method = RequestMethod.GET) + public List getOrdersFieldDI(@RequestParam(required = false) String dIMethod) { + if ("setter".equals(dIMethod)) { + return setterDI.getCustomerOrders(1l); + } else if ("constructor".equals(dIMethod)) { + return constructorDI.getCustomerOrders(1l); + } else if ("field".equals(dIMethod)) { + return fieldDI.getCustomerOrders(1l); + } else { + OrderService orderSvc = new OrderService(); + CustomerServiceConstructorWithoutSpringDI customerSvc = new CustomerServiceConstructorWithoutSpringDI(orderSvc); + return customerSvc.getCustomerOrders(1l); + } + } +} diff --git a/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/model/Order.java b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/model/Order.java new file mode 100644 index 0000000000..9fd3710879 --- /dev/null +++ b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/model/Order.java @@ -0,0 +1,26 @@ +package com.baeldung.didemo.model; + +public class Order { + + private Integer id; + private String item; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getItem() { + return item; + } + + public void setItem(String item) { + this.item = item; + } + + // other order properties.. + +} diff --git a/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceConstructorDI.java b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceConstructorDI.java new file mode 100644 index 0000000000..daf551b299 --- /dev/null +++ b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceConstructorDI.java @@ -0,0 +1,25 @@ +package com.baeldung.didemo.service; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baeldung.didemo.model.Order; + +@Service +public class CustomerServiceConstructorDI { + + OrderService orderService; + + @Autowired + public CustomerServiceConstructorDI(OrderService orderService) { + super(); + this.orderService = orderService; + } + + public List getCustomerOrders(Long customerId) { + return orderService.getOrdersForCustomer(customerId); + } + +} diff --git a/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceConstructorWithoutSpringDI.java b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceConstructorWithoutSpringDI.java new file mode 100644 index 0000000000..d61b9f86cc --- /dev/null +++ b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceConstructorWithoutSpringDI.java @@ -0,0 +1,20 @@ +package com.baeldung.didemo.service; + +import java.util.List; + +import com.baeldung.didemo.model.Order; + +public class CustomerServiceConstructorWithoutSpringDI { + + OrderService orderService; + + public CustomerServiceConstructorWithoutSpringDI(OrderService orderService) { + super(); + this.orderService = orderService; + } + + public List getCustomerOrders(Long customerId) { + return orderService.getOrdersForCustomer(customerId); + } + +} diff --git a/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceFieldDI.java b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceFieldDI.java new file mode 100644 index 0000000000..acb22ad529 --- /dev/null +++ b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceFieldDI.java @@ -0,0 +1,19 @@ +package com.baeldung.didemo.service; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baeldung.didemo.model.Order; + +@Service +public class CustomerServiceFieldDI { + + @Autowired + OrderService orderService; + + public List getCustomerOrders(Long customerId) { + return orderService.getOrdersForCustomer(customerId); + } +} diff --git a/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceSetterDI.java b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceSetterDI.java new file mode 100644 index 0000000000..736a43aba4 --- /dev/null +++ b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/CustomerServiceSetterDI.java @@ -0,0 +1,24 @@ +package com.baeldung.didemo.service; + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.baeldung.didemo.model.Order; + +@Service +public class CustomerServiceSetterDI { + + OrderService orderService; + + public List getCustomerOrders(Long customerId) { + return orderService.getOrdersForCustomer(customerId); + } + + @Autowired + public void setOrderService(OrderService orderService) { + this.orderService = orderService; + } + +} diff --git a/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/OrderService.java b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/OrderService.java new file mode 100644 index 0000000000..4dc8fd6f5d --- /dev/null +++ b/SpringDataInjectionDemo/src/main/java/com/baeldung/didemo/service/OrderService.java @@ -0,0 +1,30 @@ +package com.baeldung.didemo.service; + +import java.util.ArrayList; +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.baeldung.didemo.model.Order; + +@Service +public class OrderService { + + public List getOrdersForCustomer(Long id) { + List orders = new ArrayList(); + + Order order1 = new Order(); + order1.setId(1); + order1.setItem("Pizza"); + + Order order2 = new Order(); + order2.setId(1); + order2.setItem("Garlic Bread"); + + orders.add(order1); + orders.add(order2); + + return orders; + } + +} diff --git a/SpringDataInjectionDemo/src/main/resources/application.properties b/SpringDataInjectionDemo/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/SpringDataInjectionDemo/src/test/java/com/baeldung/didemo/SpringDataInjectionDemoApplicationTests.java b/SpringDataInjectionDemo/src/test/java/com/baeldung/didemo/SpringDataInjectionDemoApplicationTests.java new file mode 100644 index 0000000000..c8c0859d25 --- /dev/null +++ b/SpringDataInjectionDemo/src/test/java/com/baeldung/didemo/SpringDataInjectionDemoApplicationTests.java @@ -0,0 +1,65 @@ +package com.baeldung.didemo; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import com.baeldung.didemo.model.Order; +import com.baeldung.didemo.service.CustomerServiceConstructorDI; +import com.baeldung.didemo.service.CustomerServiceFieldDI; +import com.baeldung.didemo.service.CustomerServiceSetterDI; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringDataInjectionDemoApplicationTests { + + @Autowired + CustomerServiceConstructorDI constructorDI; + + @Autowired + CustomerServiceFieldDI fieldDI; + + @Autowired + CustomerServiceSetterDI setterDI; + + @Test + public void givenConstructorDI_whenNumberOfOrdersIsTwo_thenCorrect() { + List orders = constructorDI.getCustomerOrders(1l); + Assert.assertNotNull(orders); + Assert.assertTrue(orders.size() == 2); + } + + @Test + public void givenFieldDI_whenNumberOfOrdersIsTwo_thenCorrect() { + List orders = fieldDI.getCustomerOrders(1l); + Assert.assertNotNull(orders); + Assert.assertTrue(orders.size() == 2); + } + + @Test + public void givenSetterDI_whenNumberOfOrdersIsTwo_thenCorrect() { + List orders = setterDI.getCustomerOrders(1l); + Assert.assertNotNull(orders); + Assert.assertTrue(orders.size() == 2); + } + + @Test + public void givenAllThreeTypesOfDI_whenNumberOfOrdersIsEqualInAll_thenCorrect() { + List ordersSetter = setterDI.getCustomerOrders(1l); + List ordersConstructor = constructorDI.getCustomerOrders(1l); + List ordersField = fieldDI.getCustomerOrders(1l); + + Assert.assertNotNull(ordersSetter); + Assert.assertNotNull(ordersConstructor); + Assert.assertNotNull(ordersField); + Assert.assertTrue(ordersSetter.size() == 2 && ordersConstructor.size() == ordersSetter.size() && ordersField.size() == ordersSetter.size()); + } + + + +} diff --git a/call-all-getters/.gitignore b/call-all-getters/.gitignore new file mode 100644 index 0000000000..2af7cefb0a --- /dev/null +++ b/call-all-getters/.gitignore @@ -0,0 +1,24 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ \ No newline at end of file diff --git a/call-all-getters/pom.xml b/call-all-getters/pom.xml new file mode 100644 index 0000000000..ed4735a861 --- /dev/null +++ b/call-all-getters/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + baeldung + call-all-getters + 0.0.1-SNAPSHOT + jar + + call-all-getters + Calling all getters using Introspector + + + org.springframework.boot + spring-boot-starter-parent + 1.5.3.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/call-all-getters/src/main/java/com/baeldung/CallAllGettersApplication.java b/call-all-getters/src/main/java/com/baeldung/CallAllGettersApplication.java new file mode 100644 index 0000000000..5c10ed5b55 --- /dev/null +++ b/call-all-getters/src/main/java/com/baeldung/CallAllGettersApplication.java @@ -0,0 +1,18 @@ +package com.baeldung; + +import java.util.List; + +import com.baeldung.reflection.model.Customer; +import com.baeldung.reflection.util.Utils; + +public class CallAllGettersApplication { + + public static void main(String[] args) throws Exception { + + Customer customer = new Customer(1, "Himanshu", null, null); + List nullProps = Utils.getNullPropertiesList(customer); + System.out.println(nullProps); + } + + +} diff --git a/call-all-getters/src/main/java/com/baeldung/reflection/model/Customer.java b/call-all-getters/src/main/java/com/baeldung/reflection/model/Customer.java new file mode 100644 index 0000000000..d0c6c31dce --- /dev/null +++ b/call-all-getters/src/main/java/com/baeldung/reflection/model/Customer.java @@ -0,0 +1,63 @@ +package com.baeldung.reflection.model; + +/** + * + * @author himanshumantri + * + */ +public class Customer { + + private Integer id; + private String name; + private String emailId; + private Long phoneNumber; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmailId() { + return emailId; + } + + public void setEmailId(String emailId) { + this.emailId = emailId; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Customer [id=").append(id).append(", name=").append(name).append(", emailId=").append(emailId).append(", phoneNumber=") + .append(phoneNumber).append("]"); + return builder.toString(); + } + + public Customer(Integer id, String name, String emailId, Long phoneNumber) { + super(); + this.id = id; + this.name = name; + this.emailId = emailId; + this.phoneNumber = phoneNumber; + } + + public Long getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(Long phoneNumber) { + this.phoneNumber = phoneNumber; + } + +} diff --git a/call-all-getters/src/main/java/com/baeldung/reflection/util/Utils.java b/call-all-getters/src/main/java/com/baeldung/reflection/util/Utils.java new file mode 100644 index 0000000000..c9542bbdf2 --- /dev/null +++ b/call-all-getters/src/main/java/com/baeldung/reflection/util/Utils.java @@ -0,0 +1,43 @@ +package com.baeldung.reflection.util; + +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +import com.baeldung.reflection.model.Customer; + +public class Utils { + + public static List getNullPropertiesList(Customer customer) throws Exception { + PropertyDescriptor[] propDescArr = Introspector.getBeanInfo(Customer.class, Object.class).getPropertyDescriptors(); + List propDescList = Arrays.asList(propDescArr); + + List nullProps = propDescList.stream() + .filter(nulls(customer)) + .map(PropertyDescriptor::getName) + .collect(Collectors.toList()); + return nullProps; + } + + private static Predicate nulls(Customer customer) { + Predicate isNull = new Predicate() { + @Override + public boolean test(PropertyDescriptor pd) { + Method getterMethod = pd.getReadMethod(); + boolean result = false; + try { + result = (getterMethod != null && getterMethod.invoke(customer) == null); + } catch (Exception e) { + // Handle the exception + e.printStackTrace(); + } + return result; + } + }; + return isNull; + } +} diff --git a/call-all-getters/src/main/resources/application.properties b/call-all-getters/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/call-all-getters/src/test/java/com/baeldung/CallAllGettersApplicationTests.java b/call-all-getters/src/test/java/com/baeldung/CallAllGettersApplicationTests.java new file mode 100644 index 0000000000..cca49b4359 --- /dev/null +++ b/call-all-getters/src/test/java/com/baeldung/CallAllGettersApplicationTests.java @@ -0,0 +1,26 @@ +package com.baeldung; + +import java.util.Arrays; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; + +import com.baeldung.reflection.model.Customer; +import com.baeldung.reflection.util.Utils; + +public class CallAllGettersApplicationTests { + + @Test + public void givenCustomer_whenAFieldIsNull_thenFieldNameInResult() throws Exception { + Customer customer = new Customer(1, "Himanshu", null, null); + + List result = Utils.getNullPropertiesList(customer); + List expectedFieldNames = Arrays.asList("emailId","phoneNumber"); + + Assert.assertTrue(result.size() == expectedFieldNames.size()); + Assert.assertTrue(result.containsAll(expectedFieldNames)); + + } + +} diff --git a/collectionutils/pom.xml b/collectionutils/pom.xml new file mode 100644 index 0000000000..810f53847d --- /dev/null +++ b/collectionutils/pom.xml @@ -0,0 +1,33 @@ + + 4.0.0 + baeldung + collectionutils + 0.0.1-SNAPSHOT + collectionutils-guide + A guide to Apache Commons CollectionUtils + + + UTF-8 + UTF-8 + 1.8 + + + + + + org.apache.commons + commons-collections4 + 4.1 + + + + + junit + junit + 4.12 + test + + + + + \ No newline at end of file diff --git a/collectionutils/src/main/java/com/baeldung/collectionutilsguide/model/Address.java b/collectionutils/src/main/java/com/baeldung/collectionutilsguide/model/Address.java new file mode 100644 index 0000000000..87c03cde14 --- /dev/null +++ b/collectionutils/src/main/java/com/baeldung/collectionutilsguide/model/Address.java @@ -0,0 +1,37 @@ +package com.baeldung.collectionutilsguide.model; + +public class Address { + + String locality; + String city; + + public String getLocality() { + return locality; + } + + public void setLocality(String locality) { + this.locality = locality; + } + + public String getCity() { + return city; + } + + public void setCity(String city) { + this.city = city; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Address [locality=").append(locality).append(", city=").append(city).append("]"); + return builder.toString(); + } + + public Address(String locality, String city) { + super(); + this.locality = locality; + this.city = city; + } + +} diff --git a/collectionutils/src/main/java/com/baeldung/collectionutilsguide/model/Customer.java b/collectionutils/src/main/java/com/baeldung/collectionutilsguide/model/Customer.java new file mode 100644 index 0000000000..990ac62857 --- /dev/null +++ b/collectionutils/src/main/java/com/baeldung/collectionutilsguide/model/Customer.java @@ -0,0 +1,81 @@ +package com.baeldung.collectionutilsguide.model; + +public class Customer implements Comparable { + + Integer id; + String name; + Address address; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Address getAddress() { + return address; + } + + public void setAddress(Address address) { + this.address = address; + } + + public Customer(Integer id, String name, String locality, String city) { + super(); + this.id = id; + this.name = name; + this.address = new Address(locality, city); + } + + public Customer(String name) { + super(); + this.name = name; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Customer other = (Customer) obj; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + public int compareTo(Customer o) { + return this.name.compareTo(o.getName()); + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Customer [id=").append(id).append(", name=").append(name).append("]"); + return builder.toString(); + } + +} diff --git a/collectionutils/src/pom.xml b/collectionutils/src/pom.xml new file mode 100644 index 0000000000..810f53847d --- /dev/null +++ b/collectionutils/src/pom.xml @@ -0,0 +1,33 @@ + + 4.0.0 + baeldung + collectionutils + 0.0.1-SNAPSHOT + collectionutils-guide + A guide to Apache Commons CollectionUtils + + + UTF-8 + UTF-8 + 1.8 + + + + + + org.apache.commons + commons-collections4 + 4.1 + + + + + junit + junit + 4.12 + test + + + + + \ No newline at end of file diff --git a/collectionutils/src/test/java/collectionutils/CollectionUtilsGuideTest.java b/collectionutils/src/test/java/collectionutils/CollectionUtilsGuideTest.java new file mode 100644 index 0000000000..a003e38524 --- /dev/null +++ b/collectionutils/src/test/java/collectionutils/CollectionUtilsGuideTest.java @@ -0,0 +1,135 @@ +package collectionutils; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.LinkedList; +import java.util.List; + +import org.apache.commons.collections4.Closure; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; +import org.apache.commons.collections4.Transformer; +import org.junit.Test; + +import com.baeldung.collectionutilsguide.model.Address; +import com.baeldung.collectionutilsguide.model.Customer; + +public class CollectionUtilsGuideTest { + + Customer customer1 = new Customer(1, "Daniel", "locality1", "city1"); + Customer customer2 = new Customer(2, "Fredrik", "locality2", "city2"); + Customer customer3 = new Customer(3, "Kyle", "locality3", "city3"); + Customer customer4 = new Customer(4, "Bob", "locality4", "city4"); + Customer customer5 = new Customer(5, "Cat", "locality5", "city5"); + Customer customer6 = new Customer(6, "John", "locality6", "city6"); + + List list1 = Arrays.asList(customer1, customer2, customer3); + List list2 = Arrays.asList(customer4, customer5, customer6); + List list3 = Arrays.asList(customer1, customer2); + + List linkedList1 = new LinkedList(list1); + + @Test + public void givenList_WhenAddIgnoreNull_thenNoNullAdded() { + CollectionUtils.addIgnoreNull(list1, null); + assertFalse(list1.contains(null)); + } + + @Test + public void givenTwoSortedLists_WhenCollated_thenSorted() { + List sortedList = CollectionUtils.collate(list1, list2); + assertTrue(sortedList.get(0).getName().equals("Bob")); + assertTrue(sortedList.get(2).getName().equals("Daniel")); + } + + @Test + public void givenListOfCustomers_whenTransformed_thenListOfAddress() { + Collection
addressCol = CollectionUtils.collect(list1, new Transformer() { + public Address transform(Customer customer) { + return customer.getAddress(); + } + }); + + List
addressList = new ArrayList
(addressCol); + assertTrue(addressList.size() == 3); + assertTrue(addressList.get(0).getLocality().equals("locality1")); + } + + @Test + public void givenCustomerList_WhenCountMatches_thenCorrect() { + int result = CollectionUtils.countMatches(list1, new Predicate() { + public boolean evaluate(Customer customer) { + return Arrays.asList("Daniel","Kyle").contains(customer.getName()); + } + }); + assertTrue(result == 2); + } + + @Test + public void givenCustomerList_WhenFiltered_thenCorrectSize() { + + boolean isModified = CollectionUtils.filter(linkedList1, new Predicate() { + public boolean evaluate(Customer customer) { + return Arrays.asList("Daniel","Kyle").contains(customer.getName()); + } + }); + + //filterInverse does the opposite. It removes the element from the list if the Predicate returns true + //select and selectRejected work the same way except that they do not remove elements from the given collection and return a new collection + + assertTrue(isModified && linkedList1.size() == 2); + } + + @Test + public void givenCustomerList_WhenForAllDoSetNameNull_thenNameNull() { + CollectionUtils.forAllDo(list1, new Closure() { + public void execute(Customer customer) { + customer.setName(null); + } + }); + + // forAllButLast does the same except for the last element in the collection + assertTrue(list1.get(0).getName() == null); + } + + @Test + public void givenNonEmptyList_WhenCheckedIsNotEmpty_thenTrue() { + List emptyList = new ArrayList(); + List nullList = null; + + //Very handy at times where we want to check if a collection is not null and not empty too. + //isNotEmpty does the opposite. Handy because using ! operator on isEmpty makes it missable while reading + assertTrue(CollectionUtils.isNotEmpty(list1)); + assertTrue(CollectionUtils.isEmpty(nullList)); + assertTrue(CollectionUtils.isEmpty(emptyList)); + } + + @Test + public void givenCustomerListAndASubcollection_WhenChecked_thenTrue() { + assertTrue(CollectionUtils.isSubCollection(list3, list1)); + } + + @Test + public void givenTwoLists_WhenIntersected_thenCheckSize() { + Collection intersection = CollectionUtils.intersection(list1, list3); + assertTrue(intersection.size() == 2); + } + + @Test + public void givenTwoLists_WhenSubtracted_thenCheckElementNotPresentInA() { + Collection result = CollectionUtils.subtract(list1, list3); + assertFalse(result.contains(customer1)); + } + + @Test + public void givenTwoLists_WhenUnioned_thenCheckElementPresentInResult() { + Collection union = CollectionUtils.union(list1, list2); + assertTrue(union.contains(customer1)); + assertTrue(union.contains(customer4)); + } + +} diff --git a/spring-check-if-a-property-is-null/.gitignore b/spring-check-if-a-property-is-null/.gitignore new file mode 100644 index 0000000000..2af7cefb0a --- /dev/null +++ b/spring-check-if-a-property-is-null/.gitignore @@ -0,0 +1,24 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ \ No newline at end of file diff --git a/spring-check-if-a-property-is-null/pom.xml b/spring-check-if-a-property-is-null/pom.xml new file mode 100644 index 0000000000..d92e2a8e9c --- /dev/null +++ b/spring-check-if-a-property-is-null/pom.xml @@ -0,0 +1,50 @@ + + + 4.0.0 + + baeldung + spring-check-null + 0.0.1-SNAPSHOT + jar + + spring-check-if-a-property-is-null + Calling getters using Introspector + + + org.springframework.boot + spring-boot-starter-parent + 1.5.3.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/spring-check-if-a-property-is-null/src/main/java/com/baeldung/SpringCheckIfAPropertyIsNullApplication.java b/spring-check-if-a-property-is-null/src/main/java/com/baeldung/SpringCheckIfAPropertyIsNullApplication.java new file mode 100644 index 0000000000..24348a714e --- /dev/null +++ b/spring-check-if-a-property-is-null/src/main/java/com/baeldung/SpringCheckIfAPropertyIsNullApplication.java @@ -0,0 +1,21 @@ +package com.baeldung; + +import java.util.List; + +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import com.baeldung.reflection.model.Customer; +import com.baeldung.reflection.util.Utils; + +@SpringBootApplication +public class SpringCheckIfAPropertyIsNullApplication { + + public static void main(String[] args) throws Exception { + + Customer customer = new Customer(1, "Himanshu", null, null); + List nullProps = Utils.getNullPropertiesList(customer); + System.out.println(nullProps); + } + + +} diff --git a/spring-check-if-a-property-is-null/src/main/java/com/baeldung/reflection/model/Customer.java b/spring-check-if-a-property-is-null/src/main/java/com/baeldung/reflection/model/Customer.java new file mode 100644 index 0000000000..d0c6c31dce --- /dev/null +++ b/spring-check-if-a-property-is-null/src/main/java/com/baeldung/reflection/model/Customer.java @@ -0,0 +1,63 @@ +package com.baeldung.reflection.model; + +/** + * + * @author himanshumantri + * + */ +public class Customer { + + private Integer id; + private String name; + private String emailId; + private Long phoneNumber; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmailId() { + return emailId; + } + + public void setEmailId(String emailId) { + this.emailId = emailId; + } + + @Override + public String toString() { + StringBuilder builder = new StringBuilder(); + builder.append("Customer [id=").append(id).append(", name=").append(name).append(", emailId=").append(emailId).append(", phoneNumber=") + .append(phoneNumber).append("]"); + return builder.toString(); + } + + public Customer(Integer id, String name, String emailId, Long phoneNumber) { + super(); + this.id = id; + this.name = name; + this.emailId = emailId; + this.phoneNumber = phoneNumber; + } + + public Long getPhoneNumber() { + return phoneNumber; + } + + public void setPhoneNumber(Long phoneNumber) { + this.phoneNumber = phoneNumber; + } + +} diff --git a/spring-check-if-a-property-is-null/src/main/java/com/baeldung/reflection/util/Utils.java b/spring-check-if-a-property-is-null/src/main/java/com/baeldung/reflection/util/Utils.java new file mode 100644 index 0000000000..665717db09 --- /dev/null +++ b/spring-check-if-a-property-is-null/src/main/java/com/baeldung/reflection/util/Utils.java @@ -0,0 +1,34 @@ +package com.baeldung.reflection.util; + +import java.beans.Introspector; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import com.baeldung.reflection.model.Customer; + +public class Utils { + + public static List getNullPropertiesList(Customer customer) throws Exception { + PropertyDescriptor[] propDescArr = Introspector.getBeanInfo(Customer.class, Object.class).getPropertyDescriptors(); + List propDescList = Arrays.asList(propDescArr); + + List nullProps = new ArrayList(); + + propDescList.stream().forEach(p -> { + Method getterMethod = p.getReadMethod(); + try { + if (getterMethod != null && getterMethod.invoke(customer) == null) { + // If the value if null for that field + nullProps.add(p.getName()); + } + } catch (Exception e) { + // Handle the exception + e.printStackTrace(); + } + }); + return nullProps; + } +} diff --git a/spring-check-if-a-property-is-null/src/main/resources/application.properties b/spring-check-if-a-property-is-null/src/main/resources/application.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/spring-check-if-a-property-is-null/src/test/java/com/baeldung/SpringCheckIfAPropertyIsNullApplicationTests.java b/spring-check-if-a-property-is-null/src/test/java/com/baeldung/SpringCheckIfAPropertyIsNullApplicationTests.java new file mode 100644 index 0000000000..edd009e719 --- /dev/null +++ b/spring-check-if-a-property-is-null/src/test/java/com/baeldung/SpringCheckIfAPropertyIsNullApplicationTests.java @@ -0,0 +1,31 @@ +package com.baeldung; + +import java.util.Arrays; +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +import com.baeldung.reflection.model.Customer; +import com.baeldung.reflection.util.Utils; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringCheckIfAPropertyIsNullApplicationTests { + + @Test + public void givenCustomer_whenAFieldIsNull_thenFieldNameInResult() throws Exception { + Customer customer = new Customer(1, "Himanshu", null, null); + + List result = Utils.getNullPropertiesList(customer); + List expectedFieldNames = Arrays.asList("emailId","phoneNumber"); + + Assert.assertTrue(result.size() == expectedFieldNames.size()); + Assert.assertTrue(result.containsAll(expectedFieldNames)); + + } + +}