diff --git a/Spring-Boot/spring-session-attribute/.gitignore b/Spring-Boot/spring-session-attribute/.gitignore new file mode 100644 index 0000000..82eca33 --- /dev/null +++ b/Spring-Boot/spring-session-attribute/.gitignore @@ -0,0 +1,25 @@ +/target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### 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-Boot/spring-session-attribute/pom.xml b/Spring-Boot/spring-session-attribute/pom.xml new file mode 100644 index 0000000..f5948fa --- /dev/null +++ b/Spring-Boot/spring-session-attribute/pom.xml @@ -0,0 +1,59 @@ + + + 4.0.0 + + com.javadevjournal + spring-session-attribute + 0.0.1-SNAPSHOT + jar + + spring-session-attribute + Spring Session Attribute sample application + + + org.springframework.boot + spring-boot-starter-parent + 2.0.4.RELEASE + + + + + UTF-8 + UTF-8 + 1.8 + + + + + org.springframework.boot + spring-boot-starter-thymeleaf + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-devtools + runtime + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/SpringSessionAttributeApplication.java b/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/SpringSessionAttributeApplication.java new file mode 100644 index 0000000..3fdfc55 --- /dev/null +++ b/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/SpringSessionAttributeApplication.java @@ -0,0 +1,12 @@ +package com.javadevjournal; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class SpringSessionAttributeApplication { + + public static void main(String[] args) { + SpringApplication.run(SpringSessionAttributeApplication.class, args); + } +} diff --git a/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/controller/AddToCartController.java b/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/controller/AddToCartController.java new file mode 100644 index 0000000..fbfa6f8 --- /dev/null +++ b/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/controller/AddToCartController.java @@ -0,0 +1,47 @@ +package com.javadevjournal.controller; + +import com.javadevjournal.model.ShoppingCart; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.SessionAttributes; + +@Controller +@SessionAttributes("shoppingCart") +public class AddToCartController { + + @PostMapping("/addToCart") + public String addToCart(final Model model, @ModelAttribute ShoppingCart shoppingCart,final String productCode){ + if(shoppingCart!=null){ + //add product to the shopping cart list + shoppingCart.setProduct(productCode); + model.addAttribute("cart",shoppingCart); + } + else{ + ShoppingCart cart = new ShoppingCart(); + cart.setCustomerName("Super customer"); + cart.setProduct(productCode); + model.addAttribute("cart",cart); + } + + return "redirect:"+"product-detail-page"; + } + + @GetMapping("/product-detail-page") + public String viewPDP(Model model,@ModelAttribute("shoppingCart") ShoppingCart shoppingCart){ + if(shoppingCart !=null){ + model.addAttribute("cart",shoppingCart); + } + else{ + model.addAttribute("cart",new ShoppingCart()); + } + return "product"; + } + + @ModelAttribute("shoppingCart") + public ShoppingCart shoppingCart() { + return new ShoppingCart(); + } +} diff --git a/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/controller/CartPageController.java b/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/controller/CartPageController.java new file mode 100644 index 0000000..063c402 --- /dev/null +++ b/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/controller/CartPageController.java @@ -0,0 +1,18 @@ +package com.javadevjournal.controller; + +import com.javadevjournal.model.ShoppingCart; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.SessionAttribute; +import org.springframework.web.bind.annotation.SessionAttributes; + +@Controller +public class CartPageController { + + @GetMapping("/cart") + public String cart(@SessionAttribute("shoppingCart") ShoppingCart cart, final Model model){ + model.addAttribute("cart", cart); + return "cart"; + } +} diff --git a/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/model/ShoppingCart.java b/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/model/ShoppingCart.java new file mode 100644 index 0000000..084b4f4 --- /dev/null +++ b/Spring-Boot/spring-session-attribute/src/main/java/com/javadevjournal/model/ShoppingCart.java @@ -0,0 +1,57 @@ +package com.javadevjournal.model; + +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +public class ShoppingCart { + + private String customerName; + private List products; + private String product; + + public String getCustomerName() { + return customerName; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public List getProducts() { + return products; + } + + public void setProducts(List products) { + this.products = products; + } + + + public void setProduct(String product) { + if(CollectionUtils.isEmpty(this.getProducts())){ + List products = new ArrayList<>(); + products.add(product); + this.setProducts(products); + } + else { + this.getProducts().add(product); + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof ShoppingCart)) return false; + ShoppingCart that = (ShoppingCart) o; + return Objects.equals(getCustomerName(), that.getCustomerName()) && + Objects.equals(getProducts(), that.getProducts()); + } + + @Override + public int hashCode() { + + return Objects.hash(getCustomerName(), getProducts()); + } +} diff --git a/Spring-Boot/spring-session-attribute/src/main/resources/application.properties b/Spring-Boot/spring-session-attribute/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/Spring-Boot/spring-session-attribute/src/main/resources/templates/cart.html b/Spring-Boot/spring-session-attribute/src/main/resources/templates/cart.html new file mode 100644 index 0000000..71c9f39 --- /dev/null +++ b/Spring-Boot/spring-session-attribute/src/main/resources/templates/cart.html @@ -0,0 +1,20 @@ + + + + Shopping Cart Page + + + +

Product Detail

+

Product list

+ + + + + + + + +
Product Code Code
Onions
+ + \ No newline at end of file diff --git a/Spring-Boot/spring-session-attribute/src/main/resources/templates/product.html b/Spring-Boot/spring-session-attribute/src/main/resources/templates/product.html new file mode 100644 index 0000000..b060459 --- /dev/null +++ b/Spring-Boot/spring-session-attribute/src/main/resources/templates/product.html @@ -0,0 +1,16 @@ + + + + Product detail Page + + + +

Product Detail

+
+

Product Code:

+

Description: This is really an awesome page

+

+ Go To cart Page +

+ + \ No newline at end of file diff --git a/Spring-Boot/spring-session-attribute/src/test/java/com/javadevjournal/SpringSessionAttributeApplicationTests.java b/Spring-Boot/spring-session-attribute/src/test/java/com/javadevjournal/SpringSessionAttributeApplicationTests.java new file mode 100644 index 0000000..51f4f1f --- /dev/null +++ b/Spring-Boot/spring-session-attribute/src/test/java/com/javadevjournal/SpringSessionAttributeApplicationTests.java @@ -0,0 +1,16 @@ +package com.javadevjournal; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringRunner; + +@RunWith(SpringRunner.class) +@SpringBootTest +public class SpringSessionAttributeApplicationTests { + + @Test + public void contextLoads() { + } + +}