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