diff --git a/pom.xml b/pom.xml index bb38ac252ffc2c9b75e824021433b93e1cc6e815..a02a065930b1d30ee95308855144cff2e9f19f89 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 fe05effba24d1fdec218d7e2d41f3fdaba07b13a..091ea082d55b3e3de850c3d6be9fbf12c9f34ce4 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 0000000000000000000000000000000000000000..d5d27c24459f5adf3e354502db727ce71337f1b1 --- /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 0000000000000000000000000000000000000000..2cd0b54a370b4aa85b19165790c839c0082bbbd8 --- /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 0000000000000000000000000000000000000000..51d921a6e394339aa44c40c731bd12ed8c294b00 --- /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 0000000000000000000000000000000000000000..5d7c4dfcf6a43d9f6a76440c5711b24ac5f09c12 --- /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 0000000000000000000000000000000000000000..3fb284142e4ed4fc326c0e51cc69a94426584989 --- /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 0000000000000000000000000000000000000000..3056dffd5cbc3aac294ec904b97f1581c87b95fa --- /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 0000000000000000000000000000000000000000..360dfc2095d6fbe4b29cc638a8c4ff11979997bd --- /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 0000000000000000000000000000000000000000..06779817aa6f59a492033cabb57b46c25aaa9f6b --- /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 00e5e50c4ba06bbbb88eed4a1be764e7f5a10831..a6e1ed6323de79a98ec76a351eeea37724e8f965 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 0000000000000000000000000000000000000000..dba00eafb715ee82545a332a69ee23fde1728fdc --- /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 0000000000000000000000000000000000000000..048d56096c5d611ab1eca00b9927b002d80c57f1 --- /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 bfdc98cf4bd585bf91b40794069b78603508432a..5e01a1fe47bb97a015da76358e95de14b1419d2a 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 0000000000000000000000000000000000000000..aca558f3c36317eb6d7a593ea5f6e91deaeefb58 --- /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 686f73e3e25175f4827a8afb456a50aacc6032cf..ea55275a45ad857dffb4a2568c8de49a4cc8f99c 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 0000000000000000000000000000000000000000..8e80c8c2f0da707ea63cb3b8e19c0afd405be3ef --- /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 9cf7f096b171f6c02b6f5abc5e1ee154261562de..263d4d67ff3aa0185ab8aee5a450a021f88b8df9 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 0000000000000000000000000000000000000000..4a05d90d2c7cde0f1d6f75183e0173d7a2686540 --- /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 0000000000000000000000000000000000000000..3891b1c3af47b392624a87d5eceaeec2a0a48270 --- /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 0000000000000000000000000000000000000000..0fef861cc5a8b7d2a568dc69c143f65064310ccb --- /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 0000000000000000000000000000000000000000..28527ef24aecab1ad4a6bf6bdcaaf534c28e9f47 --- /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 Binary files a/target/classes/org/s4s/MyUI$MyUIServlet.class and b/target/classes/org/s4s/MyUI$MyUIServlet.class differ diff --git a/target/classes/org/s4s/MyUI.class b/target/classes/org/s4s/MyUI.class index 2a3154d514c76342ccfae7133f33c5850b7e0e14..b7c2a3afa945bd0a41c50b09c320e030d3531a00 100644 Binary files a/target/classes/org/s4s/MyUI.class and b/target/classes/org/s4s/MyUI.class differ 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 d38b2aa6978edcce0fee233c323a4de06d944ff7..adffa0e826a286a372eeef5956fa74bafd699f45 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 4baeefa9dde9326f42bc91b4600c1fa66ca1d1ce..c744e91c15a8dac8494420ce08bd409a9ff57046 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