From bae8507e19a768ad9fe1d04d68a54182e441125d Mon Sep 17 00:00:00 2001 From: hkarwa2s <holger.karwanni@smail.inf.h-brs.de> Date: Sat, 29 Apr 2017 19:01:43 +0200 Subject: [PATCH] spielereinen mit der implementierung eines Warenkorbes + einige Tests --- pom.xml | 52 ++++++++++++ src/main/java/org/s4s/MyUI.java | 26 +++++- .../org/s4s/gui/views/ArtikeldetailsView.java | 23 ++++++ .../org/s4s/gui/views/BenutzerkontoView.java | 23 ++++++ .../java/org/s4s/gui/views/CheckoutView.java | 23 ++++++ src/main/java/org/s4s/gui/views/FaqView.java | 23 ++++++ .../java/org/s4s/gui/views/ImpressumView.java | 39 +++++++++ .../s4s/gui/views/KaufbestaetigungView.java | 23 ++++++ .../java/org/s4s/gui/views/LoginView.java | 56 +++++++++++++ .../java/org/s4s/gui/views/PasswortView.java | 23 ++++++ .../views/{MainView.java => ShopView.java} | 2 +- .../gui/views/VerkaeuferbewertungView.java | 27 ++++++ .../java/org/s4s/gui/views/WarenkorbView.java | 23 ++++++ .../java/org/s4s/gui/views/WelcomeView.java | 15 +++- .../org/s4s/modell/objects/dto/Kunde.java | 30 +++++++ .../org/s4s/modell/objects/dto/Product.java | 33 ++++++++ .../org/s4s/modell/objects/dto/Warenkorb.java | 51 ++++++++++++ .../java/org/s4s/services/util/Views.java | 18 +++- .../org/s4s/matchers/UtilityMatchers.java | 77 ++++++++++++++++++ .../s4s/modell/object/dto/ProductTest.java | 40 +++++++++ .../s4s/modell/object/dto/WarenkorbTest.java | 74 +++++++++++++++++ .../java/org/s4s/services/util/ViewsTest.java | 21 +++++ target/classes/org/s4s/MyUI$MyUIServlet.class | Bin 613 -> 613 bytes target/classes/org/s4s/MyUI.class | Bin 1200 -> 1868 bytes .../compile/default-compile/createdFiles.lst | 18 +++- .../compile/default-compile/inputFiles.lst | 24 ++++-- 26 files changed, 747 insertions(+), 17 deletions(-) create mode 100644 src/main/java/org/s4s/gui/views/ArtikeldetailsView.java create mode 100644 src/main/java/org/s4s/gui/views/BenutzerkontoView.java create mode 100644 src/main/java/org/s4s/gui/views/CheckoutView.java create mode 100644 src/main/java/org/s4s/gui/views/FaqView.java create mode 100644 src/main/java/org/s4s/gui/views/ImpressumView.java create mode 100644 src/main/java/org/s4s/gui/views/KaufbestaetigungView.java create mode 100644 src/main/java/org/s4s/gui/views/LoginView.java create mode 100644 src/main/java/org/s4s/gui/views/PasswortView.java rename src/main/java/org/s4s/gui/views/{MainView.java => ShopView.java} (97%) create mode 100644 src/main/java/org/s4s/gui/views/VerkaeuferbewertungView.java create mode 100644 src/main/java/org/s4s/gui/views/WarenkorbView.java create mode 100644 src/main/java/org/s4s/modell/objects/dto/Kunde.java create mode 100644 src/main/java/org/s4s/modell/objects/dto/Warenkorb.java create mode 100644 src/test/java/org/s4s/matchers/UtilityMatchers.java create mode 100644 src/test/java/org/s4s/modell/object/dto/ProductTest.java create mode 100644 src/test/java/org/s4s/modell/object/dto/WarenkorbTest.java create mode 100644 src/test/java/org/s4s/services/util/ViewsTest.java diff --git a/pom.xml b/pom.xml index bb38ac2..a02a065 100644 --- a/pom.xml +++ b/pom.xml @@ -66,6 +66,39 @@ <groupId>com.vaadin</groupId> <artifactId>vaadin-themes</artifactId> </dependency> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>1.16.16</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.commons</groupId> + <artifactId>commons-lang3</artifactId> + <version>3.4</version> + <type>jar</type> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.11</version> + <scope>test</scope> + <type>jar</type> + </dependency> + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-core</artifactId> + <version>1.3</version> + <scope>test</scope> + </dependency> + + <dependency> + <groupId>org.hamcrest</groupId> + <artifactId>hamcrest-library</artifactId> + <version>1.3</version> + <scope>test</scope> + </dependency> + </dependencies> <build> @@ -124,6 +157,25 @@ <scanIntervalSeconds>2</scanIntervalSeconds> </configuration> </plugin> + <plugin> + <groupId>org.jacoco</groupId> + <artifactId>jacoco-maven-plugin</artifactId> + <version>0.7.1.201405082137</version> + <executions> + <execution> + <goals> + <goal>prepare-agent</goal> + </goals> + </execution> + <execution> + <id>report</id> + <phase>prepare-package</phase> + <goals> + <goal>report</goal> + </goals> + </execution> + </executions> + </plugin> </plugins> </build> diff --git a/src/main/java/org/s4s/MyUI.java b/src/main/java/org/s4s/MyUI.java index fe05eff..091ea08 100644 --- a/src/main/java/org/s4s/MyUI.java +++ b/src/main/java/org/s4s/MyUI.java @@ -22,8 +22,18 @@ import com.vaadin.ui.TextField; import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import java.util.List; -import org.s4s.gui.views.MainView; +import org.s4s.gui.views.ArtikeldetailsView; +import org.s4s.gui.views.BenutzerkontoView; +import org.s4s.gui.views.CheckoutView; +import org.s4s.gui.views.FaqView; +import org.s4s.gui.views.ImpressumView; +import org.s4s.gui.views.KaufbestaetigungView; +import org.s4s.gui.views.LoginView; +import org.s4s.gui.views.PasswortView; +import org.s4s.gui.views.ShopView; +import org.s4s.gui.views.VerkaeuferbewertungView; import org.s4s.gui.views.WelcomeView; +import org.s4s.gui.views.WarenkorbView; import org.s4s.modell.objects.dto.Product; import org.s4s.process.controll.ProductSearch; import org.s4s.services.util.Views; @@ -42,13 +52,21 @@ public class MyUI extends UI { @Override protected void init(VaadinRequest vaadinRequest) { Navigator navi = new Navigator ( this , this ); - navi.addView(Views.MAIN, MainView.class ); + navi.addView(Views.SHOP, ShopView.class ); navi.addView(Views.WELCOME, WelcomeView.class); - + navi.addView(Views.LOGIN, LoginView.class); + navi.addView(Views.WARENKORB, WarenkorbView.class); + navi.addView(Views.PASSWORT, PasswortView.class); + navi.addView(Views.BENUTZERKONTO, BenutzerkontoView.class); + navi.addView(Views.ARTIKELDETAILS, ArtikeldetailsView.class); + navi.addView(Views.CHECKOUT, CheckoutView.class); + navi.addView(Views.IMPRESSUM, ImpressumView.class); + navi.addView(Views.FAQ, FaqView.class); + navi.addView(Views.KAUFBESTAETIGUNG, KaufbestaetigungView.class); + navi.addView(Views.VERKAEUFERBEWERTUNG, VerkaeuferbewertungView.class); UI.getCurrent().getNavigator().navigateTo(Views.WELCOME); } - @WebServlet(urlPatterns = "/*", name = "MyUIServlet", asyncSupported = true) @VaadinServletConfiguration(ui = MyUI.class, productionMode = false) diff --git a/src/main/java/org/s4s/gui/views/ArtikeldetailsView.java b/src/main/java/org/s4s/gui/views/ArtikeldetailsView.java new file mode 100644 index 0000000..d5d27c2 --- /dev/null +++ b/src/main/java/org/s4s/gui/views/ArtikeldetailsView.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @author Holger + */ +public class ArtikeldetailsView extends VerticalLayout implements View{ + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + +} diff --git a/src/main/java/org/s4s/gui/views/BenutzerkontoView.java b/src/main/java/org/s4s/gui/views/BenutzerkontoView.java new file mode 100644 index 0000000..2cd0b54 --- /dev/null +++ b/src/main/java/org/s4s/gui/views/BenutzerkontoView.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @author Holger + */ +public class BenutzerkontoView extends VerticalLayout implements View{ + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + +} diff --git a/src/main/java/org/s4s/gui/views/CheckoutView.java b/src/main/java/org/s4s/gui/views/CheckoutView.java new file mode 100644 index 0000000..51d921a --- /dev/null +++ b/src/main/java/org/s4s/gui/views/CheckoutView.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @author Holger + */ +public class CheckoutView extends VerticalLayout implements View{ + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + +} diff --git a/src/main/java/org/s4s/gui/views/FaqView.java b/src/main/java/org/s4s/gui/views/FaqView.java new file mode 100644 index 0000000..5d7c4df --- /dev/null +++ b/src/main/java/org/s4s/gui/views/FaqView.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @author Holger + */ +public class FaqView extends VerticalLayout implements View{ + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + +} diff --git a/src/main/java/org/s4s/gui/views/ImpressumView.java b/src/main/java/org/s4s/gui/views/ImpressumView.java new file mode 100644 index 0000000..3fb2841 --- /dev/null +++ b/src/main/java/org/s4s/gui/views/ImpressumView.java @@ -0,0 +1,39 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.ui.Alignment; +import com.vaadin.ui.Label; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @author Holger + */ +public class ImpressumView extends VerticalLayout implements View{ + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + this.setUp(); + } + + private void setUp(){ + setSizeFull(); + setMargin(true); + Label label = new Label("Lorem ipsum dolor sit amet, consetetur sadipscing elitr, " + + "sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat," + + " sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum." + + " Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet." + + " Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod" + + " tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua." + + " At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, " + + "no sea takimata sanctus est Lorem ipsum dolor sit amet."); + addComponent(label); + setComponentAlignment(label,Alignment.MIDDLE_CENTER); + } +} diff --git a/src/main/java/org/s4s/gui/views/KaufbestaetigungView.java b/src/main/java/org/s4s/gui/views/KaufbestaetigungView.java new file mode 100644 index 0000000..3056dff --- /dev/null +++ b/src/main/java/org/s4s/gui/views/KaufbestaetigungView.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @author Holger + */ +public class KaufbestaetigungView extends VerticalLayout implements View{ + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + +} diff --git a/src/main/java/org/s4s/gui/views/LoginView.java b/src/main/java/org/s4s/gui/views/LoginView.java new file mode 100644 index 0000000..360dfc2 --- /dev/null +++ b/src/main/java/org/s4s/gui/views/LoginView.java @@ -0,0 +1,56 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.server.Resource; +import com.vaadin.ui.Alignment; +import com.vaadin.ui.Button; +import com.vaadin.ui.Component; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.PasswordField; +import com.vaadin.ui.VerticalLayout; +import java.awt.TextField; + +/** + * + * @author Holger + */ +public class LoginView extends VerticalLayout implements View{ + + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + this.setUp(); + } + + public void setUp(){ + setSizeFull(); + setMargin(true); + final HorizontalLayout horizontalLayout = new HorizontalLayout(); + final TextField user = new TextField("Benutzername: "); + final PasswordField password = null; + final Button loginButton = new Button("Einloggen"); + + + + horizontalLayout.setSpacing(true); + horizontalLayout.addComponent(loginButton); + horizontalLayout.setComponentAlignment(loginButton, Alignment.TOP_RIGHT); + horizontalLayout.addComponent(password); + horizontalLayout.setComponentAlignment(password, Alignment.TOP_RIGHT); + horizontalLayout.addComponent((Component) user); + horizontalLayout.setComponentAlignment((Component) user, Alignment.TOP_RIGHT); + + + addComponent(horizontalLayout); + setComponentAlignment(horizontalLayout,Alignment.TOP_RIGHT); + + } + + +} diff --git a/src/main/java/org/s4s/gui/views/PasswortView.java b/src/main/java/org/s4s/gui/views/PasswortView.java new file mode 100644 index 0000000..0677981 --- /dev/null +++ b/src/main/java/org/s4s/gui/views/PasswortView.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @author Holger + */ +public class PasswortView extends VerticalLayout implements View{ + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + +} diff --git a/src/main/java/org/s4s/gui/views/MainView.java b/src/main/java/org/s4s/gui/views/ShopView.java similarity index 97% rename from src/main/java/org/s4s/gui/views/MainView.java rename to src/main/java/org/s4s/gui/views/ShopView.java index 00e5e50..a6e1ed6 100644 --- a/src/main/java/org/s4s/gui/views/MainView.java +++ b/src/main/java/org/s4s/gui/views/ShopView.java @@ -25,7 +25,7 @@ import org.s4s.process.controll.ProductSearch; * * @author Holger */ -public class MainView extends VerticalLayout implements View{ +public class ShopView extends VerticalLayout implements View{ @Override public void enter(ViewChangeListener.ViewChangeEvent event) { diff --git a/src/main/java/org/s4s/gui/views/VerkaeuferbewertungView.java b/src/main/java/org/s4s/gui/views/VerkaeuferbewertungView.java new file mode 100644 index 0000000..dba00ea --- /dev/null +++ b/src/main/java/org/s4s/gui/views/VerkaeuferbewertungView.java @@ -0,0 +1,27 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @author Holger + */ +public class VerkaeuferbewertungView extends VerticalLayout implements View{ + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + this.setUp(); + } + + public void setUp(){ + + } + +} diff --git a/src/main/java/org/s4s/gui/views/WarenkorbView.java b/src/main/java/org/s4s/gui/views/WarenkorbView.java new file mode 100644 index 0000000..048d560 --- /dev/null +++ b/src/main/java/org/s4s/gui/views/WarenkorbView.java @@ -0,0 +1,23 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.gui.views; + +import com.vaadin.navigator.View; +import com.vaadin.navigator.ViewChangeListener; +import com.vaadin.ui.VerticalLayout; + +/** + * + * @author Holger + */ +public class WarenkorbView extends VerticalLayout implements View{ + + @Override + public void enter(ViewChangeListener.ViewChangeEvent event) { + + } + +} diff --git a/src/main/java/org/s4s/gui/views/WelcomeView.java b/src/main/java/org/s4s/gui/views/WelcomeView.java index bfdc98c..5e01a1f 100644 --- a/src/main/java/org/s4s/gui/views/WelcomeView.java +++ b/src/main/java/org/s4s/gui/views/WelcomeView.java @@ -43,12 +43,25 @@ public class WelcomeView extends VerticalLayout implements View{ buttonLayout.setComponentAlignment(loginButton, Alignment.TOP_RIGHT); + Button impressumButton = new Button("Impressum"); + horizontalLayout.addComponent(impressumButton); + horizontalLayout.setComponentAlignment(impressumButton, Alignment.MIDDLE_LEFT); + + addComponent(buttonLayout); buttonLayout.setSizeFull(); sucheButton.addClickListener((Button.ClickEvent event) ->{ - UI.getCurrent().getNavigator().navigateTo(Views.MAIN); + UI.getCurrent().getNavigator().navigateTo(Views.SHOP); }); + loginButton.addClickListener((Button.ClickEvent event) ->{ + UI.getCurrent().getNavigator().navigateTo(Views.LOGIN); + }); + + impressumButton.addClickListener((Button.ClickEvent event) -> { + UI.getCurrent().getNavigator().navigateTo(Views.IMPRESSUM); + }); + Label label = new Label("Willkommen in unserem Shop in Shop System!"); horizontalLayout.addComponent(label); horizontalLayout.setComponentAlignment(label, Alignment.MIDDLE_CENTER); diff --git a/src/main/java/org/s4s/modell/objects/dto/Kunde.java b/src/main/java/org/s4s/modell/objects/dto/Kunde.java new file mode 100644 index 0000000..aca558f --- /dev/null +++ b/src/main/java/org/s4s/modell/objects/dto/Kunde.java @@ -0,0 +1,30 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.modell.objects.dto; + +/** + * + * @author Holger + */ +public class Kunde { + private String vorname; + private String nachname; + private int userID; + + + + public String getVorname(){ + return vorname; + } + + public String getNachname(){ + return nachname; + } + + public int getUserID(){ + return userID; + } +} diff --git a/src/main/java/org/s4s/modell/objects/dto/Product.java b/src/main/java/org/s4s/modell/objects/dto/Product.java index 686f73e..ea55275 100644 --- a/src/main/java/org/s4s/modell/objects/dto/Product.java +++ b/src/main/java/org/s4s/modell/objects/dto/Product.java @@ -5,6 +5,10 @@ */ package org.s4s.modell.objects.dto; +import java.util.Objects; +import org.apache.commons.lang3.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.HashCodeBuilder; + /** * * @author Holger Karwanni @@ -29,6 +33,35 @@ public class Product { } + @Override + public boolean equals(Object other){ + if(other == null){ + return false; + } + if(!(other instanceof Product)){ + return false; + } + Product p = (Product) other; + return new EqualsBuilder() + .append(p.getName(), name) + .append(p.getId(), id) + .append(p.getTyp(), typ) + .append(p.getPrice(), price) + .append(p.getDescription(), description) + .isEquals(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder() + .append(name) + .append(id) + .append(typ) + .append(price) + .append(description) + .hashCode(); + } + public String getName(){ return name; } diff --git a/src/main/java/org/s4s/modell/objects/dto/Warenkorb.java b/src/main/java/org/s4s/modell/objects/dto/Warenkorb.java new file mode 100644 index 0000000..8e80c8c --- /dev/null +++ b/src/main/java/org/s4s/modell/objects/dto/Warenkorb.java @@ -0,0 +1,51 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.modell.objects.dto; + +import java.util.ArrayList; +import java.util.List; + +/** + * + * @author Holger + */ +public class Warenkorb { + + private final List<Product> products; + + + public Warenkorb(){ + products = new ArrayList<>(); + } + + public void add(Product p){ + if(p == null){ + throw new NullPointerException("Produkt darf nicht null sein!"); + } + products.add(p); + } + + public void remove(Product p){ + if(p == null){ + throw new NullPointerException("Produkt darf nicht null sein!"); + } + if(!products.contains(p)){ + throw new IllegalArgumentException("Das Produkt ist nicht im Warenkorb enthalten!"); + } + products.remove(p); + } + + public double sum(){ + return products.stream().mapToDouble(p-> p.getPrice()).sum(); + } + + public boolean contains(Product p){ + if(p == null){ + throw new NullPointerException("Produkt darf nicht null sein!"); + } + return products.contains(p); + } +} \ No newline at end of file diff --git a/src/main/java/org/s4s/services/util/Views.java b/src/main/java/org/s4s/services/util/Views.java index 9cf7f09..263d4d6 100644 --- a/src/main/java/org/s4s/services/util/Views.java +++ b/src/main/java/org/s4s/services/util/Views.java @@ -9,7 +9,21 @@ package org.s4s.services.util; * * @author Holger */ -public class Views { +public final class Views { public final static String WELCOME = "welcome"; - public final static String MAIN = "main"; + public final static String SHOP = "shop"; + public final static String LOGIN = "login"; + public final static String WARENKORB = "warenkorb"; + public final static String BENUTZERKONTO = "benutzerkonto"; + public final static String PASSWORT = "passwort"; + public final static String ARTIKELDETAILS = "artikeldetails"; + public final static String CHECKOUT = "checkout"; + public final static String IMPRESSUM = "impressum"; + public final static String FAQ = "faq"; + public final static String KAUFBESTAETIGUNG = "kaufbestaetigung"; + public final static String VERKAEUFERBEWERTUNG = "verkaeuferbewertung"; + + private Views(){ + + } } diff --git a/src/test/java/org/s4s/matchers/UtilityMatchers.java b/src/test/java/org/s4s/matchers/UtilityMatchers.java new file mode 100644 index 0000000..4a05d90 --- /dev/null +++ b/src/test/java/org/s4s/matchers/UtilityMatchers.java @@ -0,0 +1,77 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.matchers; +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import lombok.SneakyThrows; +import org.hamcrest.Description; +import org.hamcrest.Matcher; +import org.hamcrest.TypeSafeMatcher; + +public class UtilityMatchers { + + public static Matcher isWellDefinedUtilityClass() { + return new TypeSafeMatcher<Class>() { + private boolean isFinal; + private boolean onlyOneCtor; + private boolean isConstructorPrivate; + private Method nonStaticMethod; + + @Override + @SneakyThrows({NoSuchMethodException.class, InstantiationException.class, IllegalAccessException.class, InvocationTargetException.class}) + protected boolean matchesSafely(Class clazz) { + isFinal = Modifier.isFinal(clazz.getModifiers()); + if (!isFinal) { + return false; + } + + onlyOneCtor = clazz.getDeclaredConstructors().length == 1; + if (!onlyOneCtor) { + return false; + } + + final Constructor<?> constructor = clazz.getDeclaredConstructor(); + isConstructorPrivate = !constructor.isAccessible() && Modifier.isPrivate(constructor.getModifiers()); + if (!isConstructorPrivate) { + return false; + } + + constructor.setAccessible(true); + constructor.newInstance(); + constructor.setAccessible(false); + for (final Method method : clazz.getMethods()) { + if (!Modifier.isStatic(method.getModifiers()) + && method.getDeclaringClass().equals(clazz)) { + nonStaticMethod = method; + return false; + } + } + + return true; + } + + @Override + public void describeTo(Description description) { + description.appendText("Class must be a well defined utility class "); + } + + @Override + protected void describeMismatchSafely(final Class item, final Description mismatchDescription) { + if (!isFinal) { + mismatchDescription.appendText(" class is not final"); + } else if (!onlyOneCtor) { + mismatchDescription.appendText(" has not exactly one constructor"); + } else if (!isConstructorPrivate) { + mismatchDescription.appendText(" constructor is not private"); + } else if (nonStaticMethod != null) { + mismatchDescription.appendText(" method ").appendValue(nonStaticMethod).appendText(" is not static"); + } + } + }; + } +} diff --git a/src/test/java/org/s4s/modell/object/dto/ProductTest.java b/src/test/java/org/s4s/modell/object/dto/ProductTest.java new file mode 100644 index 0000000..3891b1c --- /dev/null +++ b/src/test/java/org/s4s/modell/object/dto/ProductTest.java @@ -0,0 +1,40 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.modell.object.dto; +import java.util.HashMap; +import java.util.Map; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.hasEntry; +import static org.hamcrest.Matchers.not; +import org.junit.Before; +import org.junit.Test; +import org.s4s.modell.objects.dto.Product; + +/** + * + * @author Holger + */ +public class ProductTest { + + @Test + public void shouldComplyHashCodeContract() { + + Product p1 = new Product("Glühbirne", 1, "Elektronik",1.50, "Halt ne Glühbirne"); + Product p2 = new Product("Glühbirne", 1, "Elektronik",1.50, "Halt ne Glühbirne"); + Product p3 = new Product("LED", 2, "Elektronik",7.99, "Halt ein LED"); + + Map<Product, String> map = new HashMap<>(); + + map.put(p1, "a"); + map.put(p2, "b"); + map.put(p3, "c"); + + assertThat(map, not(hasEntry(new Product("Glühbirne", 1, "Elektronik",1.50, "Halt ne Glühbirne"), "a"))); + assertThat(map, hasEntry(new Product("Glühbirne", 1, "Elektronik",1.50, "Halt ne Glühbirne"), "b")); + assertThat(map, hasEntry(new Product("LED", 2, "Elektronik",7.99, "Halt ein LED"), "c")); + } + +} diff --git a/src/test/java/org/s4s/modell/object/dto/WarenkorbTest.java b/src/test/java/org/s4s/modell/object/dto/WarenkorbTest.java new file mode 100644 index 0000000..0fef861 --- /dev/null +++ b/src/test/java/org/s4s/modell/object/dto/WarenkorbTest.java @@ -0,0 +1,74 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.modell.object.dto; + + +import org.junit.Assert; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Before; +import org.junit.Test; +import org.s4s.modell.objects.dto.Product; +import org.s4s.modell.objects.dto.Warenkorb; + +/** + * + * @author Holger + */ +public class WarenkorbTest { + Product p1 = new Product(); + Product p2 = new Product(); + Product p3 = new Product(); + Warenkorb warenkorb; + + @Before + public void setUp(){ + warenkorb = new Warenkorb(); + p1 = new Product("Glühbirne", 1, "Elektronik",1.50, "Halt ne Glühbirne"); + p2 = new Product("LED", 2, "Elektronik",7.99, "Halt ein LED"); + p3 = new Product("Neonröhre", 3, "Elektronik",19.95, "Halt ne Neonröhre"); + } + @Test(expected = NullPointerException.class) + public void test_add(){ + warenkorb.add(p1); + assertTrue(warenkorb.contains(p1)); + warenkorb.add(p2); + assertTrue(warenkorb.contains(p2)); + warenkorb.add(p3); + assertTrue(warenkorb.contains(p3)); + warenkorb.add(null); + + } + + @Test(expected = NullPointerException.class) + public void test_remove(){ + warenkorb.add(p1); + warenkorb.remove(p1); + assertFalse(warenkorb.contains(p1)); + warenkorb.remove(null); + } + + @Test(expected = IllegalArgumentException.class) + public void test_remove_notcontains(){ + warenkorb.remove(p1); + + } + @Test + public void test_sum(){ + warenkorb.add(p1); + assertEquals(1.50,warenkorb.sum(), 0.001); + warenkorb.add(p2); + assertEquals(9.49,warenkorb.sum(), 0.001); + warenkorb.add(p3); + assertEquals(29.44,warenkorb.sum(), 0.001); + } + + @Test(expected = NullPointerException.class) + public void test_contains(){ + warenkorb.contains(null); + } +} diff --git a/src/test/java/org/s4s/services/util/ViewsTest.java b/src/test/java/org/s4s/services/util/ViewsTest.java new file mode 100644 index 0000000..28527ef --- /dev/null +++ b/src/test/java/org/s4s/services/util/ViewsTest.java @@ -0,0 +1,21 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.s4s.services.util; + +import static org.hamcrest.MatcherAssert.assertThat; +import org.junit.Test; +import static org.s4s.matchers.UtilityMatchers.isWellDefinedUtilityClass; + +/** + * + * @author Holger + */ +public class ViewsTest { + @Test + public void shouldCheckIfUtilityClassIsWellCoded() throws Exception { + assertThat(Views.class, isWellDefinedUtilityClass()); + } +} diff --git a/target/classes/org/s4s/MyUI$MyUIServlet.class b/target/classes/org/s4s/MyUI$MyUIServlet.class index 6f0ae277adc91764a43f3225c09b1cb007100a33..4fabc72c0a6cea28aa4c3c0ecb4b0523252f2231 100644 GIT binary patch delta 13 UcmaFL@|0x*4-=#3WL~BS03f{s)c^nh delta 13 UcmaFL@|0x*4-=#LWL~BS03c%n!vFvP diff --git a/target/classes/org/s4s/MyUI.class b/target/classes/org/s4s/MyUI.class index 2a3154d514c76342ccfae7133f33c5850b7e0e14..b7c2a3afa945bd0a41c50b09c320e030d3531a00 100644 GIT binary patch literal 1868 zcmah~>vG#f6#kUk%C2%jO`%O`>ZT#JL#UvXmexty#3hi{2_;TlTCQt*qiiipiL|n( zycK@}12a4T&%!e>oRw_i)E*em?6-T)cW$e*$AA9)+aCaK!_8s=MTXTZMzF@PZsGyM zLw(vXvB^*}@rdCw6I%?QoA`oZ+r(prCnm}aJ0^A+zBKWa;VTn+3>6dm49`qd8J=tB zU+d+CcKDLv8-{NgzB6!c=k>GgiU`}DPzJ1R-xp!Y<546c0~4##mulU>XueQ2Fjfj0 z!oYM{`eHY3)kL_@YaU7La!}`9m4{NFyTUPbD9OiEIS5@Rx*a(>Qjxr9p9U85<$BO^ z+MG9}??jY=2%Tzj+7rjIh*VL>oJ<K_k%4RfYef-!-j)V({ZuV-xe7vOx3{BQvXvkX z>tajlDl$63o3D7A8@RL=`%1P%RYsCZ+VK5AaU}zvDw^;2%TG1V{-J0I@;ct;UQ7;I z>$TFN|1y!v(<WBsFgVIdKc~^c5^j)D-~9|pU$ee9aJhHA`U+)TL{6-v=TxQWP_APU z`7<!rBe}73+FIr4K$>LX2mDC6c7#XqDAy~4+~=uI)2TWyaHZcD_|#`vYf@IG!$aXW zgRo}c>JX1TZOS%}sN*_8NPRIsNPgN?rrgPz@MHCp2%CYg0t43v4L183snrw@m23*H zArzM$-OS>k*~S@4H?#Vos5gUncxI)pGUaAu>nIda6t{-fyxr5L?9l^$OpP{}#uh(L z88b~DAJph2aG|6d`>uhdLHd(7NU804dQMF);sX)ZL`Q@wF)s|7R|k38g9VP7g*qA* z1P-V}d#3u87?|m6PU<Nwy4cTHJTq6;&OG*nU+jNHB&kT>^+YLX9R<GdRf#?>r#TZQ zQ-JYCBdu#GU)C?w@wo3g6%~?Iu}_kWuEZqk3RQ|jYC`&Sv-!ds;gV5g5$E4=U|``a zYsj0^Bcm%8`_y|EhGbKy;u`%HXsm;VEqycGpfyh?htMD#U;YKg&xyJ~>qH{Fg=N}X zDFN?eg-&Dm05?gZjsK$4C}I0|jJ#MT52HIP_P9N90=8nCb|%5BeJ(-Eo=kAco=$Ma zek(!SKA+&MeIdcO?ROHqXkSWj&c2-ByY>~rUon4ztG0Q9+-bJ!n5Hc5Ad9=O@hRqT zkBYrd*%xsOtF&9gCf4y753q-ac!>?vNb(9L#CVicnM*6_R!KF{)qF^GX5rx@@-jmD kk15Is{WE?-I7_=bq`w<cz<cTDKHeiumJZkHx)+i82lq$$MF0Q* delta 415 zcmYLD%T5A85Ug2PW?2W(0Z~yAd?2n13ySY&;+d<7M-PT@P!re3$#C>+xcCVkB_?Pz z@dJ$CWUO6GoI_VvS9jHX4?f2azkc370o1W?V-O1xB^w47B^(P&5^liC7Ag{6uuu(3 zEf_9KtVq-)R=e#-5z|Ns<T?*#&Q#D?>l_$`;@L^-Tp)XK+4TIn?=`Pm-c9TD*7q6| zj@T)zW219#I7x*~Y$<GGM`0IxFHg~`XeSsJJOhHBDb_TZM-)WUd4=eP@(61z9F~w_ zulfrZ#TZ!><H&Ln9AA+|h{X>W#||AL4Og2w)`N7lrQ^gm*gXtrt9J+WZ=Zq5GZ!|> z{7Z#~Rm`In#^w8#e{nR&1ST11vrZw$|3@&*YXf-{h-r2+)MtIn(Ijk&7^Y&AB$2=n F;=i-UFTVf) diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst index d38b2aa..adffa0e 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -1,7 +1,19 @@ -org\s4s\modell\objects\dto\Product.class +org\s4s\gui\views\KaufbestaetigungView.class +org\s4s\gui\views\PasswortView.class +org\s4s\gui\views\VerkaeuferbewertungView.class +org\s4s\gui\views\CheckoutView.class org\s4s\gui\views\WelcomeView.class -org\s4s\process\controll\ProductSearch.class +org\s4s\modell\objects\dto\Warenkorb.class +org\s4s\gui\views\ShopView.class org\s4s\MyUI.class +org\s4s\modell\objects\dto\Kunde.class +org\s4s\gui\views\BenutzerkontoView.class +org\s4s\modell\objects\dto\Product.class +org\s4s\gui\views\ImpressumView.class +org\s4s\process\controll\ProductSearch.class +org\s4s\gui\views\LoginView.class +org\s4s\gui\views\FaqView.class +org\s4s\gui\views\WarenkorbView.class org\s4s\services\util\Views.class +org\s4s\gui\views\ArtikeldetailsView.class org\s4s\MyUI$MyUIServlet.class -org\s4s\gui\views\MainView.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst index 4baeefa..c744e91 100644 --- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -1,6 +1,18 @@ -C:\Users\Holger\Documents\NetBeansProjects\s4s\src\main\java\org\s4s\process\controll\ProductSearch.java -C:\Users\Holger\Documents\NetBeansProjects\s4s\src\main\java\org\s4s\MyUI.java -C:\Users\Holger\Documents\NetBeansProjects\s4s\src\main\java\org\s4s\modell\objects\dto\Product.java -C:\Users\Holger\Documents\NetBeansProjects\s4s\src\main\java\org\s4s\gui\views\WelcomeView.java -C:\Users\Holger\Documents\NetBeansProjects\s4s\src\main\java\org\s4s\services\util\Views.java -C:\Users\Holger\Documents\NetBeansProjects\s4s\src\main\java\org\s4s\gui\views\MainView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\WelcomeView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\PasswortView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\ArtikeldetailsView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\BenutzerkontoView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\CheckoutView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\FaqView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\WarenkorbView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\process\controll\ProductSearch.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\MyUI.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\modell\objects\dto\Product.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\ImpressumView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\LoginView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\modell\objects\dto\Warenkorb.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\services\util\Views.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\ShopView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\modell\objects\dto\Kunde.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\KaufbestaetigungView.java +C:\Users\Holger\Documents\NetBeansProjects\s4s_MeineTests\src\main\java\org\s4s\gui\views\VerkaeuferbewertungView.java -- GitLab